Javascript原子:数组问题

Javascript原子:数组问题,javascript,arrays,github,atom-editor,Javascript,Arrays,Github,Atom Editor,所以,在最后一个项目中,我尝试用三颗不同的流星做一个游戏;青铜、银和金。虽然青铜阵列在Setup()中工作良好,但银流星和金流星由于某种未知原因以高速飞行 function setup() { createCanvas(windowWidth, windowHeight); spaceship = new Spaceship(100, 100, 5, spaceshipImage, bulletImage, 40); healthStar = new Star(1000, 100,

所以,在最后一个项目中,我尝试用三颗不同的流星做一个游戏;青铜、银和金。虽然青铜阵列在Setup()中工作良好,但银流星和金流星由于某种未知原因以高速飞行

function setup() {
  createCanvas(windowWidth, windowHeight);
  spaceship = new Spaceship(100, 100, 5, spaceshipImage, bulletImage, 40);
  healthStar = new Star(1000, 100, 10, healthStarImage, 50);


//the Meteor Array
// Run a for loop numMeteor times to generate each meteor and put it in the array
// with random values for each star
for (let i = 0; i < numMeteor; i++) {
  let meteorX = random(0, width);
  let meteorY = random(0, height);
  let meteorSpeed = random(2, 20);
  let meteorRadius = random(10, 60);
  meteor.push(new Meteor(meteorX, meteorY, meteorSpeed, meteorBronzeImage, meteorRadius));
  }
}

// draw()
//
// Handles input, movement, eating, and displaying for the system's objects
function draw() {
// Set the background to a safari scene
  background(skyBackground);
// Check if the game is in play
  if (playing == true) {

// Handle input for the tiger
  spaceship.handleInput();

// Move all the "animals"
  spaceship.move();
  healthStar.move();

if (spaceship.dodges >= 5){
  levelTwo = true;
}
  //lvl 2
  if (levelTwo == true){
    meteor = [];
    for (let i = 0; i < numMeteor; i++) {
      let meteorX = random(0, width);
      let meteorY = random(0, height);
      let meteorSpeed = random(2, 20);
      let meteorRadius = random(10, 60);
      meteor.push(new Meteor(meteorX, meteorY, meteorSpeed, meteorSilverImage, meteorRadius));
  }
}

if (spaceship.dodges >= 8){
  levelThree = true;
}
//lvl 3
if (levelThree == true){
  levelTwo = false;
  meteor = [];
      for (let i = 0; i < numMeteor; i++) {
      let meteorX = random(0, width);
      let meteorY = random(0, height);
      let meteorSpeed = random(2, 20);
      let meteorRadius = random(10, 60);
      meteor.push(new Meteor(meteorX, meteorY, meteorSpeed, meteorGoldImage, meteorRadius));
    }
}

// Handle the tiger and lion eating any of the star
  spaceship.handleEating(healthStar);

  //
  spaceship.handleBullets();

// Handle the tragic death of the tiger
  spaceship.handleDeath();

// Check to see when the game is over
  checkGameOver();

// Display all the "animals"
  spaceship.display();
  healthStar.display();

// Display and making sure the tiger can eat the copies of the star
for (let i = 0; i < meteor.length; i++) {
meteor[i].move();
meteor[i].display();
//meteor[i].handleDamage();
spaceship.handleHurting(meteor[i]);
spaceship.handleDodging(meteor[i]);

}
 }
   // Once the game is over, display a Game Over Message
 if (gameOver == true) {
    displayGameOver();
  }
    // Otherwise we display the message to start the game
  else {
    displayStartMessage();
      }
    }

函数设置(){
createCanvas(窗口宽度、窗口高度);
太空船=新太空船(100,100,5,太空船图像,bulletImage,40);
healthStar=新星(1000、100、10、healthStarImage、50);
//流星阵列
//运行for循环numMeteor次以生成每个流星并将其放入阵列中
//每颗星都有随机值
for(设i=0;i=5){
levelTwo=true;
}
//二级
如果(levelTwo==true){
流星=[];
for(设i=0;i=8){
三级=正确;
}
//三级
如果(levelThree==true){
levelTwo=false;
流星=[];
for(设i=0;i

我试图改变速度,将等级设置为错误,除了青铜流星外,没有任何其他东西起作用。

你的2级和3级流星初始化在你的绘制循环内。它们包括一个
meteor=[]
语句。从您提供的内容来看,这表明您的流星阵列在每次绘制迭代中都会被清除。他们从来没有机会移动,每次都会有新的随机流星

如果绘制循环中的阵列清除实际上是问题所在,则需要添加一种方法来跟踪级别初始化是否已完成,以便只发生一次。一个简单的标志,一个幂等函数,诸如此类

// Extract meteor generation to it's own function so you dont need to repeat it
function generateMeteors(meteorImage) {
  let meteor = [];
  for (let i = 0; i < numMeteor; i++) {
    let meteorX = random(0, width);
    let meteorY = random(0, height);
    let meteorSpeed = random(2, 20);
    let meteorRadius = random(10, 60);
    meteor.push(new Meteor(meteorX, meteorY, meteorSpeed, meteorBronzeImage, meteorRadius));
  }
  return meteor;
}


function setup() {
  createCanvas(windowWidth, windowHeight);
  spaceship = new Spaceship(100, 100, 5, spaceshipImage, bulletImage, 40);
  healthStar = new Star(1000, 100, 10, healthStarImage, 50);


  //the Meteor Array
  // meteor is apparently global, or otherwise in scope here
  meteor = generateMeteors(meteorBronzeImage)  
}


function draw() {
 /**  
    Code removed for clarity  
 **/

  if (spaceship.dodges >= 5) {
    levelTwo = true;
  }
  //lvl 2
  // levelTwoInitialized tracks if we've initialized the meteor array for this level
  if (levelTwo == true && levelTwoInitialized == false){
    meteor = generateMeteors(meteorSilverImage);
    levelTwoInitialized = true;
  }

  if (spaceship.dodges >= 8){
    levelThree = true;
  }
  //lvl 3
  // levelThreeInitialized tracks if we've initialized the meteor array for this level
  if (levelThree == true && levelThreeInitialized == false){
    levelTwo = false;
    meteor = generateMeteors(meteorGoldImage);
    levelThreeInitialized = true;
  } 

  //... rest of code
如果要创建具有多种类型的新集合,请执行以下操作:

  if (levelTwo == true && levelTwoInitialized == false){
    // make NEW silver and bronze meteors
    meteor = generateMeteors(meteorSilverImage)
                .concat(generateMeteors(meteorBronzeImage);
    levelTwoInitialized = true;
  }
  //... rest of code


你的2级和3级流星初始化在你的绘制循环中。它们包括一个
meteor=[]
语句。从您提供的内容来看,这表明您的流星阵列在每次绘制迭代中都会被清除。他们从来没有机会移动,每次都会有新的随机流星

如果绘制循环中的阵列清除实际上是问题所在,则需要添加一种方法来跟踪级别初始化是否已完成,以便只发生一次。一个简单的标志,一个幂等函数,诸如此类

// Extract meteor generation to it's own function so you dont need to repeat it
function generateMeteors(meteorImage) {
  let meteor = [];
  for (let i = 0; i < numMeteor; i++) {
    let meteorX = random(0, width);
    let meteorY = random(0, height);
    let meteorSpeed = random(2, 20);
    let meteorRadius = random(10, 60);
    meteor.push(new Meteor(meteorX, meteorY, meteorSpeed, meteorBronzeImage, meteorRadius));
  }
  return meteor;
}


function setup() {
  createCanvas(windowWidth, windowHeight);
  spaceship = new Spaceship(100, 100, 5, spaceshipImage, bulletImage, 40);
  healthStar = new Star(1000, 100, 10, healthStarImage, 50);


  //the Meteor Array
  // meteor is apparently global, or otherwise in scope here
  meteor = generateMeteors(meteorBronzeImage)  
}


function draw() {
 /**  
    Code removed for clarity  
 **/

  if (spaceship.dodges >= 5) {
    levelTwo = true;
  }
  //lvl 2
  // levelTwoInitialized tracks if we've initialized the meteor array for this level
  if (levelTwo == true && levelTwoInitialized == false){
    meteor = generateMeteors(meteorSilverImage);
    levelTwoInitialized = true;
  }

  if (spaceship.dodges >= 8){
    levelThree = true;
  }
  //lvl 3
  // levelThreeInitialized tracks if we've initialized the meteor array for this level
  if (levelThree == true && levelThreeInitialized == false){
    levelTwo = false;
    meteor = generateMeteors(meteorGoldImage);
    levelThreeInitialized = true;
  } 

  //... rest of code
如果要创建具有多种类型的新集合,请执行以下操作:

  if (levelTwo == true && levelTwoInitialized == false){
    // make NEW silver and bronze meteors
    meteor = generateMeteors(meteorSilverImage)
                .concat(generateMeteors(meteorBronzeImage);
    levelTwoInitialized = true;
  }
  //... rest of code


您在问题中提到了Setup()函数,但代码中没有。您提供的代码大概就是该函数的主体?将其明确化将有助于上下文-我们无法看到您的项目中未提供的部分。沿着这些思路,无论是什么代码负责流星运动-你的描述表明问题可能在于-不包括在内。非主题建议:除了图像之外,你用来填充流星阵列的代码在每种情况下都是相同的。将其提取到以图像为参数的函数中。不要重复你自己(干巴巴的)我只是把所有的东西都编辑进去了,我觉得放太多会让人困惑。对不起,没必要道歉。理想情况下,您需要尽可能多的信息来为从未看过您的项目的人提供足够的背景。(也称为a。)@Andy谢谢!我忘记了正确的术语/link。您在问题中提到了Setup()函数,但代码中没有。您提供的代码大概就是该函数的主体?将其明确化将有助于上下文-我们无法看到您的项目中未提供的部分。沿着这些思路,无论是什么代码负责流星运动-你的描述表明问题可能在于-不包括在内。非主题建议:除了图像之外,你用来填充流星阵列的代码在每种情况下都是相同的。将其提取到以图像为参数的函数中。不要重复你自己(干巴巴的)我只是把所有的东西都编辑进去了,我觉得放太多会让人困惑。对不起,没必要道歉。理想情况下,您需要尽可能多的信息来为从未看过您的项目的人提供足够的背景。(也称为a。)@Andy谢谢!我已经忘记了t