ゲーム開発、特にLibgdxの初心者ですが、これまでのところ、.tmxマップをロードしたり保存したりすることができます手続き的に地形を生成する方法を試してみようとしていますが、今はブロックを削除するとこの奇妙なエラーが発生します(そのブロックはTiledMapTileとbox2dボディで構成されています)、削除していますそれは、ブロックをクリックすると、最初のブロックが削除された後に起こるエラーです。これは、削除されたブロックを表しています。したがって、1つのブロックが削除され、小さなエンティティが作成されますが、2回目にしようとすると、ゲームが中断し、これが表示されます。テクスチャとArraylistsのJava Libgdx奇妙なエラー
致命的なエラーには、Javaランタイム環境によって検出された:
EXCEPTION_ACCESS_VIOLATION(0xc0000005)にPC = 0x00007ffb8ecd9f58、PID = 6580、TID = 0x0000000000002474
JREバージョンで:のJava(TM)SEランタイム環境(8.0 Java HotSpot(TM)64ビットサーバVM(25.121-b13混合モードwindows-amd64圧縮済みのoops) 問題のあるフレーム: C [ntdll.dll + 0x39f58 ]
コアダンプの書き込みに失敗しました。 C:\ LibgdxプロジェクトのFedora \ WINDOWS \ジェネレータテスト\コア\資産hs_err_pid6580.log
\ミニダンプがWindows
のクライアントバージョンではデフォルトで有効になっていませんより多くの情報とエラーレポートファイルは次のように保存されますバグレポートを提出したい場合は、 http://bugreport.java.com/bugreport/crash.jsp ネイティブコードで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);
}
}
}
これはBlockDropクラスです:
public class BlockDrop extends Entity {
public BlockDrop(PlayGame screen, int x, int y, float width, float height) {
super(screen);
posX = x;
posY = y;
type = BodyDef.BodyType.DynamicBody;
density = 0.2f;
friction = 0.4f;
shape = new PolygonShape();
((PolygonShape) shape).setAsBox(width, height, new Vector2((x/32) + width * 2, (y/32) + height * 2), 0);
createBody();
}
}
そして、これは、Entityです:
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();
}
}
任意の助けをいただければ幸いです、それは単純なダムのものかもしれないと、コードは今混乱かもしれないが、私はように見えることはできませんこれを回避してください
結局私は物事を分離しようとしましたが、テクスチャがメソッドを通して解析されていないということも問題であることがわかりましたので、問題を引き起こしていたのは新しいブロックをレンダリングしたときです。 – Gawhisper
各エンティティは、奇妙な? – Aryan