我使用的是libgdx 1.2.0+eclipse。我想在游戏画面中从一个类中绘制多个精灵,但只绘制了一个精灵。这是我的渲染方法
@Override
public void render(float delta) {
Gdx.gl.glClearColor(100/255f, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
if(Gdx.input.justTouched()){
touchX = Gdx.input.getX();
touchY = Gdx.input.getY();
//for(int i=0; i < enemy.length; i++)
//System.out.println(enemy[i].x + " " + enemy[i].y);
}
for(int i=0; i< enemy.length; i++){
enemy[i].update(delta);
if(enemy[i].getSprite().getBoundingRectangle().contains(touchX/ppX, touchY/ppY))
enemy[i].reset();
if(enemy[i].gameOver){
gameOver = true;
//System.out.println("Over");
}
}
game.batch.begin();
//if(!gameOver){
for(int i=0; i < enemy.length; i++)
enemy[i].getSprite().draw(game.batch);
//}
game.batch.end();
}
enemy[0].getSprite().draw(game.batch);
enemy[1].getSprite().draw(game.batch);
public class Enemy {
private final float minX=1, minY=2;
private final float maxX=31, maxY=18;
private float x,y;
private float time;
private Sprite sprite;
boolean gameOver;
public Enemy(Sprite sprite){
this.sprite = sprite;
reset();
}
public Sprite getSprite(){
return sprite;
}
public void reset(){
x = minX + (int)(Math.random() * (maxX - minX + 1));
y = minY + (int)(Math.random() * (maxY - minY + 1));
time = 0.0f;
gameOver = false;
sprite.setPosition(x, y);
}
public void update(float delta){
time += delta;
if(time >= 3.0f)
gameOver = true;
}
}
我在每个敌人的实例中从游戏屏幕类加载相同的精灵,但我改变了它的位置。
这就是问题所在,您必须为每个敌人
对象创建一个新的Sprite()
。但是,当你改变一个敌人的精灵位置时,所有敌人的位置都改变了。
如您所见,执行敌人[0].getsprite()
或敌人[1].getsprite()
时,您将到达相同的sprite。您可以通过引用相等性Engream[0].getsprite()==Engreem[1].getsprite()
轻松地检查这一点。
public Enemy(Sprite sprite){
this.sprite = new Sprite(sprite);
reset();
}
代码中另一个奇怪的地方:
public void reset(){
x = minX + (int)(Math.random() * (maxX - minX + 1));
y = minY + (int)(Math.random() * (maxY - minY + 1));
time = 0.0f;
gameOver = false;
sprite.setPosition(x, y);
}
如果执行sprite.setposition(x,y)
,那么修改x
和y
不足以更改sprite的位置。您应该以这种方式改进update(float delta)
方法,以确保sprite的位置得到正确更新。
public void update(float delta){
time += delta;
if(time >= 3.0f)
gameOver = true;
sprite.setPosition(x, y);
}
问题内容: 好的,我有这个代码 并且它将淡蓝色的背景绘制到屏幕上。我正在尝试创建一个渐变,该渐变从顶部的深蓝色到底部的浅蓝色。有没有简单的方法可以做到这一点?我是Libgdx和OpenGL的新手,所以我正尝试从书中学习,但我似乎找不到答案。我听说过要绘制一个大正方形并为顶点设置不同的颜色,但是我不确定该怎么做。 问题答案: 在libGDX中,ShapeRenderer对象包含一个方法,该方法为其位
问题内容: 我非常敢打赌,我做了一些愚蠢的事情,只是似乎没注意到。 该项目是使用提供 gdx-setup-ui.jar 的模板工具生成的。 正如您在代码中所看到的,我没有费心去掉默认代码(只是一些简单的绘制代码来渲染LibGDX徽标)。 因此,对于干净生成的项目,我在这里遵循了本指南 http://code.google.com/p/libgdx- users/wiki/addingText2D
问题内容: 我似乎无法弄清楚如何正确旋转位图字体。我认为您修改了SpriteBatch的转换矩阵。但是,尝试旋转会使文本绕某个点旋转,而且我不知道如何相对于文本本身旋转文本。 问题答案: 您可以尝试以下代码:
parameter.size=30; parameter.characters=“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789.'()>?:”; font=generator.generateFont(参数); gdx.gl20.glclear(GL20.gl_color_buffer_bit); Begin(); f
我的迭代器 我的绘图方法
我在MyGdxGame中的render方法看起来是这样的,调用舞台绘制自己(连同它的演员),然后我尝试绘制一组纹理以供调试之用。 舞台和它的一个演员一起绘制,但其他的纹理没有被绘制。 我试过的:在舞台相机上设置批处理投影矩阵(在调用之后),确保纹理坐标应该是可见的。