Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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:Can';我似乎不能把物体画成一个数组_Java_Arrays_Libgdx - Fatal编程技术网

Java LibGDX:Can';我似乎不能把物体画成一个数组

Java LibGDX:Can';我似乎不能把物体画成一个数组,java,arrays,libgdx,Java,Arrays,Libgdx,敌人等级 public class Enemy extends Sprite{ private Vector2 velocity = new Vector2(0,0); private float speed = 30, gravity = 30 * 1.8f; public Enemy(Sprite sprite){ super(sprite); } public void draw(SpriteBatch spriteBatch){ update(Gdx.graphi

敌人等级

public class Enemy extends Sprite{

private Vector2 velocity = new Vector2(0,0);
private float speed = 30, gravity = 30 * 1.8f;


public Enemy(Sprite sprite){
    super(sprite);
}

public void draw(SpriteBatch spriteBatch){
    update(Gdx.graphics.getDeltaTime());
    super.draw(spriteBatch);
}

public void update(float delta) {

    velocity.y -= gravity * delta;
    setY(velocity.y + speed * delta);
}

}
public class PlayScreen implements Screen {
    private Player player;
    private OrthographicCamera camera;
    private OrthogonalTiledMapRenderer renderer;
    private TiledMap map;
    private Rectangle rightRectangle, leftRectangle, playerRectangle;

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        renderer.render();
        renderer.getSpriteBatch().begin();
        player.draw(renderer.getSpriteBatch());

        boolean wallLeft = leftRectangle.overlaps(player.rectangle);
        boolean wallRight = rightRectangle.overlaps(player.rectangle);

        if(wallLeft){
            System.out.println("wallLeft Overlap");
            player.velocity.x = 0;
        }
        else if(wallRight){
            System.out.println("wallRight Overlap");
            player.velocity.x = 0;
        }

        enemies = new ArrayList<Enemy>();
        enemy = new Enemy(new Sprite(new Texture("img/player.png"))));

        enemies.add(new Enemy(new Sprite(new Texture("img/player.png"))));
        enemies.add(new Enemy(new Sprite(new Texture("img/player.png"))));


        for(it = enemies.iterator(); it.hasNext();){

        enemy.draw(renderer.getSpriteBatch());
        enemy.setOrigin(500, 500);

        }


        renderer.getSpriteBatch().end();

    }
    @Override
    public void resize(int width, int height) {
        camera.viewportWidth = width;
        camera.viewportHeight = height;
        camera.update();
    }
    @Override
    public void show() {
        camera = new OrthographicCamera();
        map = new TiledMap();
        renderer = new OrthogonalTiledMapRenderer(map);

        player = new Player(new Sprite(new Texture("img/player.png")));
        rightRectangle = new Rectangle(1280,0,0,720);
        leftRectangle = new Rectangle(0,0,0,720);

        player.setPosition(
            Gdx.graphics.getWidth()/2f - player.getWidth()/2f,
            Gdx.graphics.getHeight()/2f - player.getHeight()/2f 
                - Gdx.graphics.getHeight()/5f);
    }
}
播放屏幕类

public class Enemy extends Sprite{

private Vector2 velocity = new Vector2(0,0);
private float speed = 30, gravity = 30 * 1.8f;


public Enemy(Sprite sprite){
    super(sprite);
}

public void draw(SpriteBatch spriteBatch){
    update(Gdx.graphics.getDeltaTime());
    super.draw(spriteBatch);
}

public void update(float delta) {

    velocity.y -= gravity * delta;
    setY(velocity.y + speed * delta);
}

}
public class PlayScreen implements Screen {
    private Player player;
    private OrthographicCamera camera;
    private OrthogonalTiledMapRenderer renderer;
    private TiledMap map;
    private Rectangle rightRectangle, leftRectangle, playerRectangle;

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        renderer.render();
        renderer.getSpriteBatch().begin();
        player.draw(renderer.getSpriteBatch());

        boolean wallLeft = leftRectangle.overlaps(player.rectangle);
        boolean wallRight = rightRectangle.overlaps(player.rectangle);

        if(wallLeft){
            System.out.println("wallLeft Overlap");
            player.velocity.x = 0;
        }
        else if(wallRight){
            System.out.println("wallRight Overlap");
            player.velocity.x = 0;
        }

        enemies = new ArrayList<Enemy>();
        enemy = new Enemy(new Sprite(new Texture("img/player.png"))));

        enemies.add(new Enemy(new Sprite(new Texture("img/player.png"))));
        enemies.add(new Enemy(new Sprite(new Texture("img/player.png"))));


        for(it = enemies.iterator(); it.hasNext();){

        enemy.draw(renderer.getSpriteBatch());
        enemy.setOrigin(500, 500);

        }


        renderer.getSpriteBatch().end();

    }
    @Override
    public void resize(int width, int height) {
        camera.viewportWidth = width;
        camera.viewportHeight = height;
        camera.update();
    }
    @Override
    public void show() {
        camera = new OrthographicCamera();
        map = new TiledMap();
        renderer = new OrthogonalTiledMapRenderer(map);

        player = new Player(new Sprite(new Texture("img/player.png")));
        rightRectangle = new Rectangle(1280,0,0,720);
        leftRectangle = new Rectangle(0,0,0,720);

        player.setPosition(
            Gdx.graphics.getWidth()/2f - player.getWidth()/2f,
            Gdx.graphics.getHeight()/2f - player.getHeight()/2f 
                - Gdx.graphics.getHeight()/5f);
    }
}
公共类PlayScreen实现屏幕{
私人玩家;
私人正交摄影机;
私有正交瓦片渲染器;
私人平铺地图;
私有矩形rightRectangle、leftRectangle、playerRectangle;
@凌驾
公共无效渲染(浮动增量){
glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
render.render();
renderer.getSpriteBatch().begin();
player.draw(renderer.getSpriteBatch());
布尔wallLeft=leftRectangle.overlaps(player.rectangle);
布尔wallRight=rightRectangle.overlaps(player.rectangle);
如果(左墙){
System.out.println(“墙左重叠”);
player.velocity.x=0;
}
否则如果(wallRight){
System.out.println(“墙右重叠”);
player.velocity.x=0;
}
敌人=新的ArrayList();
敌人=新敌人(新精灵(新纹理(“img/player.png”));
添加(新敌人(新精灵)(新纹理(“img/player.png”));
添加(新敌人(新精灵)(新纹理(“img/player.png”));
for(it=feeds.iterator();it.hasNext();){
draw(renderer.getSpriteBatch());
敌方。setOrigin(500500);
}
renderer.getSpriteBatch().end();
}
@凌驾
公共空心调整大小(整型宽度、整型高度){
camera.viewportWidth=宽度;
camera.viewportHeight=高度;
camera.update();
}
@凌驾
公开展览({
摄影机=新的正交摄影机();
map=新的tileMap();
渲染器=新的正交平铺贴图渲染器(贴图);
player=新玩家(新精灵(新纹理(“img/player.png”));
rightRectangle=新矩形(1280,0,0720);
leftRectangle=新矩形(0,0,0720);
播放器设置位置(
Gdx.graphics.getWidth()/2f-player.getWidth()/2f,
Gdx.graphics.getHeight()/2f-player.getHeight()/2f
-Gdx.graphics.getHeight()/5f);
}
}

因此,如果我运行这个,应用程序就会冻结,不再响应。我相信问题是当我尝试将“敌人”添加到PlayScreen类中时。以前它运行得很好,因为我没有把“敌人”类加入到这个项目中。我想做的是,把每个敌人吸引到敌人的阵阵中,然后确定他们的位置

是的,您缺少一个推进循环的
it.next()

for(it = enemies.iterator(); it.hasNext();){

    enemy.draw(renderer.getSpriteBatch());
    enemy.setOrigin(500, 500);

 }
我认为您也不希望每次都绘制相同的
敌人
,因此您应该在循环开始时设置
敌人=it.next()

另外,我不能百分之百确定这个软件的后端是如何工作的,但是我很确定你不想在下面的代码片段中加载同一个精灵的3个副本。你应该加载精灵一次,并对每个敌人使用相同的精灵

enemy = new Enemy(new Sprite(new Texture("img/player.png"))));
enemies.add(new Enemy(new Sprite(new Texture("img/player.png"))));
enemies.add(new Enemy(new Sprite(new Texture("img/player.png"))));

谢谢你的帮助!是否可以将敌方=it.next()和it.next都放在同一个for循环中,因为当我这样做时,它会给我一个NoTouchException错误。此外,当我只放置一个敌人=it.next()或it.next(),它将始终在位置(0,0)处生成我的敌人*我注意到在敌方类中,我将速度设置为(0,0),我刚刚删除了它,当使用迭代器时,
it.next()
调用返回列表中的下一个敌方(您需要将其分配给一个变量,例如您的
敌方
变量),并且应该在循环中只调用一次,因为您在循环中只检查一次
it.hasNext()
。如果您没有在上面的代码中做更多的事情,那么循环列表的一种更常见、更容易理解的方法是:
for(int i=0;i
对不起,我不能对其余的进行评论,因为我已经很久没有使用Libgdx了,但我建议您通过一些libgdx教程来尝试更好地组织和理解您的代码。也不要在渲染方法中实例化任何东西!这大约每秒调用60次,然后将触发大量对象创建。您将多次触发垃圾收集器。这可能会影响您的游戏性能。改为在onCreate()中执行。为此,我没有onCreate方法。还有别的方法可以用吗?