当矩形击中运动图像时,如何使分数上升?

时间:2017-12-22 22:58:41

标签: processing

我正在使用Processing3为我的大学项目制作游戏。游戏包含一辆用鼠标控制的汽车,只能在x轴上移动。我添加了人和硬币,他们也在x轴上上下移动。当矩形击中运动图像时,如何使分数上升?当我创建的汽车的矩形部分击中在路上上下移动的硬币的图像时,我希望得分上升。我会尽可能多地感谢你的帮助,因为老实说,我无法理解它。我已经突出显示了我试图用分数解决问题的地方。这是我的代码:

PImage sun,person1,person2,person3,person4,**coin**;
   int x,y;
   float ypos=0;
   float ypos2=4;
   **int coin_x,coin_y,coin_count;
   int score=0,lives=3;**

void setup()
   {
     size(1000,585);
     person1 = loadImage("person1.png");
     sun = loadImage("sun.png");
     **coin = loadImage("coin.png");**
     person2 = loadImage("person2.png");
     person3 = loadImage("person3.png");
     person4 = loadImage("person4.png");
     x=width/2;
     y=height/2;
   }
void draw()
{
  background(170,200,255);
  image(sun,720,-30,160,160);
  fill(255,240,50);
  ellipse(800,50,85,85);
  fill(200,255,150);
  rect(0,200,1000,400);
  fill(0,0,0);


  rect((-frameCount%200)*10+1000,130,90,70);
  rect((-frameCount%200)*10+1090,100,50,100);
  rect((-frameCount%200)*10+1500,130,90,70);
  rect((-frameCount%200)*10+1900,100,50,100);


  fill(200,200,200);
  rect(0,250,1000,90);
  fill(200,200,200);
  rect(0,350,1000,90);
  fill(200,200,200);
  rect(0,450,1000,90);
  fill(255,100,100);

  //vvvvvvvvv The car vvvvvvvvvvv
  **rect(0,mouseY+0,200,80);
  fill(0);
  ellipse(50,mouseY+60,60,60);
  fill(0);
  ellipse(150,mouseY+60,60,60);
  fill(100);
  ellipse(50,mouseY+60,40,40);
  fill(100);
  ellipse(150,mouseY+60,40,40);
  fill(255,100,100);
  arc(100,mouseY+0,160,150,PI,TWO_PI);
  fill(160,210,300);
  arc(100,mouseY+0,130,130,PI,TWO_PI);
  fill(255,100,100);
  rect(95,mouseY+0,10,-75);
  fill(0);
  rect(99,mouseY+0,2,80);**
  //^^^^^^^^^The car^^^^^^^^^


  image(person4,(-frameCount%300)*10+2500,250+sin(ypos)*100,120,120);
  ypos +=0.01;
  image(person3,(-frameCount%450)*5+2000,400+sin(ypos)*140,120,120);
  ypos +=0.01;
  image(person1,(-frameCount%300)*5+1000,300+sin(ypos)*50,120,120);
  ypos +=0.01;
  **image(coin,coin_x+(-frameCount%100)*20+1000,coin_y+300-sin(ypos2)*130,50,50);**
  ypos2 +=0.05;
  image(person2,(-frameCount%400)*5+1600,250-sin(ypos)*100,120,120);
  ypos +=0.08;
  **image(coin,coin_x+(-frameCount%300)*20+1900,coin_y+300+sin(ypos2)*130,50,50);
  ypos2 +=0.05;**


  **if((coin_x>10)&&(coin_x<10))
  {
    if(abs((coin_y+10)-(mouseY+0))<25)
    {
      coin_count++;
    }
  }**


  **textSize(30);
  fill(0);
  text("Score:"+coin_count,0,25);**


}

1 个答案:

答案 0 :(得分:0)

这个问题的答案与the answer to your first question相同。您需要执行矩形 - 矩形碰撞检测。

Google仍然是您的朋友,但基本知识如下:

//evaluates to true if rectOne and rectTwo are colliding
if(rectOneRight > rectTwoLeft && rectOneLeft < rectTwoRight && rectOneBottom > rectTwoTop && rectOneTop < rectTwoBottom){

无耻的自我推销:我已在可用的处理here中编写了有关碰撞检测的教程。

如果你不知道如何添加它,那么你需要从小处开始。尝试创建一个程序,显示两个硬编码的矩形,如果它们发生碰撞就会改变颜色。在继续下一步之前完成工作。

如果您仍然遇到问题,请在新问题帖子中发布MCVE以及更具体的问题。请注意,这不应该是您的完整项目,而只是一个小例子。