gpt4 book ai didi

java - LibGdx 坠落物体

转载 作者:行者123 更新时间:2023-11-28 19:34:03 28 4
gpt4 key购买 nike

我正在尝试编写一个 LibGDX 游戏。

目前我正在尝试添加一个从屏幕顶部落到底部然后重新出现在屏幕上并再次落下的图像,我还需要找到一种可以检测与玩家碰撞的方法(我将接下来必须学习如何正确添加播放器)。

问题是我在这部分 Libgdx 方面没有任何经验,我还是个新手。

这是我目前尝试过的,

Image image;

public Beam(Image image) {
this.image = image;
image.setPosition(LevelSmash.HEIGHT, LevelSmash.WIDTH);
}

public void update(){
image.setY(image.getY() - 1);
}

public void draw(SpriteBatch sb){
sb.begin();
//Draw image?
sb.end();
}

我已经知道它很糟糕,我不知道该使用哪些 LibGDX 类,我想知道它是 Body 还是什么?

编辑

更新代码

public class Beam extends Sprite{

Image image;

Body body;

public Beam(World world) {
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set(100, 300);

body = world.createBody(bodyDef);

CircleShape circle = new CircleShape();
circle.setRadius(20f);

FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = circle;
fixtureDef.density = 0.5f;
fixtureDef.friction = 0.4f;
fixtureDef.restitution = 0.6f;
Fixture fixture = body.createFixture(fixtureDef);
circle.dispose();

body.setUserData(this);

setRegion(new Texture("beam.png"));
}

public void update(float dt){
}

public Body getBody(){
return body;
}}

最佳答案

我认为你现在应该远离 box2d。将它用于这个项目似乎有些矫枉过正。

这是一个如何解决它的例子:

光束类:

public class Beam{
private Rectangle bound;
private TextureRegion texture;
private float weight = 10; //or gravity or however you want to think about it

public Beam(float x, float y, float width, float height){
texture = new Texture(Gdx.files.internal("beam.png"));
bound = new Rectangle(x,y,width,height);
}

public void update(float delta){
bound.y -= weight*delta;
}

public Rectangle getBound(){
return bound;
}

public Texture getTexture(){
return texture;
}
}

只需更改 bound.y 即可使光束到达屏幕顶部

beam.getBound().y = newValue;

您可以对对象本身或游戏中任何有意义的地方执行此操作。

然后当你添加一个玩家时,你也给那个对象一个绑定(bind),你可以与以下对象进行简单的碰撞:

if( player.getBound().overlaps(beam.getBound())){
//collision
}

边界是来自 libgdx 的矩形对象。它包含 x 和 y 坐标以及宽度和高度。使用矩形使移动对象和碰撞检测变得非常简单。

编辑:

从 render() 绘制纹理:

public void render(float delta){
...
beam.update(delta);

spriteBatch.begin();
spriteBatch.draw(beam.getTexture(), beam.getBound().x, beam.getBound().y);
spriteBatch.end();

}

或者让光束自己绘制:

public void render(float delta){
...
beam.update(delta);

spriteBatch.begin();
beam.draw(spritebatch);
spriteBatch.end();
}

在光束类中:

public void draw(SpriteBatch spriteBatch){
spriteBatch.draw(texture, bound.x, bound.y);
}

关于java - LibGdx 坠落物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40988751/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com