gpt4 book ai didi

java - Android 游戏卡住半秒

转载 作者:行者123 更新时间:2023-12-01 13:09:19 25 4
gpt4 key购买 nike

我是一名初学者程序员,我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com