【问题标题】:processing box2d assertion error处理 box2d 断言错误
【发布时间】:2021-11-16 00:11:51
【问题描述】:

这是我的代码:

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。 截图链接:https://imageshack.com/a/img922/1063/4DSsUz.png

【问题讨论】:

  • 也发布错误堆栈跟踪。

标签: java processing box2d


【解决方案1】:

好的。我在这里搞砸了,:)。 首先,w 和 h 最终是负数,Box2D 可能断言 w>0 和 h>0。

而且,无论如何,我总是绘制一个 10x10 的矩形,所以当我更改 w 和 h 时,它对绘制的内容没有任何影响。

【讨论】:

    【解决方案2】:

    我遇到了这样的麻烦。我建议您导出项目以在 Intellij Idea 等专业 IDE 中打开它。我在 IDEA 中的项目向我展示了 jbox2d 库中带有故障代码的完整堆栈跟踪。我开发了一个视频游戏。但是我的麻烦只出现在 android 版本中,在主菜单之后加载游戏回合。在桌面版本中,everythinkg 都可以。我修复了这个错误。关卡加载是在单独的线程中实现的。我将加载从单独的线程更改为主游戏循环(更改为 draw() 函数)。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2020-02-25
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    相关资源
    最近更新 更多