繁体   English   中英

使用LibGDX弹跳另一个圆圈

[英]Bounce a circle of another circle with LibGDX

在我的游戏中,我有一系列形成圆形边界的圆,在边界内,我有一个应该反弹的球,我希望该球从任何边界圆上反弹。 问题是球没有跳动,而是直接通过。 这是我的代码:

private Array<Circle> colCircles = new Array<Circle>(); // circle array

 // method to calculate circle position
 private Vector2 calculatePosition(int i) {
    float cx = Constants.CENTER_X;
    float cy = Constants.CENTER_Y;
    float angle = 4 * i;

    float x = (float) (cx + m * Math.cos(Math.toRadians(angle)));
    float y = (float) (cy + m * Math.sin(Math.toRadians(angle)));

    return new Vector2(x, y);
}

然后我创建这样的圈子:

for (int i = 0; i < 90; i++) {
        Vector2 pos = new Vector2(calculatePosition(i));
        Circle c = new Circle(pos, colRadius);
        colCircles.add(c);

        Vector2 pos1 = new Vector2(calculateExPosition(i));
        Circle c1 = new Circle(pos1, colRadius);
        exCircles.add(c1);

    }

我的球的更新方法是这样的:

public void update(float delta) {
    direction.x = (float) Math.cos(Math.toRadians(angle));
    direction.y = (float) Math.sin(Math.toRadians(angle));

    if (direction.len() > 0) {
        direction = direction.nor();
    }

    velocity.x = direction.x * speed;
    velocity.y = direction.y * speed;

    position.x += velocity.x * delta;
    position.y += velocity.y * delta;

    circle.set(position.x + width / 2, position.y + height / 2, width / 2);
}

当球与任何一个圆之间发生碰撞时,我使用此代码尝试弹跳,但没有弹跳帮助!:

 public void bouncer(Ball b){
    // original velocity vector
    Vector2 v1 = new Vector2(b.getVelocity().x, b.getVelocity().y);

    // normal vector
    Vector2 n = new Vector2(
            Constants.CENTER_X - b.getPosition().x,
            Constants.CENTER_Y - b.getPosition().y
    );

    // normalize
    if (n.len() > 0) n = n.nor();

    // dot product
    float dot = v1.x * n.x + v1.y * n.y;

    // reflected vector values
    v2.x = v1.x - 2 * dot * n.x;
    v2.y = v1.y - 2 * dot * n.y;

    // set new velocity
    b.setVelocity(v2);
}

update()方法中,您的速度是通过方向矢量和速度量来计算的。

所以改变方向而不是速度。

 direction.rotate(180);   // for centric bounce

否则,如果需要一些偏差,请计算中间中心与球位置之间的角度,并使用一些随机偏差。

direction.setAngle(angle-180+ MathUtils.random(-18,18));
direction.nor(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM