我的Java游戏编程方法是否足够

所以我正在用slick2d和MarteEngine库做一个2d的Java游戏。 这是我为我的Java类制作跳棋的最大项目。 我对编程概念还很陌生,并且使用最佳的方法来完成任务。

我的游戏的基本结构是你是一个僵尸启示的玩家/英雄,你可以收集幸存者来帮助你。 在我的编程中有很多我关心的领域。 我不知道我的方法是不是我想要的一个好select。 这个游戏目前还没有网格/瓷砖系统。

我看了一些开源的Java游戏,他们并没有真正回答我的问题,我的方法。 所以我要在这里列出一些我不确定的事情,希望你们能确认/否认我的方法是否合适。 对不起,如果这个列表太长,我正在考虑input的问题。

  1. 瞄准/攻击 – 幸存者一旦达到枪的目标范围就会自动攻击僵尸。 为了做到这一点,我让每一个幸存者都得到了每个僵尸的距离(使用距离公式),find最接近的一个。 我不断地检查这个,所以如果一个更快的僵尸靠近,幸存者将改变目标。 僵尸,他们获得目标,坚持下去(现在)。 僵尸经常使用距离公式检查它们是否在攻击范围内(大约50像素)。 如果他们在范围之内,就停下来攻击,否则向目标移动。

  2. 2D摄像机 – 所以2D环境中的摄像机可以让世界而不是你。 我目前的方法是让我的僵尸/幸存者/地图上的任何实体存储在数组列表中。 首先调整背景,然后循环所有列表,修改每个实体的x和y值。 这似乎工作正常,但有些东西,你可以真正注意到在背景上滑动。 不太确定如何避免这一点。

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

  4. path查找 – 我还没有path查找系统。 我必须坚持一个网格系统吗? 我真的宁愿我的实体沿着地形自由地移动,而不是在一个怪异的广场上移动。

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

  6. 捡东西 – 和以前说的一样。 我检查从玩家到每个可拾取物品的距离。 如果该物品在玩家的30个像素内,则将其拾取。 我想这一刻似乎工作得很好。 也许真的没有其他办法做到这一点。

  7. animation – 我了解如何使用精灵进行animation制作,但我只是想确认一下。 所以,如果我有7个不同的枪支被枪杀,我需要手动进行精确计时的每个精灵的function。 说如果我有一支猎枪,它需要一个后坐力,泵向前,短暂的暂停,泵回来,并准备好了。 对于手枪,我真的只需要反冲。 所以我必须为每个animation制作独特的function?

对不起,键入这个长长的问题列表。 我试图尽可能地收集这些东西的信息,而且我还没有find很多这方面的例子。 我非常感谢任何答案,甚至只是一个是或否的答案。 提前致谢!

  • 瞄准/攻击 – 这很好。 这里有优化,但不要担心。

  • 二维相机 – 不,这不是你做相机的方式。 我相信你的引擎必须有内置的摄像头类。如果没有,Slick2D可以select翻译。 所以在绘制场景之前,用2D相机偏移量来翻译场景。 然后绘制你的实体的绝对位置。 不要修改你的实体位置!

  • 界面 – 这工作正常,但很难维护。 您可以检出一些使用Slick2D的GUI库。 他们中的许多人使用XML文件来定义你的用户界面的布局,很容易修改。 但只有切换方法,如果这是你的问题。

  • path寻找 – 你似乎混淆path寻找与议案。 他们不是一回事。 你find的path,可能是“平方”,那么你有你的实体沿着path。 如果你想要自由的运动,你可以实现转向并让它们在你find的path的节点之间转向 。 查看A * ,因为这是一个stream行的path查找algorithm。

  • select – 这可能是最好的(和您的其他GUI命令)的事件系统 。 但基本上,你可以做你现在正在做的事情,轮询鼠标,找出它下面的东西。 你可以不断地这样做,或者只是当鼠标点击发生。 无论哪种方式,您只想在点击鼠标时改变select。 如果鼠标下没有任何东西,请取消select所有的幸存者。

  • 捡东西 – 还有其他方法可以做到这一点,但这足够第一遍。

  • animation – 不,你做一个function,有火速,重装率等input。这一个function计算所需的时间来开枪。 不要做多个“独特的”function。

我可以告诉你,这个答案很可能会跟上更多的问题。 这个问题已经是边界线的讨论了,所以不要跟进更多的问题。 继续做研究。 这听起来像你是新的,看看开源项目将远远less于阅读这样的网站上的问题和答案。 所以在这里做更多的研究。 使用右边的“相关”链接来浏览相关的问题,只是泡一些信息。 你有很多东西要学习,所以慢慢来。 当你有更多的问题,真的想想你面临的问题,先试着自己解决,如果你没有解决这个问题,一次在这里发表一个问题。 祝你好运!

  1. 瞄准/攻击 – 可以用于原型,但稍后可能会有一个优化的空间,因为当你有很多单位时,如果你检查每个人和每个人,性能可能会下降。 这可能或可能不是一个问题。 你将需要检查,看看:)
  2. * 2D相机* – 不要修改实体的位置coords ..修改您的相机位置,并绘制视图时,计算实体空间来屏幕空间coords,不要绘制,如果他们是在你的视口之外。
  3. animation – 创建一个对象,保存有关当前animation帧,开始帧和结束帧的信息,以及以毫秒为单位给定帧速率从a到b(例如30到40)的帧。