gpt4 book ai didi

java - LibGdx 如何创建多个项目符号?

转载 作者:行者123 更新时间:2023-12-01 10:15:34 24 4
gpt4 key购买 nike

我想在触摸jetActor时显示并发射一颗子弹,它可以是无限的子弹。我认为可以用数组来完成,但我尝试的越多,我理解的就越少。而且当 Actor 被触摸时乘以次,子弹跑得更快。

这是代码,它现在所做的就是显示喷气机和子弹,当触摸喷气机时,它会“发射”子弹。

public class MyGdxGame implements ApplicationListener{

private Texture bulletTexture;
private Texture jetTexture;
private Stage stage;
private BulletActor[] bulletActor;
private JetActor jetActor;

float bulletX = 650, bulletY = 200;
float jetX = 700,jetY = 150;
boolean started;

public class JetActor extends Actor{

public JetActor() {
setBounds(jetX,jetY,jetTexture.getWidth(),jetTexture.getHeight());
this.addListener(new InputListener(){
public boolean touchDown(InputEvent event, float x, float y, int pointer, int buttons){
started = true;
bulletActor[2] = new BulletActor();
System.out.println("Touched");
return true;
}
});

}

@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(jetTexture, jetX, jetY, jetTexture.getWidth(), jetTexture.getHeight());
}
}

public class BulletActor extends Actor{
@Override
public void act(float delta) {
if(started){
bulletX -=3;
}
}

@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(bulletTexture,bulletX,bulletY,bulletTexture.getWidth(), bulletTexture.getHeight());
}
}

@Override
public void create() {
bulletTexture = new Texture("C:\\Users\\User\\Documents\\LibGdxMainProjects\\SampleGame1\\android\\assets\\bullet.png");
jetTexture = new Texture("C:\\Users\\User\\Documents\\LibGdxMainProjects\\SampleGame1\\android\\assets\\jet.png");
stage = new Stage();

jetActor = new JetActor();
bulletActor = new BulletActor[10];
stage.addActor(jetActor);

Gdx.input.setInputProcessor(stage);

bulletActor[1] = new BulletActor();
stage.addActor(bulletActor[1]);

}


@Override
public void dispose() {
}

@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
}

@Override
public void resize ( int width, int height){
}

@Override
public void pause () {
}

@Override
public void resume () {

}

}

最佳答案

这将添加无限的子弹。问题是从 0 到无限需要很长时间。所以最好不要有无限的子弹......

List<BulletActor> bulletList = new ArrayList<BulletActor>();
for (int i = 0; i < unlimited; i++)
{
bulletList.add(new bullet();
}

当您想要绘制这些项目符号时,只需循环列表并更新每个项目符号即可。

for (Bullet bullet : bulletList)
{
bullet.act();
bullet.draw();
}

但是由于这些子弹是 Actor ,您不妨将它们添加到舞台中,这样舞台就会为您处理 act()draw()

//If you want to store them you still need a list or other datastructure to hold them.
List<BulletActor> bulletList = new ArrayList<BulletActor>();
for (int i = 0; i < unlimited; i++)
{
bulletList.add(new bullet();
stage.addActor(new BulletActor); // <-- Just adding them to the stage takes care of the act and draw methods.
}

但是您的代码还有更多错误。在继续之前,您最好先学习一些基本的 Java。

bulletActor = new BulletActor[10];

不会为您制造 10 颗子弹。它会创建一个可以为您容纳 10 颗子弹的数组。当您声明一个字段时,您可以看到它是一个盒子,其大小与您为其创建的对象的大小完全相同。

BulletActor myBullet // <-- Empty box (Null) where 1 BulletActor can be stored.

new BulletActor() // <-- A Bullet actor object

BulletActor myBullet = new BulletActor() // <-- Box with a BulletActor in it

BulletActor[] bulletArray = new BulletActor[10] // <-- 10 empty boxes

//Now store bullets in these boxes
for (int i = 0; i < bulletArray.length; i++)
{
bulletArray[i] = new BulletActor();
}

这只是您应该了解的基础知识的一小部分。目前,您已经咬得太多了,所以请帮自己一个忙,学习有关面向对象编程的所有基础知识。

关于java - LibGdx 如何创建多个项目符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35918283/

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