【发布时间】:2021-11-08 19:46:22
【问题描述】:
我正在尝试在 Processing 中编写一个简单的太空游戏。代码如下:
float xPlayer, yPlayer;
float xBullet, yBullet;
float xMoon, yMoon;
float ySpeed;
boolean gunShoots = true;
boolean drawMoon = true;
PFont font;
void setup(){
size(500,500);
ySpeed = 10;
xBullet = xPlayer;
yBullet = yPlayer + 30;
xMoon = width;
yMoon = random(0,height);
font = loadFont("DINCondensed-Bold-48.vlw");
}
void draw(){
background(0);
circle(xBullet,yBullet,10); //gun
if(keyPressed && key == ' '){
gunShoots=true;
}
if (gunShoots == true){
xBullet = xBullet + 5; //gunshoots
}
if (xBullet > width){
gunShoots = false;
}
if (gunShoots == false){
xBullet = xPlayer +25; //gun resets
yBullet = yPlayer +30;
}
if((key =='a') || (key=='d') || (keyPressed == false) || (key == ' ')){ //spaceship stays
drawPlayer(xPlayer,yPlayer);
} else if((key == 'w')||(key == 's')){ //spaceship tilted
drawPlayertilted(xPlayer, yPlayer);
}
if(dist(xBullet, yBullet, xMoon, yMoon) > 30){
drawMoon = true;
} if (drawMoon == true){
drawMoon(xMoon,yMoon);
xMoon = xMoon - 1;
}
if(dist(xBullet, yBullet, xMoon, yMoon) < 30){
drawMoon = false;
if (drawMoon == false){
xMoon = -width;
displayText();
}
}
}
void drawPlayer(float x, float y){
stroke(0); //spaceship
strokeWeight(2);
fill(#F5F5F5);
circle(x,y,50);
fill(0);
circle(x,y,20);
triangle(x,y,x-8,y+25,x+8,y+25);
fill(105,105,105);
rect(x-20,y+20,40,5);
rect(x-25,y+25,50,15);
fill(255,255,0);
triangle(x-25,y+25,x-40,y+35,x-25,y+40);
triangle(x+25,y+25,x+40,y+35,x+25,y+40);
fill(#F5F5F5);
arc(x,y+40,50,20,0,PI,CHORD);
}
void drawPlayertilted(float x, float y){
stroke(0); //spaceship
strokeWeight(2);
fill(#F5F5F5);
ellipse(x,y,50,35);
fill(0);
triangle(x,y,x-19,y+20,x+19,y+20);
ellipse(x,y,20,15);
fill(105,105,105);
quad(x-15,y+15,x+15,y+15,x+20,y+18,x-20,y+18);
quad(x-25,y+18,x+25,y+18,x+30,y+30,x-30,y+30);
fill(255,255,0);
triangle(x+25,y+18,x+40,y+25,x+30,y+30);
triangle(x-25,y+18,x-40,y+25,x-30,y+30);
fill(#F5F5F5);
arc(x,y+30,60,20,0,PI,CHORD);
}
void drawMoon(float x, float y){
stroke(107, 112, 120);
fill(172, 175, 181);
circle(x,y,50);// moving moon
}
void displayText(){
textFont(font, 30);
fill(255);
textAlign(CENTER);
text("Winner Winner Chicken Dinner !!!", 250, 250);
}
void keyPressed(){ //spaceship movement
if(key =='s')
yPlayer = yPlayer + 10;
if(key =='w')
yPlayer = yPlayer - 10;
if(key =='a')
xPlayer = xPlayer - 5;
if(key =='d')
xPlayer = xPlayer + 5;
}
所以每次月亮被子弹击中时,我都希望出现一个文本,让玩家知道他们已经赢得了比赛。
if(dist(xBullet, yBullet, xMoon, yMoon) < 30){
drawMoon = false;
if (drawMoon == false){
xMoon = -width;
displayText();
}
但是,文本仅在月亮被击中时弹出 1 秒,但在月亮消失后不会停留在屏幕上。如果有人可以帮助我,那就太好了。也欢迎其他关于我如何改进代码的反馈和 cmets!
谢谢你:)
【问题讨论】:
-
改进:为什么要进行 2 次测试?以下语法不够 if(dist(xBullet, yBullet, xMoon, yMoon)
-
请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example。
标签: java processing display