0

解決できないように見える問題があります。指の動きに基づいて画面上のスプライトを移動したいのですが、スプライトをタッチ位置に向かって移動させるのではなく、指が画面上を移動するのと同じようにスプライトを移動させたいです。

例: ユーザーが画面上 (任意の位置) に指を置き、画面上で指を 200 ピクセル左にドラッグすると、スプライトも左に 200 ピクセル移動する必要があります。

私のアプローチは、開始時のプレーヤーの位置を保存し、開始位置と指の現在の位置の差を計算して、スプライト自体の開始位置に追加することでした。

これが私のコードです

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
if([touches count] == 1){
    UITouch *touch = [touches anyObject];
    CGPoint startPos = [touch locationInView:[touch view]];
    startPosition = startPos;
}

}

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    if([touches count] == 1){
        UITouch *touch = [touches anyObject];
        CGPoint touchPos = [touch locationInView:[touch view]];
        CGPoint playerPos = player.position;

        float yDifference = startPosition.y - touchPos.y;
        playerPos.y = playerPos.y - yDifference;

        // just to change to GL coordinates instead of the ones used by Cocos2D
        // still doesn't work even if I remove this...
        CGPoint convertedPoint = [[CCDirector sharedDirector] convertToGL:playerPos];
        [player setPosition:convertedPoint];
    }

}

私が抱えている問題が明確であることを願っていますが、そうでない場合は、遠慮なく質問するか、さらに説明してください。私はかなり長い間これにこだわっています:'(

4

2 に答える 2

1

また、正確にタッチした場所ではなく、開始した場所に「相対的に」移動させたい場合は、次のようにします。

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    if([touches count] == 1){
      UITouch *touch = [touches anyObject];
      CGPoint startPos = [touch locationInView:[touch view]];
      startPosition = startPos;
      playerStartPos = playerPos;
    }
 }

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    if([touches count] == 1){
      UITouch *touch = [touches anyObject];
      CGPoint touchPos = [touch locationInView:[touch view]];

      CGPoint newPlayerPos;
      newPlayerPos.x = playerStartPos.x + (touchPos.x - startPosition.x);
      newPlayerPos.y = playerStartPos.y + (touchPos.y - startPosition.y);

      // just to change to GL coordinates instead of the ones used by Cocos2D
      // still doesn't work even if I remove this...
      CGPoint convertedPoint = [[CCDirector sharedDirector] convertToGL:newPlayerPos];
      [player setPosition:convertedPoint];
}

あなたのコードは、playerPos.yに継続的に違いを追加することで、それ自体に「フィードバック」しているように見えます

于 2012-08-08T07:00:33.313 に答える
0

したがって、違いを使用しないで、現在のタッチ位置を使用してください。

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    if([touches count] == 1){
        UITouch *touch = [touches anyObject];
        CGPoint playerPos = [touch locationInView:[touch view]];

        // just to change to GL coordinates instead of the ones used by Cocos2D
        // still doesn't work even if I remove this...
        CGPoint convertedPoint = [[CCDirector sharedDirector] convertToGL:playerPos];
        [player setPosition:convertedPoint];
    }
于 2012-08-08T06:45:25.253 に答える