使一个对象在处理过程中被mouseY / mouseX移动的其他对象反弹

时间:2016-12-01 01:29:16

标签: processing

我对处理很新,需要一些帮助。我试图建立一个简单的踢球游戏。简单的想法:当球击中黄色球杆时,球会反弹。让球保持活力#34;你必须使它反弹黄色条。我已成功找到弹跳球的代码(它现在在窗口的底部反弹),而且我还成功创建了一个随鼠标移动的条形图。到目前为止我能够创造的是让球实际反弹。在这里寻找帮助!!谢谢!

float ballX = 100;
float ballY = 0;
float h = 50;
int x, y;


//create a variable for speed
float speedY = 2;

void setup() {
  size(400,400);
  smooth();
  noStroke();

  // change the mode we draw circles so they are
  // aligned in the top left
  ellipseMode(CORNER);

}

void draw() {
  //clear the background and set the fill colour
  background(0);
  fill(255);



  //draw the circle in it's current position
  ellipse(ballX, ballY, h,h);

  //add a little gravity to the speed
  speedY = speedY + 0.5;  

  //add speed to the ball's
  ballY = ballY + speedY; 


  //bar
   x = mouseX;
  y = mouseY;
  fill(255, 255, 0);
 rect(x, y, 50, 10);

  if (ballY > height - h) {
    // set the position to be on the floor
    ballY = height - h;
    // and make the y speed 90% of what it was,
    // but in the opposite direction
    speedY = speedY * -0.9;

    //switch the direction
    //speedY = speedY;
  }
  else if (ballY <= 0) { 
    // if the ball hits the top,
    // make it bounce off
    speedY = -speedY;
  }


}

1 个答案:

答案 0 :(得分:0)

我警告你不要只是在互联网上找到的复制粘贴代码。你必须真正理解它正在做什么,否则当你的代码变得更复杂时,你会遇到很多麻烦。尝试自己重写逻辑,这样就可以准确理解弹跳的工作原理。

为了弄清楚球是否与球拍相交,我建议拿出一张纸和一支铅笔并画一些例子。尝试找出球和桨在交叉时的位置和大小的模式。

但基本上,你需要检查球是否在矩形的边界“内”。如果球位于桨叶左侧的右侧,桨叶右侧的左侧,桨叶顶部下方以及桨叶底部上方,则属实。