如何使图像在碰撞时消失,然后重新出现在屏幕上的随机位置



我正在创建一个类似于贪吃蛇的游戏,其中我的蝙蝠侠角色形象与小丑角色形象碰撞并"抓住"它。一旦第一个消失,另一个小丑就会随机出现在屏幕上,供蝙蝠侠追逐,然后等等。

我已经做到了,所以当我的蝙蝠侠角色与它发生碰撞时,第一个小丑就会消失,但我正在努力让第二个小丑出现在屏幕上。我不确定 for 循环是否是最好的 - 但是我如何让它只出现一个小丑,直到蝙蝠侠"抓住"它,然后下一个可以出现 - 或者也许是一个 if 语句。任何帮助将不胜感激,因为我现在真的感觉很困。

//loads music for background
import processing.sound.*;
SoundFile file;
String audioName = "dark_knight_rises.wav";
String path;
//loads gif library for background
import gifAnimation.*;
Gif myAnimation;
PImage batman;       //pixel images
PImage joker;        //pixel images
int batmanX = 100;        //batman X position on screen
int batmanY = 100;        //batman Y position on screen
int jokerX = 500;         //joker X position on screen
int jokerY = 500;         //joker Y position on screen
int batman1Size = 50;     //for batman distance
int joker2Size = 50;      //for joker distance
int width = 100;          //width for characters
int height = 100;         // height for characters
boolean showImage = true; // boolean to help joker disappear and reappear
int score = 0;            // declaration for high score


void setup() {
size(1067, 800);
//plays background music
path = sketchPath(audioName);
file = new SoundFile(this, path);
file.play();
//loads background and pixel-style batman/joker
myAnimation = new Gif(this, "background.gif");
myAnimation.play();
batman = loadImage("pixelbatman.png");
joker = loadImage("pixeljoker.png");
}
void draw() {
image(myAnimation, 0, 0);   //lays down gif background 
//display the score
textSize(20);
text("Jokers caught:", 900, 40);
text(score, 1045, 40);

image(batman, batmanX, batmanY, width, height);   //places Batman character on screen
//pixel batman movement
if (keyPressed) {
if (key == CODED) {
if (keyCode == UP) batmanY--;
if (keyCode == RIGHT) batmanX++;
if (keyCode == DOWN) batmanY++;
if (keyCode == LEFT) batmanX--;
}
}    //end of pixel batman movement

if (showImage) image(joker, jokerX, jokerY, width, height);   //if Boolean is true, place Joker character on screen
if (dist(batmanX, batmanY, jokerX, jokerY) < (batman1Size + joker2Size)/10 ) { //if batman and joker collide - joker disappears
showImage = false;
score += 1; //increase the score by 1 when batman eats a joker

// idea is that the first joker disappears and another pops up in a random position
if (showImage == false) {
image(joker, random(jokerX, 0), random(0, jokerY), width, height);
}
} // end of what happens if batman and joker collide
} // end of void draw

答案比你想象的要容易。事实上,你已经完成了大部分工作,你只需要一只橡皮鸭。

我会接受这份工作。

draw()函数中,您可以做很多事情。当你有空闲时间时,我建议你把这些分解一下。draw()是处理中的主循环,因此它总是容易被代码堵塞。当你这样做时,目标是有一个易于理解的循环,如下所示:

void draw() {
drawBackground();
manageInput();
collisions();
drawCharacters();
}

现在,对于您感兴趣的问题:

你做好了什么:

  • 你使用明确的命名法(你的命名约定使事情变得容易阅读,初学者犯的一个错误是缩短变量名称,因为他们知道他们在说什么,然后它会混淆其他人,包括他们自己(
  • 总体上做得很好,能够添加 GIF 和声音等东西!

我们要做什么来实现小丑的事情:

  1. 摆脱showImage变量。我明白你在这里做什么,这是一个好主意,但我们不需要它。
  2. 在你检查碰撞的If,就在你写showImage = false的地方,相反,我们将更新小丑的坐标:

像这样(我随机化了它,但现在你明白了,你可以自定义这个(:

jokerX = (int)random(width);
jokerY = (int)random(height);
  1. 删除if (showImage == false)

啊......给你!如果你读得好,你会注意到你的错误在于,在if (showImage == false)部分,你"传送"了小丑,而没有真正改变他的坐标。

如果你有问题,我会留下来。玩得愉快!

最新更新