Cocos 2D - 在平铺地图上移动精灵

时间:2012-12-19 20:46:24

标签: ios animation cocos2d-iphone sprite

我正试图以平滑的方式在CCTMXMap周围移动一个精灵。我已经弄清楚(使用CCActions)如何从瓦片移动到瓦片,但是我在动画中得到了空白(它在重新评估行走方向时暂停一帧)。我已经尝试在预定的更新中移动角色:方法,但是当你尝试将精灵限制为仅从瓦片移动到瓦片时,这会变得混乱。关于如何使用更新来获得干净,一致的动画而没有混乱的手动动画的任何建议?

1 个答案:

答案 0 :(得分:1)

是的,不要使用行动。使用CCActions时,您将始终遇到1帧延迟问题。

在更新中移动精灵非常简单。特别是如果你将移动限制在一个速度(每帧点数),可以被瓷砖大小明显整除。例如,如果您的瓷砖是40x30,那么水平速度1,2,4,8,10可以正常工作。垂直1,2,3,5,6,10可以工作。

按此数字更新位置,将其转​​换为int,将其与目标位置进行比较:

if ((int)currentPos.x == (int)targetPos.x && (int)currentPos.y == (int)targetPos.y)
{
    NSLog(@"I'm there!");
}

转换为int的原因是为了避免浮点值中的舍入错误。

另一个解决方案是 - 特别是如果你的角色一次只能向一个方向移动 - 想出他将要到达那里的帧数。如果角色必须向右移动40个点,并且每帧移动4个点,则需要10帧。然后只计算帧数(更新方法运行的次数),如果它达到10(或者如果你倒计时则为0),那么你知道角色已经到达而无需检查他的位置。