【问题标题】:Swing components and timers in game beginning在游戏开始时摆动组件和计时器
【发布时间】:2014-02-23 15:53:44
【问题描述】:

我是游戏编程的新手,我对它与 java 中的 swing 之间的关系有一些疑问。 我之前使用 swing 制作了一些用户界面,但是在阅读有关使用它制作游戏的信息时,需要考虑很多新点。

我知道 swing 和 awt 不应该放在一起,但在许多教程和网站中,它使用带有 jframe 的画布,我想使用 jpanel 并覆盖paint方法可能会更好?

如果我打算在菜单中添加不同的面板,或者(游戏的)左右可以通过不同面板的单独绘画来完成,向它们添加摆动元素(例如 jlabels 或 jbuttons)或者我必须制作方法来绘制和检查事件的包含像素吗? 我不确定我在那里是否正确解释了自己,我的意思是,例如,如果保留边框布局的中心点以在面板中显示内容,然后在东点添加一个完全不同的面板以用按钮填充它,或者必须是那些绘制在第一个按钮上并构建自己的事件的按钮。

另一件事是,我已经说过变量是用于方法的,并且必须使用 getter 和 setter 来获取它们,但到目前为止,我认为所有这些都是静态的,可以从外部捕获它们,这对吗?完成了吗?

还知道它应该在 run 方法中有一个永久循环,我理解这一点,但我看到了关于使用计时器触发事件​​的不同想法。不是很懂,是不是要用计数器?或者使用java已经提供的定时器之一?哪个计时器将用于此类任务?秋千或实用的:/

【问题讨论】:

  • i guess that would maybe be better the use of a jpanel and override the paint method? - 你应该覆盖paintComponent()而不是paint()。
  • 糟糕,是的。指的是那个,但是解释错了^^'谢谢你的更正:)

标签: java swing


【解决方案1】:

“我想使用 jpanel 并覆盖paint方法可能会更好?”

是的。抛弃CanvasJPanel

“如果我打算在菜单中添加不同的面板,或者(游戏)可以通过单独绘制不同面板来完成”

使用CardLayoutJPanel 之间切换。查看How to use CardLayout 并查看CardLayout 示例here

“另一件事是,我已经说过变量是用于方法的,并且必须使用 getter 和 setter 来获取它们,但到目前为止,我认为所有这些都是静态的,可以从外部捕获它们,对吗?完成了吗?”

不要过度使用static 不必要地进行类之间的通信。利用getter和setter(研究封装);利用引用传递;利用接口;如需更高级的功能,请查看 MVC 设计模式和观察者模式。

“也知道它应该在 run 方法中有一个永久循环,我理解这一点,但我看到了关于使用计时器触发事件​​的不同想法。”

javax.swing.Timers 是要走的路(不是 java.util.Timer)。见How to use Swing Timers。也可以看到一个例子herehereherehere

【讨论】:

  • 感谢您的回答,它为我的想法提供了一些启示,现在是时候深入挖掘了^^
【解决方案2】:

您可以查看我用 Java 实现的 Snake Game。它将告诉您如何从头开始制作游戏。该代码不是我能想到的最好看的,但它仍然是可以理解的。我很久以前写的,最近才发布到 GitHub。

我还计划推动我的游戏框架,这将减少大量样板代码,但在我将其发布到 Github 之前,我必须对其进行重构。

不过,贪吃蛇游戏可能是一个好的开始,您可以从那里使用各种想法。

还可以查看Processing Language,它基于 Java,可让您轻松创建简单的游戏。

还有一个流行的 Java 游戏库,名为 LibGDX,您可以尝试一下。它已经为程序员处理了大量样板代码,但学习曲线很简单。

【讨论】:

  • 谢谢你的代码,发现了很多有趣的东西,不得不搜索同步标志,不知道会这么用^^
  • 很高兴您发现它很有用。很快我会将我的游戏框架放在那里,并通知您,以便您也可以使用它并从中学习。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 2015-07-22
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
相关资源
最近更新 更多