我正在创建一个类似于贪吃蛇的游戏,其中我的蝙蝠侠角色形象与小丑角色形象碰撞并"抓住"它。一旦第一个消失,另一个小丑就会随机出现在屏幕上,供蝙蝠侠追逐,然后等等。
我已经做到了,所以当我的蝙蝠侠角色与它发生碰撞时,第一个小丑就会消失,但我正在努力让第二个小丑出现在屏幕上。我不确定 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 和声音等东西!
我们要做什么来实现小丑的事情:
- 摆脱
showImage
变量。我明白你在这里做什么,这是一个好主意,但我们不需要它。 - 在你检查碰撞的
If
,就在你写showImage = false
的地方,相反,我们将更新小丑的坐标:
像这样(我随机化了它,但现在你明白了,你可以自定义这个(:
jokerX = (int)random(width);
jokerY = (int)random(height);
- 删除
if (showImage == false)
。
啊......给你!如果你读得好,你会注意到你的错误在于,在if (showImage == false)
部分,你"传送"了小丑,而没有真正改变他的坐标。
如果你有问题,我会留下来。玩得愉快!