gpt4 book ai didi

java - 如何停止运球?

转载 作者:行者123 更新时间:2023-12-02 01:32:48 26 4
gpt4 key购买 nike

我正在使用 libGDX 制作一个新的突破游戏(我是 libGDX 的新手),在游戏中,每当球接触 Racket 时,它就会开始运球,而不会在 Racket 上弹跳。

我已经尝试过更改此游戏中球的 ySpeed。

这是我的球类的代码。

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;



}





}



}

我预计球会从 Racket 上弹开,但它一直在 Racket 上打球。

最佳答案

如果您的执行顺序是Paint()->update()->checkCollision() 或 Paint()->checkCollision->update()

因此,在第一次碰撞后,每第三次碰撞检查都会返回 true,并且您的速度会变成乒乓球

并且由于您在绘制中包含了circle.x,因此它会在每第二帧恢复到原始位置..固定更新应如下所示..但在查看之前请自行解决。

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;

}

关于java - 如何停止运球?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55793855/

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