处理box2d断言错误
processing box2d assertion error
这是我的代码:
import shiffman.box2d.*;
import org.jbox2d.collision.shapes.*;
import org.jbox2d.common.*;
import org.jbox2d.dynamics.*;
ArrayList<Box>boxes;
Box2DProcessing box2d;
void setup() {
size(500, 500);
box2d=new Box2DProcessing(this);
box2d.createWorld();
box2d.setGravity(0, -10);
boxes=new ArrayList<Box>();
boxes.add(new Box(100, 300, 100, 200, true, 0, 0, 0));
}
void draw() {
background(255);
box2d.step();
for (Box b : boxes)b.display();
//thing.display();
}
class Box{
void display(){
fill(100);
noStroke();
Vec2 pos = box2d.getBodyPixelCoord(body);
float a = body.getAngle();
pushMatrix();
translate(pos.x,pos.y);
rotate(-a);
rect(0,0,10,10);
popMatrix();
}
Body body;
Box(float x,float y,float w,float h,boolean dynamic,float vx,float vy,float angVel){
BodyDef bd=new BodyDef();
Vec2 center=box2d.coordPixelsToWorld(x,y);
bd.position.set(center);
bd.fixedRotation=false;
bd.linearDamping=0.8;
bd.angularDamping=0.9;
bd.bullet=false;
if(dynamic)bd.type=BodyType.DYNAMIC;
else bd.type=BodyType.STATIC;
body=box2d.createBody(bd);
body.setLinearVelocity(new Vec2(vx,vy));
body.setAngularVelocity(angVel);
PolygonShape ps=new PolygonShape();
Vec2 size=box2d.coordPixelsToWorld(w,h);
ps.setAsBox(size.x,size.y);
FixtureDef fd=new FixtureDef();
fd.shape=ps;
fd.friction=0.3;
fd.restitution=0.5;
fd.density=1.0;
body.createFixture(fd);
}
}
我在调用 body.createFixture(fd)
时收到 AssertionError。
我正在使用 ProcessingBox2D 并且正在学习 http://natureofcode.com/book/chapter-5-physics-libraries/ 教程。
当我用谷歌搜索时,我发现你不能在一个步骤中创建一个主体,但这似乎不是问题所在。
编辑:没有堆栈跟踪,它只是说 AssertionError。
Link 截图到这里:https://imageshack.com/a/img922/1063/4DSsUz.png
好的。我在这里搞砸了,:)。
首先,w 和 h 最终为负,Box2D 可能断言 w>0 和 h>0.
而且,无论如何,我总是绘制一个 10x10 的矩形,所以当我更改 w 和 h 时,它对正在绘制的内容没有影响。
我遇到过这样的麻烦。我建议您导出您的项目以在像 Intellij Idea 这样的专业 IDE 中打开它。我在 IDEA 中的项目向我展示了 jbox2d 库中带有故障代码的完整堆栈跟踪。我开发了一个视频游戏。但是我的麻烦只出现在 android 版本中,在主菜单之后加载游戏回合。在桌面版中,everythinkg 是可以的。我修复了这个错误。关卡加载是在一个单独的线程中实现的。我将加载从单独的线程更改为主游戏循环(到 draw() 函数)。
这是我的代码:
import shiffman.box2d.*;
import org.jbox2d.collision.shapes.*;
import org.jbox2d.common.*;
import org.jbox2d.dynamics.*;
ArrayList<Box>boxes;
Box2DProcessing box2d;
void setup() {
size(500, 500);
box2d=new Box2DProcessing(this);
box2d.createWorld();
box2d.setGravity(0, -10);
boxes=new ArrayList<Box>();
boxes.add(new Box(100, 300, 100, 200, true, 0, 0, 0));
}
void draw() {
background(255);
box2d.step();
for (Box b : boxes)b.display();
//thing.display();
}
class Box{
void display(){
fill(100);
noStroke();
Vec2 pos = box2d.getBodyPixelCoord(body);
float a = body.getAngle();
pushMatrix();
translate(pos.x,pos.y);
rotate(-a);
rect(0,0,10,10);
popMatrix();
}
Body body;
Box(float x,float y,float w,float h,boolean dynamic,float vx,float vy,float angVel){
BodyDef bd=new BodyDef();
Vec2 center=box2d.coordPixelsToWorld(x,y);
bd.position.set(center);
bd.fixedRotation=false;
bd.linearDamping=0.8;
bd.angularDamping=0.9;
bd.bullet=false;
if(dynamic)bd.type=BodyType.DYNAMIC;
else bd.type=BodyType.STATIC;
body=box2d.createBody(bd);
body.setLinearVelocity(new Vec2(vx,vy));
body.setAngularVelocity(angVel);
PolygonShape ps=new PolygonShape();
Vec2 size=box2d.coordPixelsToWorld(w,h);
ps.setAsBox(size.x,size.y);
FixtureDef fd=new FixtureDef();
fd.shape=ps;
fd.friction=0.3;
fd.restitution=0.5;
fd.density=1.0;
body.createFixture(fd);
}
}
我在调用 body.createFixture(fd)
时收到 AssertionError。
我正在使用 ProcessingBox2D 并且正在学习 http://natureofcode.com/book/chapter-5-physics-libraries/ 教程。 当我用谷歌搜索时,我发现你不能在一个步骤中创建一个主体,但这似乎不是问题所在。
编辑:没有堆栈跟踪,它只是说 AssertionError。 Link 截图到这里:https://imageshack.com/a/img922/1063/4DSsUz.png
好的。我在这里搞砸了,:)。 首先,w 和 h 最终为负,Box2D 可能断言 w>0 和 h>0.
而且,无论如何,我总是绘制一个 10x10 的矩形,所以当我更改 w 和 h 时,它对正在绘制的内容没有影响。
我遇到过这样的麻烦。我建议您导出您的项目以在像 Intellij Idea 这样的专业 IDE 中打开它。我在 IDEA 中的项目向我展示了 jbox2d 库中带有故障代码的完整堆栈跟踪。我开发了一个视频游戏。但是我的麻烦只出现在 android 版本中,在主菜单之后加载游戏回合。在桌面版中,everythinkg 是可以的。我修复了这个错误。关卡加载是在一个单独的线程中实现的。我将加载从单独的线程更改为主游戏循环(到 draw() 函数)。