我正在使用适用于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 。那是这样做的吗?它没有太好用。任何硕士程序员都想给我一些提示吗?
答案 0 :(得分:1)
在更新方法结束时,检查距离。如果距离低于速度,那么你已经完成了,将位置设置到终点并触发你想要的任何方法。在cocos2d中,您可以使用方法ccpDistance
。