我正在为你们可能关心的任何人使用LibGDX,但是我正在尝试创建一个基本的太空射击游戏,其中玩家使用WASD键飞行,面向鼠标位置(我是已经完成了这个,耶; D)无论如何,我的问题是我无法弄清楚如何渲染子弹。
这是我的子弹课
public class Bullet extends Entity
{ 私有Vector2 startPosition,targetPosition,position;
private float rotation;
private Sprite sprite;
private SpriteBatch batch;
public Bullet(Texture texture, Vector2 startPosition, float rotation, Vector2 targetPosition)
{
this.startPosition = startPosition;
this.targetPosition = targetPosition;
this.position = startPosition;
this.rotation = rotation;
this.sprite = new Sprite(texture);
this.batch = new SpriteBatch();
}
public void update()
{
}
}
我试图实现Runnable并以这种方式执行,但是你不能使用多个线程,因为它找不到OpenGL的实例或其他什么。
这里的目标是让子弹射击当时玩家面对的方向。所以,我会创建一个新的子弹,如下所示
new Bullet(new Texture("bullet.png"), new Vector2(getX(), getY()), getRotation(), new Vector2(mouseX(), mouseY());
我的问题再次出现了。我不知道我在这做什么。
答案 0 :(得分:0)
OpenGL对多线程环境中的工作方式有一些限制。查看http://www.equalizergraphics.com/documentation/parallelOpenGLFAQ.html并选择一种建议的解决方案。
这里的简单解决方案是在一个线程中完成所有事情。
代码中的某处应该有类似
的内容while (!shouldExit) {
Update window stuff.
Read the state of the inputs.
Update the state of the scene. {
for (bullet : bullets) { bullet.move() }
}
Render everything once. {
for (bullet : bullets) { bullet.draw() }
}
}
答案 1 :(得分:0)
您应该将创建的项目符号放入变量或列表中。然后在您的更新代码中,您将其取出并调用update,然后使用精灵批处理进行渲染。 多线程渲染不应该用于小型或中型游戏。试着想并发,而不是平行。