AS3 - 沿路径移动剪辑(播放器)

时间:2014-03-07 19:21:50

标签: actionscript-3 flash tween

我会尝试以清晰简短的方式解释我的问题。

我正在写一个网格游戏。在这个游戏中当玩家点击某个地方时,玩家沿着网格移动一条由计算机计算出的路径(因为玩家避开的障碍物:墙壁......)到最后一点。 它是一个等距网格,但它就像是一个基本的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能够很好地独立工作

  • 寻找其他解决方案

我很高兴听到您的想法和代码!

提前致谢

1 个答案:

答案 0 :(得分:0)

实际上我可以提供多种解决方案,但它们将包含许多代码行。简而言之:

  1. 航点系统。你有算法为你的角色设置航点的集合,并渲染他(从主游戏循环更新),角色通过从集合中移动来到达一个接一个的航点。
  2. 使用补间,附加它们(因此会有队列)。
  3. 在这两个选项中,您可以为角色设置新路径,您只需要简单的逻辑来将角色的当前位置逼近最近的网格点,并从那里计算新路径,使用基本网格系统非常容易,喜欢:

    closestGridCellX = Math.round(this.x / gridCellSize);
    closestGridCellY = Math.round(this.y / gridCellSize);