2013-02-16 78 views
0

一些幫助將不勝感激。雪碧運動基於從屏幕上的觸摸獲得的標題。 Sprite按預期移動,但我無法改變速度,無論我用於currentSpeed的值如何。這是在精靈的更新方法中。提前致謝。CCMoveTo持續時間/速度問題

// Distance between two points (Distance formula, Pythagorean Theorem c^2=a^2+b^2, so d=sqrt((x2-x1)^2+(y2-y1)^2) 
    // Duration (time = distance/rate) 

    CGPoint adjustedPosition; 
    adjustedPosition.x = position_.x - sinf(heading); 
    adjustedPosition.y = position_.y - cosf(heading); 

    float distance = CGPointDistanceBetweenTwoPoints(adjustedPosition, position_); 
    float duration = distance/currentSpeed; 

    position_ = adjustedPosition; 

    [self runAction:[CCMoveTo actionWithDuration:duration position:position_]]; 
+0

這是在「更新」方法(或ccTouchMoved)中,還是直到下一次觸摸纔會發生的一種遺忘方法? – YvesLeBorg 2013-02-17 20:59:30

+0

它在精靈的更新方法中。 – 2013-02-17 21:20:31

回答

1

不要在更新方法使用通過MoveTo或與此有關的任何行動。相反,計算位置,像這樣:

-(void) update:(ccTime) dt { 

    // _velocity in points per second. 
    // heading should be in ccw notation, 0 on x axis, RHS 

    float deltaX = dt * _velocity * cosf(heading); 
    float deltaY = dt * _velocity * sinf(heading); 
    CGPoint adjustedPosition = ccpAdd(self.position, ccp(deltaX,deltaY)); 
    self.position = adjustedPosition; 
} 

或類似的東西。這將緩解任何方差id dt,對此你​​唯一可以打賭的是它不會是恆定的;但物理學應該是對的。

+0

所以我最終使用了你的實現的變體(你的更清潔,而且,它工作:)),但它仍然不能解釋爲什麼我的工作不起作用。我從來沒有讀過,你不能在預定的更新程序中使用操作。有興趣知道背後的「爲什麼」。非常感謝。 – 2013-02-18 21:17:06

0

嘗試此距離:

float distance = ccpLength(ccpSub(adjustedPosition, position_)); 
+0

沒有快樂。你的方法和我的距離非常相似。我認爲CCMoveTo有一個最小持續時間,因爲提高速度確實縮短了持續時間,對精靈沒有任何影響。謝謝你的迴應。 – 2013-02-17 20:08:42