【发布时间】:2017-05-07 01:56:49
【问题描述】:
我正在制作一个游戏作为大学课程的项目。当我的主角(树)撞到地面时,它停在地面附近
当玩家降落在小平台上时,差距就更大了
我创建角色主体和地面的代码是这样的
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 不为我处理画布吗?我不知道你的建议是什么意思
-
使用
Box2DDebugRenderer并检查你的身体边界。