Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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
带有纹理和ArrayList的Java Libgdx错误_Java_Arraylist_Libgdx_Textures - Fatal编程技术网

带有纹理和ArrayList的Java Libgdx错误

带有纹理和ArrayList的Java Libgdx错误,java,arraylist,libgdx,textures,Java,Arraylist,Libgdx,Textures,对于游戏开发,我基本上是一个初学者,尤其是对于Libgdx,到目前为止,我制作它是为了可以加载任何.tmx地图或保存它,我可能会尝试看看程序生成地形是如何工作的,但现在我在删除一个块(该块由平铺贴图和box2d主体组成)时遇到了一个奇怪的错误,我正在删除它,在删除之后我创建了一个更小的实体,它也将是一个实体,代表我刚刚删除的块,作为对玩家的删除,这是我在单击块时遇到的错误,它只发生在删除第一个块之后,因此,删除一个块并创建一个小实体,但如果我再次尝试,游戏就会中断,出现以下情况: Java运行时

对于游戏开发,我基本上是一个初学者,尤其是对于Libgdx,到目前为止,我制作它是为了可以加载任何.tmx地图或保存它,我可能会尝试看看程序生成地形是如何工作的,但现在我在删除一个块(该块由平铺贴图和box2d主体组成)时遇到了一个奇怪的错误,我正在删除它,在删除之后我创建了一个更小的实体,它也将是一个实体,代表我刚刚删除的块,作为对玩家的删除,这是我在单击块时遇到的错误,它只发生在删除第一个块之后,因此,删除一个块并创建一个小实体,但如果我再次尝试,游戏就会中断,出现以下情况:

Java运行时环境检测到一个致命错误:

pc=0x00007ffb8ecd9f58、pid=6580、tid=0x0000000000002474处的异常访问(0xc0000005)

JRE版本:Java(TM)SE运行时环境(8.0_121-b13)(build 1.8.0_121-b13) Java虚拟机:Java热点(TM)64位服务器虚拟机(25.121-b13混合模式windows-amd64压缩oops) 有问题的框架: C[ntdll.dll+0x39f58]

无法写入核心转储。默认情况下,在客户端版本的Windows上不启用小型转储

包含详细信息的错误报告文件另存为: C:\Libgdx Projects Fedora\WINDOWS\Generator Test\core\assets\hs\u err\u pid6580.log

如果您想提交错误报告,请访问: 崩溃发生在Java虚拟机外部的本机代码中。 有关报告错误的位置,请参见问题框

[错误报告期间发生错误,id 0xc0000005]

这是错误日志:

这是我删除块的地方:

public void destroyTerrain( ArrayList<Block> terrain, ArrayList<BlockDrop> blockDropsList ) {

    int x = Gdx.input.getX() / 32;
    int y = ( Gdx.graphics.getHeight() - Gdx.input.getY() ) / 32;

    Iterator<Block> iterator = terrain.iterator();
    while ( iterator.hasNext() ) {
        Block block = iterator.next();
        if ( x == ( int ) block.getBody().getPosition().x && y == ( int ) block.getBody().getPosition().y ) {

            PolygonShape shape = ( PolygonShape ) block.getBody().getFixtureList().get( 0 ).getShape();

            world.destroyBody( block.getBody() );
            iterator.remove();
            TiledMapTileLayer.Cell cell = ( ( TiledMapTileLayer ) map.getLayers().get( 0 ) ).getCell( x, y );

            Texture tex = cell.getTile().getTextureRegion().getTexture();

            // this is where the error is happening, when I'm creating a second blockDrop
            BlockDrop blockDrop = new BlockDrop( screen, x, y, shape.getRadius() * 16, shape.getRadius() * 16 );
            blockDrop.setTexture( tex );
            blockDropsList.add( blockDrop );
            cell.setTile( null );
        }
    }
}
这就是实体:

abstract public class Entity {

    private PlayGame screen;

    float posX, posY;

    private Body body;

    Shape shape;
    BodyDef.BodyType type;
    float density;
    float friction;

    SpriteBatch batch;
    Sprite sprite;

    Entity( PlayGame screen ) {
        this.screen = screen;

        batch = new SpriteBatch();
        sprite = new Sprite();
    }

    void createBody( ) {
        BodyDef bodyDef = new BodyDef();

        bodyDef.type = type;
        bodyDef.position.set( posX, posY );

        body = screen.getWorld().createBody( bodyDef );
        body.setUserData( this );

        FixtureDef fixtureDef = new FixtureDef();

        fixtureDef.shape = shape;
        fixtureDef.density = density;
        fixtureDef.friction = friction;
        body.createFixture( fixtureDef );
        dispose();
    }

    public void setTexture(Texture tex){
        sprite.setTexture( tex );
    }

    public void render( ) {
        sprite.setBounds( posX, posY, shape.getRadius(), shape.getRadius() );
        batch.begin();
        sprite.draw( batch );
        batch.end();
    }

    public String toString( ) {
        return getClass().getSimpleName();
    }

    public Body getBody( ) {
        return body;
    }

    public void dispose( ) {
        shape.dispose();
        batch.dispose();
    }
}

任何帮助都将不胜感激,这可能只是一件简单的蠢事,代码现在可能会乱七八糟,但我似乎无法回避这个问题。这个错误通常发生在您处理对象后正在使用它时

您正在使用已处置的形状:

iterator.remove();
...
BlockDrop blockDrop = new BlockDrop( screen, x, y, shape.getRadius() * 16, shape.getRadius() * 16 );

最好在单独的循环中创建和删除物理体

创建要创建的项目列表和要删除的另一个列表,同时请记住,在解锁“物理世界”时必须执行创建和删除操作

private World physicsWorld;

if(!physicsWorld.isLocked()) {
       removeBodyFromWorld();    
       addBodyIntoWorld();
}

removeBodyFromWorld()
方法中删除所需的实体并在
addBodyIntoWorld()
方法中创建新的实体。

是的,最终我尝试了分离东西,我还发现问题是纹理没有通过这些方法进行解析,所以问题的原因是当我渲染新的块时,每个实体都有自己的spriteBatch,看起来非常奇怪?
private World physicsWorld;

if(!physicsWorld.isLocked()) {
       removeBodyFromWorld();    
       addBodyIntoWorld();
}