Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java libgdx创建多个矩形_Java_Android_Libgdx - Fatal编程技术网

使用java libgdx创建多个矩形

使用java libgdx创建多个矩形,java,android,libgdx,Java,Android,Libgdx,您好,我是libgdx和java新手,在屏幕上创建多个对象时遇到问题。当我单击“空间”时,我希望在屏幕上有一个来自类Pocisk的新对象矩形,但当我单击它时,它就会下降 游戏课 public class Gra extends ApplicationAdapter { SpriteBatch batch; private Texture Statektekstura, Pocisktekstura; private Statek statek; private P

您好,我是libgdx和java新手,在屏幕上创建多个对象时遇到问题。当我单击“空间”时,我希望在屏幕上有一个来自类Pocisk的新对象矩形,但当我单击它时,它就会下降

游戏课

public class Gra extends ApplicationAdapter {
    SpriteBatch batch;
    private Texture Statektekstura, Pocisktekstura;
    private Statek statek;
    private Pocisk pocisk;

    @Override
    public void create() {
        zaladujdane();
        init();
    }

    private void init() {
        batch = new SpriteBatch();
        statek = new Statek(Statektekstura);
        pocisk = new Pocisk(Pocisktekstura);
    }

    private void zaladujdane() {
        //tekstura statku pomniejszana
        Pixmap pixmap2 = new Pixmap(Gdx.files.internal("statek.jpg"));
        Pixmap pixmap1 = new Pixmap(100, 100, pixmap2.getFormat());
        pixmap1.drawPixmap(pixmap2,
                0, 0, pixmap2.getWidth(), pixmap2.getHeight(),
                0, 0, pixmap1.getWidth(), pixmap1.getHeight()
        );
        Statektekstura = new Texture(pixmap1);

        //tekstura pocisk pomniejszona
        Pixmap pixmap20 = new Pixmap(Gdx.files.internal("pocisk.jpg"));
        Pixmap pixmap10 = new Pixmap(35, 35, pixmap20.getFormat());
        pixmap10.drawPixmap(pixmap20,
                0, 0, pixmap20.getWidth(), pixmap20.getHeight(),
                0, 0, pixmap10.getWidth(), pixmap10.getHeight()
        );

        Pocisktekstura = new Texture(pixmap10); 
    }

    @Override
    public void render() {
        udpdate();
        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        statek.draw(batch);
        pocisk.draw(batch);

        batch.end();
    }

    private void udpdate() {
        przesuwanie();
        pocisk.y = pocisk.y+pocisk.pociskpredkosc*Gdx.graphics.getDeltaTime();      
    }

    private void przesuwanie() {
        if (Gdx.input.isKeyPressed(Keys.A)) {
            statek.x = statek.x - 250 * Gdx.graphics.getDeltaTime();
        }
        if (Gdx.input.isKeyPressed(Keys.D)) {
            statek.x = statek.x + 250 * Gdx.graphics.getDeltaTime();
        }
        if (Gdx.input.isKeyPressed(Keys.SPACE)) {

            pocisk = new Pocisk(Pocisktekstura);
            pocisk.strzal();    
        }       
    }

    @Override
    public void dispose() {
        //batch.dispose();  
    }
}
类PoDisk代码:

public class Pocisk extends Rectangle {

    private Texture texture;
    public float pociskpredkosc = 0;

    Pocisk(Texture texture) {
        this.texture = texture;
        this.height = texture.getHeight();
        this.width = texture.getWidth();    
    }

    public void draw(SpriteBatch batch) {
        batch.draw(texture, x, y);
    }

    public void strzal() {
        pociskpredkosc = pociskpredkosc + 80;
    }   
}
我想我在gra类中失败了,而在PoDisk类中失败了。当我单击空格时,我应该更改什么来创建一个新的矩形?

每次创建新对象并引用PoDisk变量时,您都在处理单个PoDisk引用。由该变量执行的POCIK更新,以便每次POCIK从初始位置开始。对于多个PoDisk,您需要保留所有对象引用并对该引用执行更新,所以请使用任何容器来存储所有引用。您可以将数组用于相同的对象

public class MainGame extends ApplicationAdapter {
    SpriteBatch batch;
    private Texture Statektekstura,Pocisktekstura;
    private Statek statek;
    Array<Pocisk> pociskList;
    boolean oneAtOnce;

    @Override
    public void create () {
        zaladujdane();
        init();
    }

    private void init() {
        batch=new SpriteBatch();
        statek=new Statek(Statektekstura);
        pociskList=new Array<Pocisk>();
    }

    private void zaladujdane() {
        //tekstura statku pomniejszana
        Pixmap pixmap2 = new Pixmap(Gdx.files.internal("badlogic.jpg"));
        Pixmap pixmap1 = new Pixmap(100, 100, pixmap2.getFormat());
        pixmap1.drawPixmap(pixmap2,
                0, 0, pixmap2.getWidth(), pixmap2.getHeight(),
                0, 0, pixmap1.getWidth(), pixmap1.getHeight()
        );
        Statektekstura=new Texture(pixmap1);

        //tekstura pocisk pomniejszona
        Pixmap pixmap20 = new Pixmap(Gdx.files.internal("badlogic.jpg"));
        Pixmap pixmap10 = new Pixmap(35, 35, pixmap20.getFormat());
        pixmap10.drawPixmap(pixmap20,
                0, 0, pixmap20.getWidth(), pixmap20.getHeight(),
                0, 0, pixmap10.getWidth(), pixmap10.getHeight()
        );

        Pocisktekstura=new Texture(pixmap10);
    }

    @Override
    public void render () {
        udpdate();
        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        statek.draw(batch);
        for(Pocisk pocisk:pociskList)
             pocisk.draw(batch);

        batch.end();
    }

    private void udpdate() {
        przesuwanie();
        for (Pocisk pocisk:pociskList)
        pocisk.y=pocisk.y+pocisk.pociskpredkosc*Gdx.graphics.getDeltaTime();
    }

    private void przesuwanie() {
        if(Gdx.input.isKeyPressed(Input.Keys.A))
        {
            statek.x=statek.x-250*Gdx.graphics.getDeltaTime();
        }
        if(Gdx.input.isKeyPressed(Keys.D))
        {
            statek.x=statek.x+250*Gdx.graphics.getDeltaTime();
        }
        if(Gdx.input.isKeyPressed(Input.Keys.SPACE))
        {
            Pocisk pocisk=new Pocisk(Pocisktekstura); //Called in game render method so create number of Object 
            pocisk.strzal();
            pociskList.add(pocisk);

        }
    }

    @Override
    public void dispose () {
        //batch.dispose();
    }
}

我会提醒您,您正在游戏渲染方法中创建PoDisk对象,所以当您按下键时,它会执行多次。空格使创建的对象数量增加。最好在InputProcessor接口的键控方法中创建对象。

多个矩形,一次一个,或者可能是屏幕上一次有多少个矩形?矩形的起始/初始位置和大小在哪里?您希望通过strzal方法或pociskpredkosc变量实现什么?您可以发布您看到的错误吗?可能是屏幕上的矩形数pociskpredkosc是线程LWJGL应用程序java.lang中我的rectangleException的速度移动。IllegalStateException:必须在开始之前调用SpriteBatch.end。在com.badlogic.gdx.graphics.g2d.SpriteBatch.beginSpriteBatch.java:167在com.mygdx.game.Gra.renderGra.java:61在com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainloopwjglapplication.java:225在com.badlogic.gdx.backends.lwjgl.lwjgl.LwjglApplication$1.runLwjglApplication.java:126,当我像你所说的那样更改时,我有这个错误。我复制了你的我必须分析这段代码,非常感谢!你知道当这个矩形是数组时,我如何重叠或碰撞吗?我想在每次PoDisk类中的这个矩形碰到另一个也是数组的矩形时进行碰撞。这是另一个主题,所以如果堆栈溢出中没有这个问题,您需要问另一个同样的问题。这是本网站的政策。