所以我有这个游戏,我正在使用LibGDX。我有一个GroundTop和Ground类,它在屏幕上绘制地面和地面顶部(在Assets类中加载图像),并最终应用与玩家的碰撞(这是一个平台游戏)。我正在尝试做的是绘制4个不同的Ground实例和2个不同的GroundTop实例进行测试。但是,每个只有一个。看起来每个实例都会覆盖另一个实例,因为显示的唯一实例具有代码中创建的最后一个实例的坐标。为什么这样,我怎样才能显示每个实例?是否存在使每个实例在类中覆盖另一个实例的东西?我完全迷失了。在此先感谢,请提出任何问题,以帮助澄清我的问题并帮助我找到解决方案:)
这是我的代码:
Game.java
package com.mygdx.thetimetraveller;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.Array;
public class Game implements Screen {
public static int frameCount;
Array<Ground> groundList = new Array<Ground>();
Ground[] grounds = new Ground[1000];
GroundTop groundTop;
GroundTop groundTop2;
Game() {
load();
}
@Override
public void load() {
groundList.add(new Ground(50, 50));
groundList.add(new Ground(250, 250));
grounds[0] = new Ground(500, 500);
grounds[1] = new Ground(650, 650);
groundTop = new GroundTop(500, 20);
groundTop2 = new GroundTop(500, 200);
frameCount = 0;
}
@Override
public void display(SpriteBatch batch) {
frameCount ++;
groundList.get(0).Draw(batch);
groundList.get(1).Draw(batch);
grounds[0].Draw(batch);
grounds[1].Draw(batch);
groundTop.Draw(batch);
groundTop2.Draw(batch);
}
}
Ground.java
package com.mygdx.thetimetraveller;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class Ground {
private static double x;
private static double y;
Ground(double x, double y) {
this.x = x;
this.y = y;
}
public void Draw(SpriteBatch batch) {
batch.draw(Assets.simpleBlockTexture01_sprite, (float) x, (float) y);
}
}
GroundTop.java
package com.mygdx.thetimetraveller;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class GroundTop {
private static double x;
private static double y;
GroundTop(double x, double y) {
this.x = x;
this.y = y;
}
public void Draw(SpriteBatch batch) {
batch.draw(Assets.simpleBlockTextureTop01_sprite, (float) x, (float) y);
}
}
答案 0 :(得分:2)
private static double x;
private static double y;
这是你的问题。 static
个字段对于给定类的所有实例都是通用的。因此,您的所有Ground
对象共享 x
和y
变量。解决方案:只需从static
和Ground
类中的字段中删除GroundTop
修饰符
答案 1 :(得分:1)
我想说这与Java和libGDX本身有关。
有时在Java中,您希望拥有所有对象共有的变量。这是通过静态修饰符完成的。在声明中具有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。
要详细了解请查看此link。