2

画面のタッチに合わせてスムーズに追従&回転するスプライトを作ろうとしています。プレイヤーは、一度に 1 つのスプライトしか制御できないため、スプライトを動かすためにスプライト自体に触れる必要はありません。そのため、画面上のどこに触れても、プレーヤーはその動きを追わなければなりません。これが私がこれまでに持っているものです:

GameScene.m:

- (BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    lastTouchLocation = location;

    return YES;
}

- (void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    //moveBy determine the translate vector
    CGPoint moveBy = ccpSub(lastTouchLocation, location);
    [player moveBy:moveBy];

    lastTouchLocation = location;
}

そして、ここにPlayer.mがあります:

- (float) calculateAngleForNextPoint:(CGPoint) point
{
    CGPoint nextPoint = point;
    CGPoint pos = self.position;

    float offX = nextPoint.x - pos.x;
    float offY = nextPoint.y - pos.y;

    float angle = atan2f(offY, offX);
    angle = CC_RADIANS_TO_DEGREES(angle);
    angle = -angle + 90;

    return angle;
}

- (void) moveBy:(CGPoint)_pos
{
    CGPoint newPos = ccpSub(self.position, _pos);
    float angle = [self calculateAngleForNextPoint:newPos];

    self.position = newPos;
    self.rotation = angle;   

}

このコードはうまく機能しますが、回転はまったくスムーズではありません。主に、プレイヤーが画面上でゆっくりと指を動かすと、スプライトが狂ってしまいます! アクションの設定など、さまざまなことを試しましたが、touchMoved メソッドの呼び出しが速すぎてアクションを使用できません。

これを解決するにはどうすればよいですか?どうもありがとう!

4

1 に答える 1