0

次のコードを使用して、アプリでスプライトを移動します。

- (void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

    UITouch *touch = [touches anyObject];

    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];

    CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
    oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
    oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];

    CGPoint translation = ccpSub(touchLocation, oldTouchLocation);
    CGPoint newPos = ccpAdd(self.position, translation);

    self.position = newPos;
}

正常に動作しますが、ファインダーが画面上にあるとスプライトが移動します。

私が実現したいのは、iOS の組み込みアプリのように、スワイプ後のある種の勢いです。

誰かがそれを行う方法のヒントを教えてもらえますか?

4

1 に答える 1

0

オブジェクトを手放したときの速度 (px/秒) を簡単に取得できます。

(thisTouchPosition.x - lastTouchPosition.x) / (thisTouchTime - lastTouchTime)

次に、オブジェクトが解放されたときに必要な「スローダウン」の倍率を作成します (1 秒あたりのピクセル数も 0.0 ~ 1.0)。SLOWDOWN が低いほど、減速が速くなります。そして、あなたのレンダリングループでは、あなたの位置に対してこのようなものが機能するはずです. FPS はサイクル レートです。

SPEED *= SLOWDOWN
x = x + SPEED / FPS

レンダー ループがない場合 (そうすべきですが)、NSTimer を作成し、完了したら無効にするか、別のスレッドを生成してこれを行う必要があります。

これはテストされていませんが、うまくいくはずです。

于 2013-01-08T17:33:43.627 に答える