问题

我正在创建一个类似于Snake的游戏,其中我的Batman字符图像与Joker字符图像相撞并“捕获”它.一旦第一个消失,另一个Joker在屏幕上弹出一个随机点,供Batman追逐,然后等等.

我已经做到这一点,所以当我的Batman字符与它相撞时,第一个Joker消失了,但我正在努力让第二个Joker在屏幕上弹出.我不确定for循环是否最好 – 但是我如何做到这一点,所以只有一个Joker出现直到Batman“抓住”它然后出现下一个 – 或许是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,相反,我们将更新joker的坐标:

像这样(我随机化,但现在你可以自定义这个想法):

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

如果你读得很好,你会注意到你的错误在if (showImage == false)部分中,你“传送”了开玩笑者,而没有实际改变他的协调。

如果你有问题,我会坚持不懈。有趣!

  相同标签的其他问题

javaprocessing