我正在使用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
答案 0 :(得分:0)
该块将起作用。问题是_letterTile
从未分配给非零值。如果是的话,即使你在此期间将变量设置为nil,块也会保留对象并发送原始对象。
提示:设置断点并查看调试器的变量列表。
答案 1 :(得分:0)
这与我访问对象的方式有关。自行
[self.tileSelectionManager swapSingleTileBackToNotSelected:_letterTile];
块外面的立即触发,它正常运行。但是,因为我正在迭代一个携带我的_letterTile的for循环,所以当块发射时它已经失去了它的踪迹。
将for循环更改为(letterTileArray中的LetterTile * tile)解决了我的问题。