处理 3.0:加速乒乓球弹跳不正确



我正在学习处理,正在处理 3 中制作乒乓球游戏的修改版本。我同时有 2 个球,而不仅仅是 1 个。此外,随着程序的运行,一个球加速,而另一个球减速。

我的加速球工作正常,它弹跳并提高了速度。但是,我的减速球无法正常工作。减速球在非常小的区域内移动,甚至不会靠近边界反弹。帮助将不胜感激。谢谢。

float ballXPosition;
float ballYPosition;
float ballTwoXPos;
float ballTwoYPos;
float xDirection;
float ballTwoXDir;
float yDirection;
float ballTwoYDir;
float radius = 12;
float xSpeed;
float ySpeed;
float ballTwoXSpeed;
float ballTwoYSpeed;
float MAX_SPEED = 15;
float MIN_SPEED = 0.2;
void setup()
{
  size(600,600);
  stroke(3);
  background(255,255,255);
  ballXPosition = width/2 + random(60);
  ballTwoXPos= width/2 + random(60); 
  ballYPosition = height/2 + random(60);
  ballTwoYPos = height/2 + random(60);
  xDirection = random(1,3);
  ballTwoXDir = random(1,3);
  yDirection = random(1,3);
  ballTwoYDir = random(1,3);
  xSpeed = MIN_SPEED;
  ySpeed = MIN_SPEED;
  ballTwoXSpeed = MAX_SPEED;
  ballTwoYSpeed = MAX_SPEED;
}
void createAcceleratingBall(float xpos, float ypos, float xstretch, float ystretch)
{
  fill(255,0,0);
  ellipse(xpos, ypos, xstretch, ystretch);
}
void createSlowingBall(float xpos, float ypos, float xstretch, float ystretch)
{
  fill(0,0,255);
  ellipse(xpos, ypos, xstretch, ystretch);
}
boolean isSpeedMax(float speed)
{
  return speed > MAX_SPEED;
}
boolean isSpeedMin(float speed)
{
  return speed < MIN_SPEED;
}
boolean isBallAtXBorder(float xpos)
{
  if(xpos < radius || xpos > width - radius)
    return true;
  else
    return false;
}
boolean isBallAtYBorder(float ypos)
{
  if(ypos < radius || ypos > height - radius)
    return true;
  else
    return false;
}
void draw()
{
  background(255);
  ballXPosition = ballXPosition + (xDirection * xSpeed);
  ballTwoXPos = ballTwoXPos + (ballTwoXDir * ballTwoXSpeed);
  ballYPosition = ballYPosition + (yDirection * ySpeed);
  ballTwoYPos = ballTwoYPos + (ballTwoYDir * ballTwoYSpeed);
  if(!isSpeedMax(xSpeed))
    xSpeed *= 1.005;
  if(!isSpeedMax(ySpeed))
    ySpeed *= 1.003;
  if(!isSpeedMin(ballTwoXSpeed))
    ballTwoXSpeed = ballTwoXSpeed / 1.005;
  if(!isSpeedMin(ballTwoYSpeed))
    ballTwoYSpeed = ballTwoYSpeed / 1.003;
  if(isBallAtXBorder(ballXPosition))
    xDirection *= -1;
  if(isBallAtYBorder(ballYPosition))
    yDirection *= -1;
  if(isBallAtXBorder(ballTwoXDir))
    ballTwoXDir *= -1;
  if(isBallAtYBorder(ballTwoYDir))
    ballTwoYDir *= -1;
  createAcceleratingBall(ballXPosition, ballYPosition, 2*radius, 2*radius);
  createSlowingBall(ballTwoXPos, ballTwoYPos, 2.5*radius, 2.5*radius);
}

我认为您在isBallAtXBorderisBallAtYBorder函数中测试了错误的变量来测试减速球。您正在测试ballTwoXDirballTwoYDir - 您不应该测试ballTwoXPosballTwoYPos吗?

相关内容

  • 没有找到相关文章

最新更新