2014-06-30 139 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