如何在另一个方法 SpriteKit 中访问已经初始化的节点

How to access already initialised node within another method SpriteKit

在我的一个应用程序中,我初始化了一个 SKSpriteNode (Ball) didMoveToView 方法。我有一种方法可以向上滑动(效果很好,我测试过)。

当它被调用时,它会调用一个名为 [self jump]; 的方法 在这个方法中,我希望它使用 SKSpriteNode 运行 一些动作,Ball.

我以前知道,但我忘记了允许您访问已初始化节点的代码。假设我要写 [Ball runAction:myAction]; , 编译器会将 'Ball' 替换为 '_Ball'.

如何在另一个方法中操作 SKSpriteNode 'Ball'? 我不认为我需要添加任何代码,但如果它有帮助我会遵守。 提前谢谢你。

正如评论中所建议的那样,您可以保留指向球节点的指针,但是另一种方法可能是使用 name 属性 SKNode.

当您实例化球节点时,为 name 属性 分配一个字符串标识符 -

SKSpriteNode *ball = // create instance here
ball.name = @"TheBall";// set its name
[self addChild:ball];// add to scene and forget about it

每当您需要从 SKScene 子类中访问它时,请使用 -

SKSpriteNode *sameBall = (SKSpriteNode*)[self childNodeWithName:@"TheBall"];// don't forget the typecast

现在您可以在球节点上执行任何您需要的操作。

一个有趣的阅读是 搜索节点树 的部分,在 SKNode Class Reference by Apple

您可以创建一个 class 属性 让球随处访问。

 @property (nonatomic,strong) SKSpriteNode *ball

您可以使用 self.ball 以各种方式访问​​球。

self.ball = //SKSpriteNode initialize
[self addChild:self.ball]
// Add Child

SKNodes 也可以使用其子项的 唯一名称 进行搜索。

例如你可以设置

// Initialise
ball.name = @"Ball"
// Add Child

然后可以使用函数childWithName:

搜索SKScene
SKSpriteNode *ball = [self childNodeWithName:@"Ball"]

第一种方法对你来说更简单。