当然我不是第一个开发这种游戏的人。但我希望在未来几年内成为专业的游戏开发者。我想实现一个射击游戏。这不是我的第一个。我在1998年开发了Turbo Pascal 6.0中的一个。但是没有使用OOP。这个游戏将是我在Java中的第二次拍摄,但第一次使用LWJGL。它将在2D中实现。
我想保持简单。但是我想要实现一些功能。我计划制作10个级别。玩家有一个可以向四个方向移动的宇宙飞船(向上,向下,向左)。这艘船有一个双激光器,只能向上射击。船只只能移动,我不计划任何轮换。
一个级别有几个同类的敌人。敌人也是宇宙飞船。最简单的船只向下移动。它还发射单发或双发激光子弹。激光有一分钟。最多频率。我想定义一个数学函数,它定义了频率(在最小值和最大值之间)的可能性。
船速在敌人(和等级)内是恒定的。在后来的等级中,敌人获得双倍或2.5倍的速度。后来的敌人拥有寻找玩家船只的激光器。我计划在后期有一个敌人拥有激光子弹。
每个级别都没有其他障碍。每个级别都有一些星星作为背景。首先,我想实现一个静态背景,后来我计划制作3种以不同速度移动的恒星。
该玩家的激光会造成单次或双次伤害,具体取决于是否有一颗或两颗子弹击中。敌人有一些生命值直到他们死亡。玩家船也有一些死点直到死亡。
我想要有两种爆炸(由一些颜色从黄色到红色的隐藏的椭圆形组成)。激光击中小爆炸。还有一场巨大的爆炸,造成破坏。
我的朋友告诉我,有一个函数每秒被调用60次渲染图形对象。所以我认为在这个函数中我绘制了所有对象而不做任何其他事情。但当然船舶和激光的坐标会发生变化。
所以我想如果我应该使用线程。
如果我使用线程,我会将每个同时出现在一个线程中的船只分配给每个激光器,然后为动态背景制作线程。在另一个线程中,我会等待键盘输入。
当然,在使用线程之间需要权衡。
使用线程利用逼真的并行性,可能需要拥有流畅的游戏。但是避免线程会导致更简单的编程,而不是关于并发访问数据。所以我问你所有经验丰富的游戏开发者。你会使用线程吗?如果你愿意使用它们,我的概念是好还是不好。为什么?我也对其他实用提示感到高兴。
谢谢!
答案 0 :(得分:2)
任何游戏都可以使用单线程和事件侦听器进行。这将使用更新循环来每帧更新每个对象。最简单的说法是,虽然swing timers是一种更先进的技术,但它可以是一个Thread.sleep
的循环
int framesPerSecond=60;
double frameTime=1000.0/framesPerSecond;
while(running){
for(Updatable updatable:updatables){
//should actually measure the frame time since it would actually be
//exactly this. System.nanoTime() can be used for this
updatable.update(frameTime);
//depending on your graphics library each updatable object may be given
//the opportunity to render itself here
}
renderFrame(); //render frame as appropriate for your graphics library
Thread.sleep(frameTime);
}
你必须要做的一件事就是许多随心所欲的线程,每个线程都在做自己没有协调的事情。这几乎是不可能没有错误编写的(无论如何都是非常低效的。)
在更新循环中,通常可以将更新分解为不会相互影响的独立部分。在这种情况下,您可以将每个部分赋予一个线程(thread pools非常适合使此过程更简单)。另一个很好用于线程的东西正在准备很快就会需要的东西,但现在却不是;比如生成下一个级别。
但是,多线程规则没有比核心更多的线程。每个线程都有非常重要的开销,但是一旦你有比线程更多的线程,你通常就不会提高你的执行速度。因此,例如,决斗核心上的程序应该最多有4个线程执行重要工作。四核应该最多8个等。