如果物體擊中另一個(gè)物體,如何使游戲停止?

我用p5js做了一個(gè)道奇球賽:)玩家可以使用箭頭鍵將一個(gè)黃色圓圈從畫布的左上角移動(dòng)到右下角,同時(shí)避開六個(gè)線性移動(dòng)的紅點(diǎn),其中三個(gè)是水平移動(dòng)的,另一個(gè)是垂直移動(dòng)的。

我只想->如果黃點(diǎn)碰到其中一個(gè)紅點(diǎn),游戲停止,背景變黑。


let c;
let cspeed = 4
let x= 25;
let y = 25;
let level=0;
let width = 800
let height = 800

function setup() {
  createCanvas(800, 800);
  c=0
  let d = dist(c,height/4,x,y); //becuz of 'dist is not defined' issue, i moved it to setup() position
  let e = dist(c,height/2,x,y);
  let f = dist(c,height/9,x,y);
  let g = dist(height/2,c,x,y);
  let h = dist(height/4,c, x,y);
  let j = dist(height/9,c, x,y);
  print(d);
  print(e); 
  print(f);
  print(g);
  print(h); 
  print(j); 
  if (d<20||e<20||f<20||g<20||j<20);{
    loseScreen();
}
}

function draw() {
  keyPressed()
  background(220);
  fill(50);
  textSize(30)
  text(level, 770, 30);
  

  fill('green')
  square(0, 0, 50);
  fill('purple');
  square(750, 750, 50);
  fill('yellow')
  ellipse(x, y, 40);
  
  
  c+=cspeed;
  fill('red');
  noStroke();   
  ellipse(c, height / 4, 50, 50);
  ellipse(c, height / 2, 50, 50);
  ellipse(c, height / 9, 50, 50);
  ellipse(height / 4, c, 50, 50);
  ellipse(height / 2, c, 50, 50);
  ellipse(height / 9, c, 50, 50);
    if (c > width || c < 0) {
    cspeed *= -1;
  }
    
}
  if (c > width || c < 0) {
    cspeed *= -1;
  }
  if (x > 770 && y >770){
   x = 25
   y= 25;
    cspeed *= 1.5
    level++;
  }
function loseScreen(){ // it's not working,,
  noStroke(); 
  fill('black');
  square(0,0,800); 
}

function keyPressed() {
  //print(keyCode, key);
  
  if (keyCode == LEFT_ARROW && keyIsPressed) {
    x = x - 5;
    if (x<20){
      x=20
    }
  } else if (keyCode == RIGHT_ARROW&& keyIsPressed) {
     x = x + 5;
    if (x>780){
      x=780
    }
  } else if(keyCode == DOWN_ARROW&& keyIsPressed){
     y = y + 5; 
      if (y>780){
        y=780
      }
  }else if(keyCode == UP_ARROW&& keyIsPressed){
     y = y - 5; 
     if (y<20){
        y=20
      }
  }
}


這是我的p5js代碼https://editor.p5js.org/kiskl/sketches/XzwAM5pDA

我將感謝您提供的任何幫助!

? 最佳回答:

應(yīng)你的要求,我進(jìn)一步闡述了你第一個(gè)問題的答案。我之前的解決方案的訣竅是,可以使用for循環(huán)中的幾行來檢查每個(gè)點(diǎn)的沖突,這也是為什么在這樣的情況下使用數(shù)組通常更好。

現(xiàn)在,在hard-coded點(diǎn)上使用數(shù)組肯定有好處。

let height = 700;
let width = 700;
let s = 4;
let d = 50;

let gamestate = 'running';

let level = 0;
let x = 25;
let y = 25;

function setup() {
  createCanvas(width, height);
}

let dots = [
  {y: height / 4, x: 0, s: s, d: d, direction: 'h' },
  { y: height / 2, x: 0, s: s, d: d, direction: 'h' },
  { y: height / 9, x: 0, s: s, d: d, direction: 'h' },
  { x: width / 4, y: 0, s: s, d: d, direction: 'v' },
  { x: width / 2, y: 0, s: s, d: d, direction: 'v' },
  { x: width / 9, y: 0, s: s, d: d, direction: 'v' },
]

function draw() {
  switch (gamestate) {
    case 'victory':
      victoryScreen();
      break;
    case 'lose':
      loseScreen();
      break;
    default:
      keyPressed();
      background(220);
      fill(50);
      textSize(30)
      text(level, 770, 30);


      fill('green');
      square(0, 0, d);
      fill('purple');
      square(width - d, height - d, d);
      fill('yellow');
      ellipse(x, y, 40);

      dots.forEach((dot) => {
        fill('red')
        ellipse(dot.x, dot.y, dot.d, dot.d);
        if (dot.direction === 'h') {
          dot.x += dot.s

          if (dot.x > width || dot.x < 0) {
            dot.s *= -1;
          }
        } else if (dot.direction === 'v') {
          dot.y += dot.s

          if (dot.y > height || dot.y < 0) {
            dot.s *= -1;
          }
        }

        if (x < (dot.x + d) && (dot.x - d) < x) {
          if (y < (dot.y + d) && (dot.y - d) < y) {
            gamestate = 'lose';
          }
        }
      });

      if (x > width - d && y > height - d) {
        gamestate = 'victory'
      }
  }
}


function loseScreen() {
  noStroke();
  fill('black');
  square(0, 0, 800);
}

function victoryScreen() {
  noStroke();
  fill('green');
  square(0, 0, 800);
}

function keyPressed() {
  if (keyCode == LEFT_ARROW && keyIsPressed) {
    x = x - 5;
    if (x < d / 2) {
      x = d / 2;
    }
  } else if (keyCode == RIGHT_ARROW && keyIsPressed) {
    x = x + 5;
    if (x > (width - d / 2)) {
      x = width - d / 2;
    }
  } else if (keyCode == DOWN_ARROW && keyIsPressed) {
    y = y + 5;
    if (y > (height - d / 2)) {
      y = height - d / 2;
    }
  } else if (keyCode == UP_ARROW && keyIsPressed) {
    y = y - 5;
    if (y < d / 2) {
      y = d / 2;
    }
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>

主站蜘蛛池模板: 中文字幕一区二区三区精华液| 久久99国产一区二区三区| 国产成人无码一区二区在线观看 | 国产福利一区视频| 天码av无码一区二区三区四区| 中文字幕日韩一区二区不卡| 99精品一区二区免费视频 | 精品日韩一区二区| 中文乱码字幕高清一区二区| 精品一区二区三区东京热| 国产精品一区二区久久国产| 精品一区二区三区免费观看| 一区二区免费在线观看| 精品人妻一区二区三区四区 | 国产传媒一区二区三区呀| 国产一区二区好的精华液| 亚欧在线精品免费观看一区| 一区二区三区亚洲| 精品性影院一区二区三区内射| 无码人妻视频一区二区三区| 亚洲国产老鸭窝一区二区三区| 亚洲色精品vr一区二区三区| 一本AV高清一区二区三区| 久久久久一区二区三区 | 亚洲一区无码精品色| 久久毛片免费看一区二区三区| 一区二区三区影院| 精品一区二区三区四区| 亚洲一区二区三区高清视频| 国产香蕉一区二区精品视频 | 夜色福利一区二区三区| 无码aⅴ精品一区二区三区浪潮| 日韩精品无码一区二区三区| 精品欧洲av无码一区二区三区| 无码中文字幕乱码一区| 国产第一区二区三区在线观看| 波多野结衣高清一区二区三区| 国产suv精品一区二区33| 无码人妻精品一区二区蜜桃网站 | 国产精品福利一区二区| 韩国一区二区三区|