0

いくつかの助けをいただければ幸いです。画面のタッチから与えられる見出しに基づくスプライトの動き。スプライトは期待どおりに動きますが、現在の速度にどのような値を使用しても、速度を変えることができません。これはスプライトの update メソッドにあります。前もって感謝します。

    // 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_]];
4

2 に答える 2

1

moveto を使用したり、更新メソッドでアクションを使用したりしないでください。代わりに、次のように position を計算します。

-(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 が緩和されます。これに賭けることができる唯一のことは、それが一定ではないということです。しかし、物理学は正しいはずです。

于 2013-02-17T22:58:55.527 に答える
0

距離についてこれを試してください:

float distance = ccpLength(ccpSub(adjustedPosition, position_));
于 2013-02-17T00:35:37.937 に答える