Как остановить дриблинг? - PullRequest
0 голосов
/ 22 апреля 2019

Я создаю новую прорывную игру с использованием libGDX (я новичок в libGDX) и в игре, когда мяч касается ракетки, он начинает капать, не подпрыгивая сверху.

Я уже пытался внести изменения в ySpeed ​​of ball в этой игре.

Вот код для моего класса мяча.

package com.thejavabay.my_game;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.math.Circle;
import com.badlogic.gdx.math.Intersector;

public class Ball{

    int x;
    int y;
    int size;
    int xSpeed;
    int ySpeed;


    Circle cic = new Circle();



    Color color = Color.WHITE;

    public Ball(int x, int y, int size, int xSpeed, int ySpeed) {

        this.x = x;
        this.y = y;
        this.size = size;
        this.xSpeed = xSpeed;
        this.ySpeed = ySpeed;

    }

    public void update() {

        x += xSpeed;
        y += ySpeed;

        if (x < size || x > Gdx.graphics.getWidth() - size) 
            xSpeed = -xSpeed;


        if (y < size || y > Gdx.graphics.getHeight() - size) 
            ySpeed = -ySpeed;



    }

    public void draw(ShapeRenderer shape) { 


        cic.x = x;
        cic.y = y;
        cic.radius = size;

                shape.setColor(color);
                shape.circle(x, y, size);




        shape.circle(x, y, size);

    }

    private static boolean collidesWith(Paddle paddle, Ball ball) {

        if(Intersector.overlaps(ball.cic, paddle.rect))
            return true;
        else
            return false;

    }

    public void checkCollision(Paddle paddle, Ball ball) {

        if(collidesWith(paddle, ball)) {

            ySpeed = -ySpeed;



        }





    }



}

Я ожидал, что мяч отскочит от весла, но он продолжает дриблинг на него.

1 Ответ

2 голосов
/ 22 апреля 2019

Если ваш порядок выполнения - paint () -> update () -> checkCollision () или paint () -> checkCollision-> update ()

из-за этой каждой третьей проверки столкновения после 1-гоСтолкновение вернет истину, и ваша скорость будет пинг-понг

, и поскольку у вас есть circle.x в краске, он будет возвращаться в исходное положение каждый 2-й кадр. Исправленное обновление должно выглядеть следующим образом. Но прежде чем смотреть, поработайте с ним.самостоятельно.

public void update(){
    x += xSpeed;
    y += ySpeed;

    if (x < size || x > Gdx.graphics.getWidth() - size) 
        xSpeed = -xSpeed;


    if (y < size || y > Gdx.graphics.getHeight() - size) 
        ySpeed = -ySpeed; 

    cic.x = x;
    cic.y = y;
    cic.radius = size;

}
...