0

タッチが開始されたときに実行されるメソッドにタッチ開始のタッチ位置を渡す方法がわかりません。

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
[self schedule:@selector(moveSprite:)];
return TRUE;
}

-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
[self unschedule:@selector(moveSprite:)];
}

-(void)moveSprite:(ccTime) delta
{

CGPoint spriteCenter = CGPointMake(player.contentSize.width /2,player.contentSize.height /2);

CGPoint touchPoint; //how to get this touch began?

float distanceX = touchPoint.x - spriteCenter.x;
float distanceY = touchPoint.y - spriteCenter.y;

float angle = atan2f(distanceY,distanceX); // returns angle in radians

player.rotation = angle;

}

[self schedule:@selector:また、これは移動スプライト メソッドを継続的に呼び出しますか?についても質問があります。タッチを押し続けるとスプライトの位置が変化するので、スプライトを継続的に移動させ、それに応じて回転を変化させたいと考えています。

私の最後の質問は、スプライトをタッチの x 座標に移動することです。ccmoveto を使用すると、velocity を使用してスプライトの速度をゆっくりと上げることはできませんか? タッチしたポイントにスプライトを移動して速度を上げるにはどうすればよいですか? デルタと関係があると思います。

4

1 に答える 1

1

実際、スケジュールされた方法には必要がないと思います。あなたはただ実装することができます

- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event

メソッドを作成し、そこにスプライトの回転ロジックを配置します。

CCActionEase変更可能な移動速度を取得するには、サブクラスの 1 つを使用できます。移動アクションをそれらの 1 つにラップすると、移動中に速度が変化することがわかります。何かのようなもの

id move_ease_in = [CCEaseIn actionWithAction:yourMoveAction rate:3.0f];
[player runAction: move_ease_in];

ここでいくつかの例を見ることができます

于 2012-06-19T18:02:54.660 に答える