为什么我的精灵在第一次移动后会转到错误的坐标?

时间:2012-05-05 22:16:30

标签: iphone objective-c ios cocos2d-iphone

这是我的运动方法:

- (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_]];
}

这是我的初始方法。

-(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精灵的中间,它会再次从那里恢复正常,直到距离太远。

2 个答案:

答案 0 :(得分:1)

我认为问题出在[self runAction:[CCFollow actionWithTarget:sprite]];

self是您场景,您不想四处走动。

执行此操作的模式是将CCNode添加到_contentNode,将scene添加到[_contentNode runAction:[CCFollow actionWithTarget:sprite]];并添加您想要作为孩子移动的所有内容。

然后你会打电话给{{1}}

答案 1 :(得分:0)

在这里,我建议你一个简单的事情......在添加新动作之前,停止精灵上的上一个动作......

在ccTouchesBegan方法中

[sprite stopAllActions];

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

我认为这会有所帮助,因为一旦你触摸精灵就会停止..

在目前的情况下,它正在采取行动..假设它的持续时间是2秒。并在下次触摸时运行1秒的动作。然后它会转到错误的点,因为之前的操作仍未完成。

希望这会有所帮助.. :)