簡體   English   中英

降低CCSprite速度時的奇怪行為

[英]Odd behavior when decrementing a CCSprite velocity

我的CCSprite子類有兩個float屬性,稱為ve​​lX和velY,用於跟蹤播放器的速度。 當它在游戲層中滑動后,我便確定了滑動的矢量方向,並開始以這種方式移動玩家。 在我的游戲層的-update:(ccTime)dt方法中,我調用[player update:(ccTime)dt (我知道,同名),並且CCSprite類中的該方法具有此代碼。

// move
    self.position = ccp(self.position.x + self.velX * dt, self.position.y + self.velY * dt);
    // do edge checking

// decelerate
    #define kDeceleration .95
    NSLog(@">velX = %1.1f, velY = %1.1f, fabs(velX) = %1.1f, fabs(velY) = %1.1f", self.velX, self.velY, fabs(velX), fabs(velY));
    self.velX *= kDeceleration;
    if (fabs(self.velX < 1.0)) self.velX = 0.0;
    self.velY *= kDeceleration;
    if (fabs(self.velY < 1.0)) self.velY = 0.0;

每當游戲層調用update並在游戲循環使用的相同時間增量內傳遞時,就會調用此方法。

如果我向正方向滑動,效果很好,但是,如果任一滑動分量為負(向左或向下),則它們會直接變為零。 如果除去條件,一切正常,我只是想乘以零應該比不斷乘以很小的小數便宜。

我一定不正確使用fabs()函數...

編輯:兩次滑動的一些樣本輸出,兩個軸一個正,兩個軸一個負。

>velX = 21.8, velY = 20.6, fabs(velX) = 21.8, fabs(velY) = 20.6
>velX = 20.7, velY = 19.6, fabs(velX) = 20.7, fabs(velY) = 19.6
>velX = 19.7, velY = 18.6, fabs(velX) = 19.7, fabs(velY) = 18.6
>velX = 18.7, velY = 17.7, fabs(velX) = 18.7, fabs(velY) = 17.7
>velX = 17.8, velY = 16.8, fabs(velX) = 17.8, fabs(velY) = 16.8

>velX = -23.0, velY = -19.3, fabs(velX) = 23.0, fabs(velY) = 19.3
>velX = 0.0, velY = 0.0, fabs(velX) = 0.0, fabs(velY) = 0.0
>velX = 0.0, velY = 0.0, fabs(velX) = 0.0, fabs(velY) = 0.0
>velX = 0.0, velY = 0.0, fabs(velX) = 0.0, fabs(velY) = 0.0
>velX = 0.0, velY = 0.0, fabs(velX) = 0.0, fabs(velY) = 0.0

我相信這是語法錯誤:

self.velX *= kDeceleration;
if (fabs(self.velX < 1.0)) self.velX = 0.0;
self.velY *= kDeceleration;
if (fabs(self.velY < 1.0)) self.velY = 0.0;

應該是這樣的:

self.velX *= kDeceleration;
if (fabs(self.velX) < 1.0) self.velX = 0.0;
self.velY *= kDeceleration;
if (fabs(self.velY) < 1.0) self.velY = 0.0;

您需要在比較運算符之前關閉fabs括號

p / s:沒關系,每個人都一直在犯這種錯誤:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM