1
我正在製作一個遊戲作爲大學課程的一個項目。當我的主角(樹)撞擊地面時,它停止短地面LibGdx Box2d collison與精靈不匹配
和當小平臺上播放的土地那差距就更大
我的代碼,用於創建角色和地面的主體是
public static Body createBody(int x, int y, float width, float height, boolean isStatic){
Body body;
BodyDef def = new BodyDef();
if(isStatic){
def.type = BodyDef.BodyType.StaticBody;
}
else {
def.type = BodyDef.BodyType.DynamicBody;
}
def.position.set(x/PPM , y/PPM);
// returns a World object
body = GlobalWorld.getInstance().createBody(def);
PolygonShape shape = new PolygonShape();
shape.setAsBox(width/2/PPM, height/2/PPM);
body.createFixture(shape, 1.0f);
shape.dispose();
return body;
}
代碼地面是在它自己的類
public class Material {
private Texture image;
private Body body;
private Sprite sprite;
public Material(Texture t, int x, int y, int w, int h){
image = t;
sprite = new Sprite(t);
body = BoxBuilder.createBody(x, y, w, h, true);
body.setUserData("Ground");
}
public void draw(){
// returns a SpriteBatch
SpriteBatch batch = GlobalBatch.getInstance();
sprite.setPosition(body.getPosition().x * PPM, body.getPosition().y * PPM);
batch.begin();
sprite.draw(batch);
batch.end();
}
public void dispose(){
image.dispose();
}
}
繪製地面
public void draw(){
for(Material m : worldObjects){
m.draw();
}
}
代碼
我繪製的字符代碼
public void create(){
// do stuff
// global vars
body = createBody(0, 480, 313, 260, false);
texture = new Texture("tree.PNG");
sprite = new Sprite(texture);
// do stuff
}
public void render(){
// do stuff
sprite.setPosition(body.getPosition().x*PPM, body.getPosition().y*PPM);
batch.begin()
sprite.draw(batch)
batch.end()
// do stuff
}
和PPM(每米像素)
public static final float PPM = 32;
我不知道這裏的問題是什麼,我希望角色落地,而不是落地。所以如果有人能告訴我是什麼導致了這個問題,或者指點我一個關於box2d的更好教程,我會很感激。
也許畫布大小比圖像大。確保畫布和圖像的高度相等。 –
地面是由個人瓷磚組成的,而不是libgdx照顧我的畫布?我不知道你的建議 – Das
是什麼意思,使用'Box2DDebugRenderer'並檢查你身體的邊界。 – Aryan