我会尝试以清晰简短的方式解释我的问题。
我正在写一个网格游戏。在这个游戏中当玩家点击某个地方时,玩家沿着网格移动一条由计算机计算出的路径(因为玩家避开的障碍物:墙壁......)到最后一点。 它是一个等距网格,但它就像是一个基本的2D网格。
所以我有我的路径,这是一个点阵列(关键点屏幕坐标):
path : [x=10,y=100],[x=40,y=172], .. etc.
为了显示播放器的移动,我尝试使用补间(TweenLite / TweenMax)。 TweenLite上没有选项可以在开始下一个之前等待补间完成。在任何情况下,解决方案似乎都很复杂(糟糕的延迟/ onFinish:功能)。
我发现的解决方案是可以接受的:TweenLite提供了一个完全符合我希望的LinePath2D功能。唯一的问题是它只能使用一个函数(path是完整的数组):
var pathanimate:LinePath2D = new LinePath2D(path);
pathanimate.addFollower(Player);
TweenMax.to(pathanimate, 1, { progress:1, ease:Linear.easeNone });
所以我不能在运动过程中“触摸”任何东西。包括播放器精灵的一个方面,它必须在路径的每个步骤中随方向变化(如果LinePath使用循环,它会更简单。)
我不知道这是否清楚(我是法国人)但我只看到两个选择:
保持LinePath并在每个帧上有一些“测量”玩家方向的计数器/计时器。可能在资源方面很重,但保持LinePath2D能够很好地独立工作
寻找其他解决方案
我很高兴听到您的想法和代码!
提前致谢
答案 0 :(得分:0)
实际上我可以提供多种解决方案,但它们将包含许多代码行。简而言之:
在这两个选项中,您可以为角色设置新路径,您只需要简单的逻辑来将角色的当前位置逼近最近的网格点,并从那里计算新路径,使用基本网格系统非常容易,喜欢:
closestGridCellX = Math.round(this.x / gridCellSize);
closestGridCellY = Math.round(this.y / gridCellSize);