如何同步事物

时间:2013-03-16 01:25:56

标签: java

我一直在想这个。我不知道事情会在同一时间发生。

我想知道如何在没有单独线程的情况下在java中进行同步。例如,在真实的视频游戏中,如果没有单独的线程,事情如何同时发生? 一个人如何在游戏中同时移动两个肢体? 我怎么能在java中做到这一点?

2 个答案:

答案 0 :(得分:1)

一般来说,他们没有。视频游戏中的这些类型的更新通常一次性完成,然后在一个帧中一次全部渲染。所以有状态更新步骤,然后是渲染步骤。

在更新步骤中,例如,手臂中的骨骼的位置将根据它们应该如何移动而更新(可能是响应于从键盘或鼠标接收的输入),然后整个场景是新职位再次呈现。

没有线程,事情就不会(技术上)在同一时间发生。通常,程序会等待来自某个东西(用户,或网络,或者只是每100毫秒设置一次的计时器)的输入,而程序的一部分正在等待,另一部分可能会运行

这些情况通常是事件驱动的 - 请查看Observer Pattern以获取有关如何处理该问题的指南。您将拥有等待输入的内容,然后触发相应的响应事件,这些事件由“等待”该事件发生的任意数量的对象“监听”。

这通常会同时出现事物的外观,因为你试图让在这些事件上运行的代码保持较小 - 这么快你就无法分辨出来。

如果你真的想要同时运行的东西,你只需要使用线程(或进入图形卡编程 - 这很有趣:D)

答案 1 :(得分:0)

标准软件架构是游戏循环。它基本上是这样的:

while the game is running
    for each object in the game
        check for interactions with other objects
        update the objects position
    draw the game state to a hidden surface
    copy the hidden surface to the screen