【问题标题】:LibGDX Bouncing ballLibGDX 弹跳球
【发布时间】:2014-12-19 13:13:57
【问题描述】:

我想创建一个无限弹跳的球。现在我只是想在 Y 上弹跳(上下)。

这是我的 GameWorld 类,你可以看到有一个方法 collides 来检测碰撞,但是如何制作那个 "circle"上去?

public class GameWorld {

    private Circle rond;
    private Rectangle rect;

    public GameWorld(int midPointY) {
        rond = new Circle(100, midPointY - 5, 5);
        rect = new Rectangle(0, 200, Gdx.graphics.getWidth(), 5);
    }

    public void update(float delta) {

        if(collides(rond)){

        }else
            rond.y++;

    }

    public boolean collides(Circle rond) {
        if (rect.y < rond.y + (rond.radius)*2) {
            return (Intersector.overlaps(rond, rect));
        }
        return false;
    }

    public Circle getRond() {
        return rond;

    }

    public Rectangle getRect() {
        return rect;
    }

}

当然,我还有另一个类 GameRenderer 来渲染这两个对象

【问题讨论】:

  • 添加一个 vy 变量,将其初始化为 1。而不是 'rond.y++' 使用 'rond.y += vy'。碰撞后,将 vy 设置为 -1。 x 也一样。
  • 这样的?私人 vy = 1; (...) if(碰撞(rond)){ vy = -1; }else rond.y += vy;

标签: java android libgdx


【解决方案1】:

通常对于任何类型的物理,您都希望存储对象的速度及其位置。这样,每次更新循环时,您只需按 y 速度更改 y 位置。当发生碰撞时,您只需计算新的yspeed 并更新rond

public void update(float delta) {
    if(collides(rond)){
        rond.yspeed = -rond.yspeed;
    }else{
        rond.y+=rond.yspeed*delta;
    }
}

【讨论】:

  • yspeed如何定义?
  • yspeed 将在 rond 中定义为您想要的 rond 的初始速度。
猜你喜欢
  • 1970-01-01
  • 2014-08-17
  • 2013-05-23
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
相关资源
最近更新 更多