我正在使用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);**
}
答案 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以及更具体的问题。请注意,这不应该是您的完整项目,而只是一个小例子。