Как сделать так, чтобы при столкновении изображение исчезало, а затем снова появлялось в случайном месте на экране - PullRequest
1 голос
/ 27 сентября 2019

Я создаю игру, похожую на Снейка, в которой мой образ персонажа Бэтмена сталкивается с изображением персонажа Джокера и «ловит» его.Как только первый исчезает, другой Джокер выскакивает на экране в случайном месте, чтобы Бэтмен преследовал его, а затем и так далее.

Я сделал так, чтобы первый Джокер исчез, когда мой персонаж Бэтменсталкивается с этим, но я изо всех сил пытаюсь заставить второго Джокера выскакивать на экране.Я не уверен, что цикл 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

1 Ответ

1 голос
/ 27 сентября 2019

Ответ проще, чем вы думаете.Фактически, вы уже сделали большую часть работы, вам просто нужна резиновая утка.

Я возьму эту работу.

В функции draw() вы делаете много вещей,Когда у вас есть свободное время, я предлагаю вам немного разбить их.draw() - это основной цикл обработки, поэтому он всегда будет засорен кодом.Когда вы сделаете это, стремитесь создать легко понятный цикл, примерно такой:

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

Теперь по вопросу, который вас интересует:

Что вы делаете хорошо:

  • вы используете четкую номенклатуру (ваше соглашение об именах облегчает чтение, новички делают ошибку, укорачивая имена переменных, потому что они знают, о чем говорят, а потом это смущает всех остальных, в том числе и себя)
  • отличная работа в целом с возможностью добавлять такие вещи, как GIF и звуки!

Что мы собираемся сделать, чтобы достичь джокера:

  1. Избавьтесь от переменной showImage.Я понимаю, что вы здесь делаете, и это была хорошая идея, но она нам не понадобится.
  2. В If, где вы проверяете столкновение, именно там, где вы написали showImage = false,вместо этого мы обновим координаты джокера:

Вот так (я сделал это случайным образом, но теперь, когда у вас появилась идея, вы можете настроить это):

jokerX = (int)random(width);
jokerY = (int)random(height);
Удалите if (showImage == false).

Ааа ... вот и все!Если вы хорошо читаете, вы заметите, что ваша ошибка в том, что в части if (showImage == false) вы «телепортировали» джокера, фактически не меняя его координаты.

Я буду задерживаться на случай, если у вас возникнут вопросы,Веселись!

...