gpt4 book ai didi

java - 处理3.2.1 Game Control Plus库Java异常

转载 作者:行者123 更新时间:2023-12-03 17:13:06 25 4
gpt4 key购买 nike

我正在学习游戏和应用开发,在我们的第一学期,我们正在处理游戏。
在我的游戏中,我在库Game Control Plus的帮助下使用PS4 Controller 。
如果我按下按钮的次数足够多,我的游戏将崩溃并在控制台上提供此输出(插件“Uarma”是在按下按钮时执行代码的功能)

java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gamecontrolplus.Plug.call(Unknown Source)
at org.gamecontrolplus.ControlButton.callPlugs(Unknown Source)
at org.gamecontrolplus.ControlButton.update(Unknown Source)
at org.gamecontrolplus.ControlDevice.update(Unknown Source)
at org.gamecontrolplus.ControlIO.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.AssertionError
at org.jbox2d.dynamics.World.createBody(World.java:339)
at shiffman.box2d.Box2DProcessing.createBody(Box2DProcessing.java:203)
at Meon$Bullet.<init>(Meon.java:202)
at Meon.Uarma(Meon.java:294)
... 9 more
java.lang.RuntimeException: Error on calling plug: Uarma
at org.gamecontrolplus.Plug.call(Unknown Source)
at org.gamecontrolplus.ControlButton.callPlugs(Unknown Source)
at org.gamecontrolplus.ControlButton.update(Unknown Source)
at org.gamecontrolplus.ControlDevice.update(Unknown Source)
at org.gamecontrolplus.ControlIO.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)

我对Java的理解并不大,因此,请您对可能导致此错误的原因提供任何帮助!

提前致谢!

这是过程中涉及的代码:

//Variaveis
ControlIO controlo;
ControlDevice comando;

//inicia o ControlIO (vai ver que comandos estao ligados)
controlo = ControlIO.getInstance(this);

//procura comandos compativeis
comando = controlo.getMatchedDevice("playerControl");

//associa funçoes a botoes (Botão para Função)
BpFp1(); //p1 = player 1

void BpFp1() {

comando.getButton("jump").plug(this, "salto", ControlIO.ON_PRESS);
comando.getButton("punch").plug(this, "murro", ControlIO.ON_PRESS);
comando.getButton("grabWep").plug(this, "Aarma", ControlIO.ON_PRESS);
comando.getButton("useWep").plug(this, "Uarma", ControlIO.ON_PRESS);
}

void Uarma() {

println("usar armas? check");
bullets.add(new Bullet(player1.playerPos.x + 20, player1.playerPos.y, 5, 5));
}

项目符号构造函数:
class Bullet {

Vec2 bulletPos;
Body bulletbody;
float dbulletLarg;
float dbulletAlt;

Bullet(float bulletX, float bulletY, float bulletLarg, float bulletAlt) {

//definir o corpo
BodyDef bulletbd = new BodyDef();
bulletbd.type = BodyType.DYNAMIC;
bulletbd.bullet = true;
bulletbd.position.set(box2d.coordPixelsToWorld(bulletX, bulletY));

//criar o corpo
bulletbody = box2d.createBody(bulletbd);

//forma
PolygonShape bulletps = new PolygonShape();
bulletps.setAsBox(box2d.scalarPixelsToWorld(bulletLarg/2), box2d.scalarPixelsToWorld(bulletAlt/2));


//o que cola a forma ao corpo
FixtureDef bulletfd = new FixtureDef();
bulletfd.shape = bulletps;

//parametros que afetam a fisica do objeto
bulletfd.density = 0;

//colar a forma ao corpo
bulletbody.createFixture(bulletfd);

dbulletLarg = bulletLarg;
dbulletAlt = bulletAlt;

bulletbody.applyLinearImpulse(new Vec2(100, 0), bulletbody.getWorldCenter(), true);
}

void display() {

bulletPos = box2d.getBodyPixelCoord(bulletbody);

pushMatrix();
translate(bulletPos.x, bulletPos.y);
rectMode(CENTER);
rect(0, 0, dbulletLarg, dbulletAlt);
popMatrix();
}
}

最佳答案

这是一个线程问题。 ControlIO拥有自己的线程来接收输入,这可以证明:

at org.gamecontrolplus.ControlIO.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)

但是,Box2D(在Processing引擎下)也可以在其自己的线程中操纵其虚拟世界。您不应该在Box2D使用的线程之外操纵虚拟世界。这样做可能会由于无序的线程干扰而带来数据损坏问题的风险。

为了避免此类问题,Box2D锁定了它的世界,以避免意外的操作。但是,它使用 assert而不是大多数其他Java框架用于这种检查的 IllegalArgumentExceptionConcurrentModificationException。因此,您看到 AssertionErrorthis line of code抛出。

不幸的是,这就是您正在做的事情。创建 Bullet时,您可以从 ControlIO线程中进行操作。 Bullet构造函数尝试将 Bullet添加到虚拟世界。 Box2D被冒犯,并击中 assert

解决方案是不要在 Bullet方法内创建 Uarma。而是将对象发布到某个列表中的某个位置(具有适当的同步性),该对象表示应在给定位置创建 Bullet。返回实际上在Box2D线程中处理虚拟世界的 Meon代码,使用列表,通过调用其构造函数将对应的 Bullet添加到虚拟世界中。

关于java - 处理3.2.1 Game Control Plus库Java异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40600118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com