使用SKAction在对象中调用带有消息的方法

时间:2014-04-01 04:22:16

标签: objective-c sprite-kit skaction

我正在使用Sprite Kit并尝试编写一个动画来向对象发送消息。我想要完成的是调用此代码:

[self.tileSelectionManager swapSingleTileBackToNotSelected:_letterTile];

但是使用SKActions。我首先尝试使用runBlock,如下所示:

for (_letterTile in letterTileArray) {
    SKAction *swapToNonSelected = [SKAction runBlock:^ {
            [self.tileSelectionManager swapSingleTileBackToNotSelected:_letterTile];
        }];

    [_letterTiles runAction:swapToNonSelected];
}

但在swapSingleTileBackToNotSelected触发时发现_letterTile为零。我查看了将信息传递给块,并尝试在^之后写(Lettertile * letterTile),但我无法使其工作。

然后我看着简单地在目标上调用SKAction的performSelector,但是我无法在任何地方找到如何调用不在" self"中的方法,更不用说如何为缺少" withObject"正常的Objective-C包含但似乎缺少Sprite Kit。

有人可以告诉我,我应该如何使用SKAction调用我在TileSelectionManager对象中的方法并传入我的_letterTile?

谢谢!

编辑**

我在for循环中访问_letterTile

2 个答案:

答案 0 :(得分:0)

该块将起作用。问题是_letterTile从未分配给非零值。如果是的话,即使你在此期间将变量设置为nil,块也会保留对象并发送原始对象。

提示:设置断点并查看调试器的变量列表。

答案 1 :(得分:0)

这与我访问对象的方式有关。自行

[self.tileSelectionManager swapSingleTileBackToNotSelected:_letterTile];
块外面的

立即触发,它正常运行。但是,因为我正在迭代一个携带我的_letterTile的for循环,所以当块发射时它已经失去了它的踪迹。

将for循环更改为(letterTileArray中的LetterTile * tile)解决了我的问题。