2014-03-12 69 views
0

我正在使用SpriteKit,並且我的精靈正在放緩,因爲它接近觸摸點。雪碧正在減速,因爲它接近觸摸點

我希望精靈在從初始點移動到屏幕上的觸摸點時保持固定的速度。

目前,我有時間設定爲3.0

在touchesEnded事件中,我收集了觸摸的新點和值保存到一個屬性。

在現場更新事件,我執行

float realMoveDuration = 3.0; 
SKAction *actionMove = [SKAction moveTo:self.newPoint duration:realMoveDuration]; 
[self.player runAction:[SKAction sequence:@[actionMove]]]; 

所以當玩家精靈開始越來越接近觸摸點,移動速度變慢,並逐漸達到觸摸點。

這不是我正在尋找的動作,我希望玩家精靈繼續以恆定的速度前往接觸點。

+0

更多背景資料及代碼,請 – LearnCocos2D

+0

你說在現場更新您運行的動作。你是否每一幀都在運行這個動作?如果是這樣,這可能是您的問題,因爲您每秒添加60次新動作。另外,如果只有一個動作,則不需要序列。 – prototypical

回答

2

你應該在touchesEnded事件中運行你的SKAction。

如果您在更新事件中擁有該代碼,則它將以每秒60次的速度啓動新的SKAction。您只需要在目的地發生變化時運行新的SKAction。

如果在到達原始目的地之前目的地發生變化,則應該從該節點刪除動作,然後添加一個新動作。

此外,不確定您正在做什麼的具體情況,但物體移動的速度取決於距離以及指定它達到目標的時間。因此,如果您希望節點以一致的速度移動,而不考慮距離,則需要進行計算以確定爲SKAction設置的正確持續時間。

例如,如果速度表示每秒的像素/單位,你可以這樣做來計算你的時間:

duration = distance/speed; 
0

如果您使用SKAction來移動精靈,請使用timingMode屬性。缺省值是SKActionTimingLinear。所以如果你沒有改變它,節點應該以恆定的速度移動。

以下是可用的鏈接Action Timing Modes

+0

是的,我沒有修改timingMode屬性,所以線性應該仍然有效......也許我把SKAction放在錯誤的事件中?但是當我將代碼放入touchesEnded事件中時,我也遇到同樣的問題 – pithhelmet

+0

您不應該在更新方法中放入'SKAction'。會發生什麼:在每次更新(=每秒60次)時,調用SKAction並且播放器移向newPoint。由於距離每次變小,但realMoveDuration保持3秒,速度逐漸減小,移動速度變慢。 –