0

我正在使用 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 onTarget,但我找不到任何地方如何调用不在“self”中的方法,更不用说如何解释普通Objective-C合并但似乎缺少的“withObject”从 Sprite Kit 中丢失。

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

谢谢!!

编辑**

我在 for 循环中访问 _letterTile

4

2 回答 2

0

该块将工作。问题是_letterTile从一开始就没有分配给非零值。如果是这样,即使您同时将变量设置为 nil,该块也会保留该对象并发送原始对象。

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

于 2014-04-01T07:36:35.970 回答
0

这与我访问对象的方式有关。由于线

[self.tileSelectionManager swapSingleTileBackToNotSelected:_letterTile];

块外立即触发,它运行正常。然而,由于我正在遍历一个带有我的 _letterTile 的 for 循环,所以当块被触发时,它已经失去了对它的跟踪。

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

于 2014-04-02T00:34:16.617 回答