更新和渲染子弹

时间:2013-12-11 08:00:35

标签: java opengl libgdx lwjgl

我正在为你们可能关心的任何人使用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());

我的问题再次出现了。我不知道我在这做什么。

2 个答案:

答案 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,然后使用精灵批处理进行渲染。 多线程渲染不应该用于小型或中型游戏。试着想并发,而不是平行。