2014-06-30 111 views
2

再一次,可能是一个新手问题。我跟随我在这两个环节上的说明,因为它们解决的正是这个问题我有(修改SKAction的速度从它自己的方法外):SKAction(SpriteKit)产生问题的问题

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

此:

SKAction * moveBall = [SKAction moveToY:0 duration:1]; 

创建一个名为moveBall一个局部变量。但是您的财产通过self.moveBall直接通过其自动合成的伊娃被命名为_moveBall

的解决方案是这两种中的一种:

self.moveBall = [SKAction moveToY:0 duration:1]; 

_moveBall = [SKAction moveToY:0 duration:1]; 

,然后继续使用该变量对于addChild:和其他用途。

+0

工作完美,非常感谢!现在我可以从任何地方读取这个变量,这样就解决了。不过,我仍然无法正确改变速度。我可以用另一个SKAction:withKey覆盖动作,但它不是最优雅的解决方案。这可能与帧刷新有关,因为在这种情况下,只会影响到第二个球落下,并且我仍然需要再次按下按钮才能获得速度变化。我会继续尝试。 – danialias

0

你很可能需要花一些时间阅读有关属性和指针。但有可能你只是没有显示你正在使用的所有代码。 “在自己的方法中”这个短语是混淆的。

SKAction * moveBall =与_moveBall不同,除非您已将该指针指定给该属性。但是,您在代码中使用同一个名称作为指针和属性,这会让事情更加混乱。

我怀疑你需要改变:

SKAction * moveBall = [SKAction moveToY:0 duration:1]; 

_moveBall = [SKAction moveToY:0 duration:1]; 

,然后只用_moveBall整个代码。但请确保您阅读指针和属性并了解其差异。

+0

感谢您的回答!它工作完美。是的,显然我缺乏很多基础知识,这是我第一次编程。我搜索了很多,但很难找到这种问题的简单解释,特别是如果你不知道要准确搜索什么。无论如何,再次感谢! – danialias