如何检测CCSprite何时达到某一点?

时间:2011-08-26 08:13:14

标签: vector cocos2d-iphone distance

我正在使用适用于iOS的Cocos2d库编写游戏。到目前为止,我在屏幕上有一个我想要拖动的精灵。基本上我有一个名为End的CGPoint。当我在屏幕上拖动时,它会移动。我希望每个帧都有精灵图形,无论End是否移动,以及它是否已开始以给定的速度向它移动,并且在它的顶部停止。结束就像一个锚。我通过绘制这样的矢量完成了前两个步骤:

-(void) update:(ccTime)deltaTime
{
    CGPoint Pos = _player.position;
    velocity = 15;

    diff.x = End.x - _player.position.x;
    diff.y = End.y - _player.position.y;
    length = ccpLength(diff);

    norm.x = diff.x / length * velocity;
    norm.y = diff.y / length * velocity;

    Pos.x += norm.x;
    Pos.y += norm.y;
}

我像这样移动终点:

- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event 
{
CGPoint touchLocation = [self convertTouchToNodeSpace:touch];

CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
oldTouchLocation = [[CCDirector sharedDirector sharedDirector] convertToGL:oldTouchLocation];
oldTouchLocation = [self convertToNodespace:oldTouchLocation];

CGPoint diff = ccpSub(touchLocation, oldTouchLocation);

End = ccpAdd(End, diff);
}

检测_player何时到达目的地的最佳方法是什么?我已经尝试了很多方法,但我真的不能让它足够精确。我尝试添加一个计时器,每次移动的持续时间,所以我可以测试 velocity * duration> = length 。那是这样做的吗?它没有太好用。任何硕士程序员都想给我一些提示吗?

1 个答案:

答案 0 :(得分:1)

在更新方法结束时,检查距离。如果距离低于速度,那么你已经完成了,将位置设置到终点并触发你想要的任何方法。在cocos2d中,您可以使用方法ccpDistance