Javascript原子:数组问题
所以,在最后一个项目中,我尝试用三颗不同的流星做一个游戏;青铜、银和金。虽然青铜阵列在Setup()中工作良好,但银流星和金流星由于某种未知原因以高速飞行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,
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