簡體   English   中英

處理 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。 鏈接到這里的截圖: https : //imageshack.com/a/img922/1063/4DSsUz.png

好的。 我在這里搞砸了很大,:)。 首先,w 和 h 最終為負,Box2D 可能斷言 w>0 且 h>0。

而且,無論如何,我總是繪制一個 10x10 的矩形,所以當我更改 w 和 h 時,它對繪制的內容沒有影響。

我遇到了這樣的麻煩。 我建議您導出您的項目以在像 Intellij Idea 這樣的專業 IDE 中打開它。 我在 IDEA 中的項目向我展示了 jbox2d 庫中帶有故障代碼的完整堆棧跟蹤。 我開發了一個視頻游戲。 但是我的麻煩只出現在 android 版本中,在主菜單之后加載一個游戲。 在桌面版本中一切正常。 我修復了這個錯誤。 關卡加載是在一個單獨的線程中實現的。 我將加載從單獨的線程更改為主游戲循環( draw()函數)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM