0

所以我正在使用 slick2d 和 MarteEngine 库制作 2d Java 游戏。这是自从我为我的 Java 类制作检查器以来最大的项目。我对编程概念和使用最佳方式完成工作仍然很陌生。

我的游戏的基本结构是你是僵尸启示录中的玩家/英雄,你可以聚集幸存者来帮助你。在我的编程中有很多我关心的领域。我不确定我的方法是否适合我想要的。该游戏目前也没有网格/瓷砖系统。

我看过一些开源 Java 游戏,但它们并没有真正回答我对我的方法提出的问题。因此,我将在这里列出我不确定的内容,希望你们能够确认/否认我的方法是否合适。抱歉,如果此列表太长,我在输入时正在考虑问题。

  1. 瞄准/攻击——幸存者一旦进入枪的目标范围内就会自动攻击僵尸。为此,我让每个幸存者获取到每个僵尸的距离(使用距离公式)并找到最近的一个来攻击。我不断检查这一点,所以如果更快的僵尸靠近,幸存者会改变目标。对于僵尸来说,他们会获得一个目标并坚持下去(目前)。僵尸使用距离公式不断检查它们是否在攻击范围内(大约 50 像素)。如果他们在范围内,停止并攻击,否则,向目标移动。

  2. 2D 相机- 因此 2D 环境中的相机代替您移动世界。我目前的方法是将地图上的僵尸/幸存者/任何实体存储在数组列表中。首先调整背景,然后循环遍历所有列表并修改每个实体的 x 和 y 值。这似乎工作正常,但有些东西你可以真正注意到在背景上滑动。不太清楚如何避免这种情况。

  3. 用户界面- 我真的不知道如何使用 UI。到目前为止,我所做的只是使用背景,然后生成按钮对象并手动排列它们。然后,我检查鼠标是否在按钮的任何区域上,以及鼠标悬停在按钮上时是否有点击。我有三个不同的背景和按钮,我用布尔值切换出来。不过,我将使用带有背景和按钮的对象重新编码该区域。这是做 UI 的正确方法吗?

  4. 寻路- 我还没有寻路系统。我必须坚持网格系统吗?我真的更喜欢我的实体沿着地形自由移动,而不是奇怪的方形运动。

  5. 选择- 我有它,所以你可以选择幸存者,升级他们,以及其他随机的东西。我目前的选择方法是不断检查鼠标 X 和 Y 的位置。我得到了从鼠标到每个幸存者的距离,并检查它是否在 30 像素以内。然后,我检查是否有点击,如果有,选择幸存者并取消选择所有其他人。如果我单击开放空间,我仍在试图弄清楚如何取消选择所有幸存者。有没有更好的方法来做到这一点?

  6. 捡东西- 和之前说的一样。我检查从玩家到每个可以拾取的物品的距离。如果物品在玩家的 30 像素范围内,它会捡起它。我想目前它似乎工作正常。也许真的没有其他方法可以做到这一点。

  7. 动画- 我了解如何使用精灵制作动画,但我只是想确定一下。因此,如果我要射击 7 支不同的枪,我是否需要手动制作每个精灵都有精确计时的功能。假设我有一把霰弹枪,它需要后坐力,向前抽气,短暂暂停,向后抽气,然后再次准备好。对于手枪,我真的只需要后坐力。所以我必须为每个动画制作独特的功能?

很抱歉输入这个长长的问题列表。我尝试尽可能多地收集有关这些东西的信息,但我找不到很多关于这些东西的例子。我非常感谢任何答案,即使只是一个是或否的答案。提前致谢!

4

1 回答 1

1

二维相机:

当你说你修改每个实体的位置时,不确定你在做什么,但我这样做的方式是有一个 Camera 对象,它有自己的 x、y、宽度、高度和移动相机的方法,并且然后在您的绘图周期中:

for (every Object on the map)
{
    if (Object is within Camera bounds)
    {
        // Draw the Object at the Object-xy minus the Camera-xy
        // This will draw the Object at its position relative to the camera
        // and won't waste time drawing things that are not within camera bounds
    }
}

瞄准/攻击

你的想法是对的,但是检查每个僵尸和每个幸存者将需要大量计算,并且(取决于僵尸和幸存者的数量)可能会导致游戏速度大大降低。碰撞检测也是一样,检查每个对象与其他对象是否发生碰撞需要很多时间。有一些方法可以不必检查所有内容,我建议您阅读“空间分区”。我没有使用过 slick2d,但也许它已经为你实现了这样的东西。

收拾东西

与瞄准/攻击相同的处理,如果有太多物品或可以拾取物品的物品,最终会大大降低帧率。

选择

这不是你应该选择的方式,但我自己根本不需要使用选择,所以我不完全确定最好的方式,你可能应该尝试四处寻找方法来做到这一点。无论哪种方式,您当前的方式都可以通过仅检查点击来改进,您不需要检查每一帧,只检查何时点击。

目前我能帮到的就这些了,希望至少对你有用。

于 2012-07-12T06:45:17.327 回答