Java LibGdx Box2d collison与sprite不匹配
我正在制作一个游戏,作为一个大学班级的项目。当我的主角(树)落地时,它会在离地不远的地方停下来Java LibGdx Box2d collison与sprite不匹配,java,android,libgdx,box2d,Java,Android,Libgdx,Box2d,我正在制作一个游戏,作为一个大学班级的项目。当我的主角(树)落地时,它会在离地不远的地方停下来 public void draw(){ for(Material m : worldObjects){ m.draw(); } } 当玩家降落在小平台上时,差距会更大 我创建角色和背景的代码如下 public static Body createBody(int x, int y, float width, float height, boolean isSt
public void draw(){
for(Material m : worldObjects){
m.draw();
}
}
当玩家降落在小平台上时,差距会更大
我创建角色和背景的代码如下
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(每米像素数)为
我不知道这里有什么问题,我想让角色降落在地面上,而不是降落在上面。因此,如果有人能告诉我是什么导致了这种情况,或者给我一个好的教程,让我学习更多关于box2d的知识,我将不胜感激。当我们使用
多边形形状创建实体时,实体位于多边形的中心,所以当使用实体位置绘制时,它开始从多边形形状的中心绘制,所以我们需要在左侧绘制下角
在材料中类
替换
sprite.setPosition(body.getPosition().x * PPM, body.getPosition().y * PPM);
与
而对于角色绘制也会发生变化
sprite.setPosition(body.getPosition().x*PPM, body.getPosition().y*PPM);
与
正如我在代码中看到的,您没有在材质类中设置精灵的大小,也没有为角色设置宽度和高度
材料类
sprite = new Sprite(t);
sprite.setSize(w,h);
和性格
body = createBody(0, 480, 313, 260, false);
texture = new Texture("tree.PNG");
sprite = new Sprite(texture);
sprite.setSize(313,260);
可能画布的大小比图像大。确保画布和图像的高度相等。地面是由不可分割的瓷砖组成的,libgdx不是替我照看画布吗?我不知道你的建议是什么意思使用box2debugrenderer
检查身体的界限。
sprite = new Sprite(t);
sprite.setSize(w,h);
body = createBody(0, 480, 313, 260, false);
texture = new Texture("tree.PNG");
sprite = new Sprite(texture);
sprite.setSize(313,260);