我正在编写一个塔防游戏,我的主要组件是一个划分为 40x40 字段(类字段的对象)的网格。当游戏开始时,会为每个生成物(这是一种特殊类型的字段)找到通往最近基地的最佳路线,并将其保存在其字段中int[] path
,该字段表示怪物必须遵循的一系列方向才能到达基地。
我创建了一个线程,该线程有一个循环,它将每个怪物向前移动 1px 并distance
在每次传递中增加它的字段。每次怪物移动时,我也会检查它是否没有踩到场地的中心。我这样做使用:
if ((monster.getDistance() % FIELD_SIZE /*which is 40*/) == 0)
当它返回 0 时,怪物会改变它的方向(读取从其生成字段路径到达的下一个字段的位置)。
这适用于每个敌人每次移动 1px 的情况。但我希望他们以不同的速度移动。我找到了2个解决方案:
- 在不同的线程中移动每个敌人。它的速度越高,Thread.sleep() 的持续时间就越短。
- 以不同的距离将它们循环移动。
我更喜欢 2. 解决方案,但不知道如何实现它。我的问题是大多数怪物永远不会踩到场地的中心,因此永远不会改变方向。如果怪物以 0.33 的速度移动,则覆盖的距离将是:0.33、0.66、0.99 (...) 39.63 (...) 40.13。所以它永远不会达到 40。如果我使用 ceil、round 或 floor,那么它将达到 40,但多次会导致我的应用程序出现异常。所以我的问题是如何实现以浮点值作为距离的移动,并提供它每次都达到 40 的倍数但每次检查一次?