0

これが私の移動方法です:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject];
    location = [touch locationInView: [touch view]];
    CGPoint location_ = [[CCDirector sharedDirector] convertToGL:location];
    NSLog(@"Click Position = (%f,%f)",location_.x,location_.y);

    float moveSpeed = 40.0;
    float moveDist = sqrt(pow(abs(location_.x - sprite.position.x),2) + pow(abs(location_.y - sprite.position.y),2));
    float moveTime = (moveDist / moveSpeed);

    [sprite runAction:[CCMoveTo actionWithDuration:moveTime position:location_]];
}

そして、これが私のinitメソッドです。

-(id) init
{
    // always call "super" init
    // Apple recommends to re-assign "self" with the "super" return value
    if( (self=[super init])) {
        self.isTouchEnabled = YES;
        // create and initialize a Label

        [self scheduleUpdate];  // available since v0.99.3
        [self schedule: @selector(update:) interval:0.5];

        CGSize size = [[CCDirector sharedDirector] winSize];

        bg = [CCSprite spriteWithFile:@"testBG.png"];
        bg.position = ccp(  size.width /2 , size.height/2 );
        [self addChild: bg];

        sprite = [CCSprite spriteWithFile:@"testSprite.png"];
        sprite.position = ccp(  size.width /2 , size.height/2 );
        [self addChild: sprite];

        [self runAction:[CCFollow actionWithTarget:sprite]];
    }
    return self;
}

私のウィンドウはスプライトをたどりますが、私が言ったように、スプライトは最初のタッチ後に触れたポイントとは異なるポイントに移動します。誰が何が起こっているのか教えてもらえますか?

編集:座標系自体に関係があるのではないかと考えています。

[touches anyObject];? 私の検索結果はほとんど出ていません。

edit2: スプライトを bg スプライトの中央に戻すと、そこから離れすぎるまで正常に動作することがわかりました。

4

2 に答える 2

0

これで簡単なことを提案します...新しいアクションを追加する前に、スプライトの前のアクションを停止します...

ccTouchesBegan メソッドで

[sprite stopAllActions];

[sprite runAction:[CCMoveTo actionWithDuration:moveTime position:location_]];

タッチするとスプライトが停止するので、これが役立つと思います..

現在のケースでは、アクションが実行されています..持続時間が 2 秒であるとします。次にタッチすると、1 秒のアクションが実行されます。その後、前のアクションがまだ完了していないため、間違ったポイントに移動します。

お役に立てれば.. :)

于 2012-05-06T06:06:17.490 に答える