作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名初学者程序员,我正在尝试使用 LibGDX 为 Android 制作游戏。我不明白为什么所有游戏(在桌面上运行)都会卡住不到半秒,而如果我在手机或模拟器上运行它,卡住时间会超过半秒。这是代码:
@Override
public void show() {
stage = new Stage(physicWidth, physicHeight, true);
gun = new ArrayList<Guns>();
buildingAtlas = new TextureAtlas(Gdx.files.internal("ui/cladiri.pack"));
buildingSkin = new Skin(buildingAtlas);
building1 = new ImageButton(buildingSkin.getDrawable("cladire1"));
building2 = new ImageButton(buildingSkin.getDrawable("cladire2"));
table = new Table();
table.setBounds(0, tileH * 4, tileW * 6, tileH);
table.left();
table.add(building1).width((float) (tileW * 0.8)).height((float) (tileH * 0.7));
table.add(building2).width((float) (tileW * 0.8)).height((float) (tileH * 0.7));
stage.addActor(table);
Gdx.input.setInputProcessor(stage);
building1.addListener(new InputListener(){
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
gun.add(new Guns(selectedTile.x, selectedTile.y));
return true;
}
});
building2.addListener(new InputListener(){
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
System.out.println("Touch on Building 2");
return true;
}
});
}
@Override
public void render(float delta) {
batch.begin();
for(int i = 0; i < gun.size(); i++){
gun.get(i).render(batch, tileW, tileH);
}
batch.end();
}
枪支类是:
public Guns(float x, float y) {
this.y = y;
this.x = x;
gunTexture = new Texture(Gdx.files.internal("img/gunTest1.png"));
TextureRegion[][] tmp = TextureRegion.split(gunTexture, gunTexture.getWidth() /
COLS, gunTexture.getHeight() / ROWS);
gunFrames = new TextureRegion[COLS * ROWS];
int index = 0;
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
cladireFrames[index++] = tmp[i][j];
}
}
gunAnimation = new Animation(0.1f, gunFrames);
stateTime = 0f;
bounds = new Rectangle();
}
public void update(){
stateTime += Gdx.graphics.getDeltaTime();
curGunFrame = gunAnimation.getKeyFrame(stateTime, true);
}
public void render(SpriteBatch batch, float w, float h){
batch.draw(getCurGunFrame(), x, y, w, h);
}
如果触摸执行“System.out.println”的building2按钮,游戏不会卡住,但在添加新枪的building1上,游戏会卡住。
我发布的代码经过简化,仅与我的问题相关。
最佳答案
看起来这些行之一会导致您的问题:
gunTexture = new Texture(Gdx.files.internal("img/gunTest1.png"));
TextureRegion[][] tmp = TextureRegion.split(gunTexture, gunTexture.getWidth() /
COLS, gunTexture.getHeight() / ROWS);
纹理加载通常是一项昂贵的操作,您在加载它后对其进行操作,并且其中一个或两个操作几乎肯定会导致您遇到的延迟。我相信解决这个问题的标准机制是在对象之间共享纹理并在关卡启动时加载纹理,而不是在关卡运行时加载纹理。
您的游戏不应让 Gun 类在创建时创建新纹理,而应将纹理与 x 和 y 变量一起传递给构造函数。
桌面和手机之间出现不同延迟时间的原因很可能是因为您的桌面功能更强大。
关于java - Android 游戏卡住半秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016587/
我是一名优秀的程序员,十分优秀!