从SKAction制作属性的问题(SpriteKit)

时间:2014-06-30 17:28:07

标签: ios sprite-kit skaction

再一次,可能是一个新手问题。我按照我在这两个链接中找到的说明进行操作,因为它们解决了我所遇到的问题(从自己的方法之外修改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相同),因此属性声明无法正常工作。我尝试了几件事,但到目前为止我找不到遗漏的东西。

提前致谢!

2 个答案:

答案 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。但请确保您阅读指针和属性并了解其中的区别。