当前位置: 首页 > 知识库问答 >
问题:

处理中的简单乒乓球游戏

孔城
2023-03-14

我试图用Java创建一个简单的乒乓球游戏进行处理。我还没有完成,一切都很顺利,只是我不能让球从乒乓桨上反弹。我已经成功地做到了,如果球低于桨板,它会反弹回来,但出于某种原因,如果球高于桨板,它会穿过。

Ball ball;
Paddle primary, secondary;

void setup()
{
  size(1000, 500);
  background(0);
  smooth();
  frameRate(150);
  ball = new Ball();
  initializePaddles();  // enters x values into primary and secondary paddles
}
void draw()
{
  ball.animateBall();  //uses vectors to add movements to ball, also checks if hitting walls
  animatePaddles();  //adds movements to paddles
}
class Ball
{
  PVector location, direction;
  final int diameter = height/20;
  Ball()
  {
    location = new PVector(width/2, height/2);
    direction = new PVector(0.5, 0.5);
  }
  void animateBall()  //movement to balls and checking if hitting walls
  {
    background(0);
    fill(255);
    circle(location.x, location.y, diameter);
    location.add(direction);
    if (location.y+diameter/2>= height|| location.y<=diameter/2)
      direction.y*=-1;
  }
}
class Paddle  //class for paddles
{
  PVector location;
  PVector direction = new PVector(0, 0);
  final int paddleLength = height/5;
  final int paddleWidth = width/150;
}

paddleFunctions选项卡:

void initializePaddles()  //enters x values into paddles relative screen size
{
  primary = new Paddle();
  primary.location= new PVector(width*.987, height/2);
  secondary = new Paddle();
  secondary.location = new PVector(width*.007, height/2);
}

void animatePaddles()  //creates the paddles and adds movement
{
  fill(255);
  rect(primary.location.x, primary.location.y, primary.paddleWidth, primary.paddleLength);
  rect(secondary.location.x, secondary.location.y, secondary.paddleWidth, secondary.paddleLength);
  primary.location.add(primary.direction);
  secondary.location.add(secondary.direction);
  if (ball.location.x+ball.diameter/2==primary.location.x-primary.paddleWidth/2 && ball.location.y>=primary.location.y-primary.paddleLength/2 && ball.location.y<=primary.location.y+primary.paddleLength/2)  //THE PROBLEM
    ball.direction.x*=-1;  //^^ **PROBLEM**
}

void keyPressed()  //controls primary paddle
{
  if (key == CODED)
    if (keyCode == UP)
      primary.direction.y=-2;
    else if (keyCode == DOWN)
      primary.direction.y=2;
}

void keyReleased()
{
  primary.direction.y=0;
}

共有1个答案

曹理
2023-03-14

你的建议是错误的。传递给rect()的坐标不是矩形的中心,默认情况下是左上角。但是您可以通过rectmode()更改模式:

rectMode(CENTER);
rect(primary.location.x, primary.location.y, primary.paddleWidth, primary.paddleLength);
rect(secondary.location.x, secondary.location.y, secondary.paddleWidth, secondary.paddleLength);

因为你用浮点数操作,球永远不会准确地击中桨。你必须评估球的右边是否大于桨的左边:

if (ball.location.x+ball.diameter/2 >= primary.location.x-+primary.paddleWidth/2 && 
    ball.location.y >= primary.location.y-primary.paddleLength/2 &&
    ball.location.y <= primary.location.y+primary.paddleLength/2) {

    ball.direction.x *= -1;
}
 类似资料:
  • 本教程将教你如何使用 Kivy 编写一款乒乓球游戏。我们将从一个基本的应用程序开始,描述创建这个游戏的每个步骤。 Kivy 是用 Python 和 Cython 编写的,基于 OpenGL ES 2,支持各种输入设备并拥有丰富的部件库。使用相同的代码,你可直接实现多平台应用,包括 Windows、macOS、Linux、Android 和 iOS。所有 Kivy 部件都支持多点触控。

  • 本文向大家介绍python使用pygame实现笑脸乒乓球弹珠球游戏,包括了python使用pygame实现笑脸乒乓球弹珠球游戏的使用技巧和注意事项,需要的朋友参考一下 今天我们用python和pygame实现一个乒乓球的小游戏,或者叫弹珠球游戏。 笑脸乒乓球游戏功能介绍 乒乓球游戏功能如下: 乒乓球从屏幕上方落下,用鼠标来移动球拍,使其反弹回去,并获得得分,如果没有接到该球,则失去一条命。玩家有一

  • 我想做一个正在处理的乒乓球游戏。但是球的移动不是很平稳。我试着改变帧速率并降低球的速度,但是移动速度似乎不是恒定的。这可能是性能问题吗?我是否做错了什么,或者即使对于简单的游戏,处理可能也不是正确的事情?(我的目标是试用processing.js,制作一款没有插件的游戏)。这是我的代码:

  • 我对更动态的java摇摆编程很陌生。我当然以前用过常规的摇摆组件,比如,等等。 所以我试图用和制作一个非常基本的乒乓球游戏。我以前做过一个绘画项目,我成功了。 我的问题是,当程序运行时,图形会严重口吃。到目前为止,我只实现了球,它只是选择了一个随机的方向,并开始在面板中反弹。这很有效。但是,我只能看到球,如果我一直不断调整帧的大小,否则它会严重口吃,看起来很空白。在第一秒钟左右的时间里,你可以看到

  • 通常只有Y轴运动在这样的游戏中可用,但我决定让它在这样一种方式,X轴桨运动也被允许。 起初,我认为这与像素有关,但我也尝试了多种方式改变桨碰撞,但没有任何积极的结果。无论我试了多少次,球都不会从桨上弹下来。 代码非常简单,我每次只移动1px: 为了移动桨叶,我使用简单的标志,在按键时将移动方向设置为“开”,在按键释放时设置为“关”。我在不定式循环中运行它,所以它不断地被执行。 这就是“run()”

  • 本文向大家介绍如果用乒乓球塞满一个教室,请你估算所需乒乓球数量。相关面试题,主要包含被问及如果用乒乓球塞满一个教室,请你估算所需乒乓球数量。时的应答技巧和注意事项,需要的朋友参考一下 先计算乒乓球的体积:由于测量麻烦,就用一杯水,把乒乓球塞进去,测量溢出水的体积。 再计算乒乓球的直径。 测量教室的宽、高。分别用宽/乒乓球直径=n(取整),高/乒乓球直径=m(取整)。 再用教室的长/乒乓球直径=x(