Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
Libgdx-线程中的异常;LWJGL应用程序“;java.lang.ClassCastException_Java_Android_Exception_Libgdx_Game Physics - Fatal编程技术网

Libgdx-线程中的异常;LWJGL应用程序“;java.lang.ClassCastException

Libgdx-线程中的异常;LWJGL应用程序“;java.lang.ClassCastException,java,android,exception,libgdx,game-physics,Java,Android,Exception,Libgdx,Game Physics,-这是我编写的所有类的链接 您好,我需要您的帮助,我正在编写本教程中的马里奥游戏: 在视频21中,每当投币砖被击中时,就会添加一个功能来繁殖蘑菇。一旦我添加了这个功能,游戏就开始了,但在我用蘑菇击中硬币砖块的4次(大约)中有1次它崩溃了。我犯了这个错误 然后我找到了一个博客,他“找到”了解决方案。给你- 今天,我终于有时间深入研究我的代码(因为我不使用Brent的代码1:1,我喜欢在每节课后“整理”它,以便它符合我自己的标准),并设法找到了罪魁祸首。问题在于,PlayScreen.update

-这是我编写的所有类的链接

您好,我需要您的帮助,我正在编写本教程中的马里奥游戏:

在视频21中,每当投币砖被击中时,就会添加一个功能来繁殖蘑菇。一旦我添加了这个功能,游戏就开始了,但在我用蘑菇击中硬币砖块的4次(大约)中有1次它崩溃了。我犯了这个错误

然后我找到了一个博客,他“找到”了解决方案。给你-

今天,我终于有时间深入研究我的代码(因为我不使用Brent的代码1:1,我喜欢在每节课后“整理”它,以便它符合我自己的标准),并设法找到了罪魁祸首。问题在于,
PlayScreen.update()
试图将被销毁的Goombas的主体设置为活动状态,这导致Box2d引擎尝试访问不再可用的内存(Box2d是用C编写的,只有一个小小的Java包装器围绕着它来实现)。解决方案如下: 在PlayScreen.update()中,而不是

if(enemy.getX() < player.getX() + 224 / MarioBros.PPM) {
                enemy.b2body.setActive(true);
            }
并从Goomba和Turtle中删除变量“destromed”

你猜怎么着?问题仍然存在,但错误更改为-

Exception in thread "LWJGL Application" java.lang.ClassCastException: com.redsoft.game.Sprites.Items.ItemDef cannot be cast to java.lang.Comparable
    at java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:652)
    at java.util.PriorityQueue.siftUp(PriorityQueue.java:647)
    at java.util.PriorityQueue.offer(PriorityQueue.java:344)
    at java.util.PriorityQueue.add(PriorityQueue.java:321)
    at com.redsoft.game.Screens.PlayScreen.spawnItem(PlayScreen.java:80)
    at com.redsoft.game.Sprites.TileObjects.Coin.onHeadHit(Coin.java:36)
    at com.redsoft.game.Tools.WorldContactListener.beginContact(WorldContactListener.java:30)
    at com.badlogic.gdx.physics.box2d.World.beginContact(World.java:985)
    at com.badlogic.gdx.physics.box2d.World.jniStep(Native Method)
    at com.badlogic.gdx.physics.box2d.World.step(World.java:689)
    at com.redsoft.game.Screens.PlayScreen.update(PlayScreen.java:116)
    at com.redsoft.game.Screens.PlayScreen.render(PlayScreen.java:143)
    at com.badlogic.gdx.Game.render(Game.java:46)
    at com.redsoft.game.MarioBros.render(MarioBros.java:48)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:225)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:126)
有趣的是,当我在博客上发表评论时

if (!enemy.isDestroyed() && enemy.getX() < player.getX() + 224 / MarioBros.PPM) {
                enemy.b2body.setActive(true);
            }
if(!敌方.isDestroyed()&&敌方.getX()
我得到的是最后一个错误,不是致命错误[gdx-box2d64.dll+0xbd0d],而是线程“LWJGL应用程序”java.lang.ClassCastException中的
异常:com.redsoft.game.Sprites.Items.ItemDef无法转换为java.lang.Compariable
——但是在相同的情况下,所以可能是相同的事情。很抱歉发了这么长的帖子,但我是LibGDX新手。我已经研究了两天没有任何解决方案


请帮帮我。

您在
播放屏幕中的
项目生成
集合是
PriorityQueue

您正在尝试将ItemDef对象添加到ItemsPawn:

public void spawnItem(ItemDef idef) {
     itemsToSpawn.add(idef);
}
但是
PriorityQueue
只允许
可比较的
元素


所以解决方案是将其更改为教程中的链接锁定队列。

谢谢,你们是我的英雄!
if (!enemy.isDestroyed() && enemy.getX() < player.getX() + 224 / MarioBros.PPM) {
                enemy.b2body.setActive(true);
            }
public void spawnItem(ItemDef idef) {
     itemsToSpawn.add(idef);
}