gpt4 book ai didi

java - Libgdx 渲染矩形阵列不同的纹理

转载 作者:行者123 更新时间:2023-11-29 20:46:43 26 4
gpt4 key购买 nike

我正在使用 libgdx 开发游戏,但遇到了困难。所以我的 SpriteBatch 为数组中具有相同纹理的所有矩形绘制,但我希望每个矩形都有自己的纹理。我的代码看起来像这样

    public class GameScreen implements Screen{

final MrJetpack game;

OrthographicCamera camera;
SpriteBatch batch;
ShapeRenderer rend;
private Array<Rectangle> raindrops;

Texture enemy1,enemy2,enemy3,enemy4,endScreen;
TextureRegion[] enemys = new TextureRegion[4];

private int random;


public GameScreen(final MrJetpack game){

this.game = game;

camera = new OrthographicCamera();
camera.setToOrtho(false, 800, 480);

enemy1 = new Texture(Gdx.files.internal("boxk.png"));
enemy2 = new Texture(Gdx.files.internal("boxg.png"));
enemy3 = new Texture(Gdx.files.internal("kugel.png"));
enemy4 = new Texture(Gdx.files.internal("kugelk.png"));

enemys[0] = new TextureRegion(enemy1);
enemys[1] = new TextureRegion(enemy2);
enemys[2] = new TextureRegion(enemy3);
enemys[3] = new TextureRegion(enemy4);

raindrops = new Array<Rectangle>();

rend = new ShapeRenderer();
batch = new SpriteBatch();

}


@Override
public void render(float delta) {
// TODO Auto-generated method stub
//Gdx.gl.glClearColor(0, (float)148/255,(float) 255/255, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();




batch.setProjectionMatrix(camera.combined);
rend.begin(ShapeType.Filled);
rend.rect(0, 0, 800, 10);
rend.rect(0, 160, 800, 10);
rend.rect(0, 320, 800, 10);
rend.setColor(Color.ORANGE);
rend.end();

batch.begin();
for(Rectangle raindrop: raindrops) {
batch.draw(enemys[random], raindrop.x - 10, raindrop.y);
}
batch.end();


if(TimeUtils.nanoTime() - lastDropTime > spawnTime){
spawnRaindrop();
}
Iterator<Rectangle> iter = raindrops.iterator();
while(iter.hasNext()) {
Rectangle raindrop = iter.next();
raindrop.x -= 20 * Gdx.graphics.getDeltaTime();

if(raindrop.x < 0) {
spawnRaindrop();
iter.remove();
}
}


}


private void spawnRaindrop() {
Rectangle raindrop = new Rectangle();
raindrop.x = 800;
stages = MathUtils.random(1, 3);
random = MathUtils.random(0, 3);
raindrop.width = 30;
raindrop.height = 53;
raindrops.add(raindrop);
lastDropTime = TimeUtils.nanoTime();
}

所以实际发生的情况是,每次在屏幕上生成一个新的 Rectangle 时,其他已经显示的 Rectangle 都会更改 Texture,因此每个 Rectangle 都具有相同的 Texture 。有什么解决方案或例子吗?

编辑:http://imgur.com/46ywYyy对于理解我的问题错误的人来说,这是我的问题:)就像你可以看到所有其他矩形的纹理都在变化,但我希望每个人都有自己的静态纹理

最佳答案

他们告诉你,一种方法可以做到,但我看你不清楚,我会按照你的想法增加或减少。

我会尝试使表单更类似于您的代码中已有的表单。

注意这段代码可能有语法错误等,因为我是从编辑器 StackOverflow 做的。

1- 创建一个派生自 sprite 的类,例如:

public class SpriteRaindrop extends Sprite{

Rectangle raindrop = new Rectangle();

public SpriteRaindrop(Texture t, int srcWidth,
int srcHeigth,
float posX,
float posY){

super(t, srcWidth, srcHeigth);

raindrop.x = posX;
raindrop.y = posY;
raindrop.width = srcWidth;
raindrop.height = srcHeigth;

setPosition(posX, posY);
}

public void updateR(){
raindrod.x = getX();
raindrod.y = getY();
}
}

这是你的代码,有任何更改

public class GameScreen implements Screen{

final MrJetpack game;

OrthographicCamera camera;
SpriteBatch batch;
ShapeRenderer rend;
private Array<SpriteRaindrop> raindrops;

Texture enemy1,enemy2,enemy3,enemy4,endScreen;
TextureRegion[] enemys = new TextureRegion[4];

private int random;


public GameScreen(final MrJetpack game){

this.game = game;

camera = new OrthographicCamera();
camera.setToOrtho(false, 800, 480);

enemy1 = new Texture(Gdx.files.internal("boxk.png"));
enemy2 = new Texture(Gdx.files.internal("boxg.png"));
enemy3 = new Texture(Gdx.files.internal("kugel.png"));
enemy4 = new Texture(Gdx.files.internal("kugelk.png"));

enemys[0] = new TextureRegion(enemy1);
enemys[1] = new TextureRegion(enemy2);
enemys[2] = new TextureRegion(enemy3);
enemys[3] = new TextureRegion(enemy4);

raindrops = new Array<SpriteRaindrop>();

rend = new ShapeRenderer();
batch = new SpriteBatch();

}


@Override
public void render(float delta) {
// TODO Auto-generated method stub
//Gdx.gl.glClearColor(0, (float)148/255,(float) 255/255, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();




batch.setProjectionMatrix(camera.combined);
rend.begin(ShapeType.Filled);
rend.rect(0, 0, 800, 10);
rend.rect(0, 160, 800, 10);
rend.rect(0, 320, 800, 10);
rend.setColor(Color.ORANGE);
rend.end();

batch.begin();

for(SpriteRaindrop raindrop: raindrops) {
//raindrop.translatex(-10f);
//what is raindrop.y value
raindrop.updateR();
raindrop.draw(batch);
}

batch.end();


if(TimeUtils.nanoTime() - lastDropTime > spawnTime){
spawnRaindrop();
}

Iterator<SpriteRaindrop> iter = raindrops.iterator();

while(iter.hasNext()) {

SpriteRaindrop raindrop = iter.next();

raindrop.translateX(-20f * Gdx.graphics.getDeltaTime());

if(raindrop.getX() < 0) {
spawnRaindrop();
iter.remove();
}
}


}


private void spawnRaindrop() {

stages = MathUtils.random(1, 3);
random = MathUtils.random(0, 3);

lastDropTime = TimeUtils.nanoTime();

SpriteRaindrop raindrop = new SpriteRaindrop(enemys[random],
30, 53,
800, 0);
raindrops.add(raindrop);
}

这只是一个想法,但我觉得可行,希望对你有所帮助

关于java - Libgdx 渲染矩形阵列不同的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30198058/

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