再一次,可能是一个新手问题。我按照我在这两个链接中找到的说明进行操作,因为它们解决了我所遇到的问题(从自己的方法之外修改SKAction的速度):
How to change duration of executed SpriteKit action
How to run or execute an SKAction from outside of the object?
就我而言,有这个SKAction:
SKAction * moveBall = [SKAction moveToY:0 duration:1];
[ball runAction:moveBall withKey:@"ball falling"];
我创建了这个属性,如下所示:
@property SKAction * moveBall;
然后我想在触摸按钮后从touchesBegan调用它,如下所示:
if ([node.name isEqualToString:@"Slow Down Button"]) {
self.moveBall.speed = 0.5;
}
其自身方法中的 moveBall.speed
为1.0,但self.moveBall.speed
表示速度为0.0(_moveBall.speed
相同),因此属性声明无法正常工作。我尝试了几件事,但到目前为止我找不到遗漏的东西。
提前致谢!
答案 0 :(得分:0)
此:
SKAction * moveBall = [SKAction moveToY:0 duration:1];
创建一个名为moveBall
的局部变量。但您的财产可通过self.moveBall
直接通过名为_moveBall
的自动合成的ivar直接访问。
解决方案是以下两种方法之一:
self.moveBall = [SKAction moveToY:0 duration:1];
或
_moveBall = [SKAction moveToY:0 duration:1];
然后继续将该变量用于addChild:
和其他用途。
答案 1 :(得分:0)
您很可能需要花一些时间阅读有关属性和指针的内容。但是你可能没有显示你正在使用的所有代码。 “在自己的方法内部”这句话很困惑。
SKAction * moveBall =与_moveBall不同,除非您已将该指针指定给该属性。但是你在代码中使用相同的名称作为指针和属性,这让事情更加混乱。
我怀疑你需要改变:
SKAction * moveBall = [SKAction moveToY:0 duration:1];
到
_moveBall = [SKAction moveToY:0 duration:1];
然后只在整个代码中使用_moveBall。但请确保您阅读指针和属性并了解其中的区别。