【问题标题】:Painting multiple objects at different times in the most efficient manner以最有效的方式在不同时间绘制多个对象
【发布时间】:2023-03-20 11:41:02
【问题描述】:

所以我有一个任务,我必须创建一个“游戏”类型的应用程序,其中有多个移动对象(肯定超过 10 个),有些是由用户 KeyEvents 触发的。 我似乎理解这个概念,但我有一个问题。如何绘制所有对象(向上和向下动画)并包含 KeyEvent,以便它们同时执行,而不是按线性顺序进行。我为此查找了多线程,但我非常怀疑这是否是一个好主意,因为我觉得这可以只用 1 个线程来完成。

任何反馈或想法将不胜感激。谢谢! :)

我的意思的一个例子是:

public void onPaint(Graphics g){
g.draw(apple);
g.draw(character);
moveCharacter(g);
moveApple(g);
}

所以在这里,我必须先移动角色,然后是苹果,我怎样才能同时移动它们?多个对象除外。

【问题讨论】:

  • 你说的“立即执行,不要按线性顺序执行”是什么意思?除非您要处理数千个对象,否则也不必担心效率。多线程绝对是矫枉过正,而且图形表面无论如何也不支持并发绘图。
  • @ZongZhengLi 我认为他指的是对象的并发绘制,而不是代码显示的顺序绘制它们。

标签: java animation awt paint


【解决方案1】:

理想情况下,您需要将实际游戏逻辑与渲染分开。在与绘图线程不同的线程上进行计算、移动等。这可能会导致与并发相关的一些微妙的复杂情况,但这仍然是一个好主意。

不清楚您所说的“同时执行两者”是什么意思,但代码应该执行得如此之快,以至于它可能同时执行。您要避免的是在方法中有任何类型的阻塞(例如用户输入)。

【讨论】:

  • 谢谢,我想我明白你的意思了。所以你是说我应该创建两个线程,一个用于 onPaint 方法,另一个用于“幕后”部分?
  • 没错。大多数游戏/实时应用程序就是这样做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多