Как я могу сделать спрайт неспособным проходить через строки? - PullRequest
0 голосов
/ 03 июня 2018

Итак, я импортировал изображение лабиринта (png) в качестве фона моего холста и нарисовал линии над соответствующими линиями на изображении в p5.Я создал спрайт, который является моим «персонажем», и это всего лишь небольшое изображение, и все, что он делает в данный момент, это перемещение с помощью клавиш со стрелками в верхней части изображения лабиринта.Я хочу, чтобы это проходило через этот лабиринт и не проходило ни одну из этих линий.Я уверен, что это действительно простой ответ, но я не могу обернуть голову вокруг этого.Вот мой код:

var spr;
var slimeMould;
var maze;
var line1;
var line2;
var line3;
var line4;
var line5;
var line6;
var line7;
var line8;
var line9;
var line10;
var line11;
var line12;
var line13;
var line14;
var line15;
var line16; 
var line17;


function preload () {
    slimeMould = loadImage("assets/slimemould-01.png");
    maze = loadImage("assets/maze-02.png");

}


function setup() {
  createCanvas(1000, 1000);
     imageMode(CENTER)


  spr = createSprite(595, 100);


        spr.addImage(slimeMould);      

}


function draw() {
  background(10);
  fill(255);
  noStroke();


    image(maze,width/2,height/2);

  textAlign(CENTER, CENTER);
    textSize(25);
  text("find the shortest route to the food!", width/2, height*0.79);
  drawSprites();



    strokeWeight(15);
    stroke(255);
    line1 = line(86,168,460,168);
    line2 = line(460,168,460,265);
    line3 = line(460,265,310,265);
    line4 = line(310,265,310,220);
    line5 = line(310,220,380,220);
    line6 = line(86,168,86,730);
    line7 = line(140,168,140,220);
    line8 = line(240,220,240,410);
    line9 = line(140,260,240,260);
    line10 = line(140,260,140,360);
    line11 = line(140,360,190,360);
    line12 = line(190,360,190,330);
    line13 = line(86,410,140,410);
    line14 = line(140,410,140,508);
    line15 = line(86,553,125,553);
    line16 = line(125,553,125,619);
    line17 = line(125,619,260,619);   

}


function keyPressed() {
  if (keyCode == RIGHT_ARROW) {
    spr.setSpeed(1.75, 0);
  }
  else if (keyCode == DOWN_ARROW) {
    spr.setSpeed(1.75, 90);
  }
  else if (keyCode == LEFT_ARROW) {
    spr.setSpeed(1.75, 180);
  }
  else if (keyCode == UP_ARROW) {
    spr.setSpeed(1.75, 270);
  }
  return false;
}

function keyReleased() {
    if (keyCode == RIGHT_ARROW) {
        spr.setSpeed(0,0);
    }
      else if (keyCode == DOWN_ARROW) {
    spr.setSpeed(0,0);
  }
  else if (keyCode == LEFT_ARROW) {
    spr.setSpeed(0,0);
  }
  else if (keyCode == UP_ARROW) {
    spr.setSpeed(0,0);
  }
  return false;
}

1 Ответ

0 голосов
/ 04 июня 2018

Вы ищете обнаружение столкновений .В частности, это звучит так, как будто вы хотите обнаружение столкновения линии с прямоугольником.Погуглив «обнаружение столкновения прямоугольника линии», вы получите тонну результатов, в том числе:

Но в целом звучит так, что общий подход состоит в том, чтобы разбить прямоугольник на 4 строки и затем обнаружить пересечение между линиями и линиями.Другой вариант - рассматривать линии в вашем лабиринте как прямоугольники и затем обнаружение столкновения прямоугольник-прямоугольник .

...