每次变量达到一定数量时,如何添加变量/函数?

时间:2017-10-09 18:32:15

标签: javascript

所以我创造了这个小游戏"基于一个小的介绍youtube系列大约一年前,我最近发现了我的旧程序,并想知道如何扩展它。我的一个想法是,有一个名为" badcube"如果玩家要触摸它,它会重置游戏/分数。我想知道如何设置它以便每5分左右它为坏立方体添加一个相同的变量,使游戏更难。

编辑/更新:所以我根据Jared Bledsoe的回应添加了一些行, 我添加了变量var cubebadary = [];并添加了if语句:if (score % 5 == 0){cubebadary.push(new cubebad());}我添加了这个,因为您将在功能更新下的已发布代码中添加。但当我尝试通过一个简单的html页面运行它时,我检查控制台,它出现错误:
image of error 这是什么意思,我该怎么做/修复这个?
该计划:

var canvas = document.getElementById("maincanvas");
var context = canvas.getContext("2d");
var keys = [];
var width = 1920,
height = 1080,
speed = 10;
var score = 0;
var player = {
  x: 10,
  y: 10,
  width: 20,
  height: 20
};
var cubegood = {
  x: Math.random() * (width - 10),
  y: Math.random() * (height - 10),
  width: 10,
  height: 10
};
var cubebad = {
  x: Math.random() * (width - 20),
  y: Math.random() * (height - 20),
  width: 20,
  height: 20
};
var cubebadary= [];
window.addEventListener("keydown", function(e) {
  keys[e.keyCode] = true;
}, false);
window.addEventListener("keyup", function(e) {
  delete keys[e.keyCode];
}, false);
/*
up - 38
down - 40
left - 37
right - 39
*/
function game() {
  update();
  render();
}
function update() {
  if (keys[38]) player.y -= speed;
  if (keys[40]) player.y += speed;
  if (keys[37]) player.x -= speed;
  if (keys[39]) player.x += speed;
  if (player.x < 0) player.x = 0;
  if (player.x >= width - player.width) player.x = width - player.width;
  if (player.y < 0) player.y = 0;
  if (player.y >= height - player.height) player.y = height - player.height;
  if (collision(player, cubegood)) processgood();
  if (collision(player, cubebad)) processbad();
  if (score & 5 == 0)
  {
       cubebadary.push(new cubebad());
  }
}
function render() {
  context.clearRect(0, 0, width, height)
  context.fillStyle = "blue";
  context.fillRect(player.x, player.y, player.width, player.height);
  context.fillStyle = "red";
  context.fillRect(cubegood.x, cubegood.y, cubegood.width, cubegood.height);
  context.fillStyle = "black"
  context.fillRect(cubebad.x, cubebad.y, cubebad.width, cubebad.height);  
  context.font = "bold 30px helvetica";
  context.fillText(score, 30, 30);
}
function processgood(){
  score++;
  cubegood.x = Math.random() * (width-10);
  cubegood.y = Math.random() * (height-10);
}
function processbad(){
  location.reload(true);
}
function collision(first, second) {
  return !(first.x > second.x + second.width || 
           first.x + first.width < second.x || 
           first.y > second.y + second.height || 
           first.y + first.height < second.y);
}
setInterval(function() {
  game();
}, 1000 / 30);

1 个答案:

答案 0 :(得分:0)

首先,你需要一个数组来存储所有新敌人。

var enemies = [];

然后,当你想要创造一个新的敌人时:

enemies.push(new cubebad());

要在工作演示中查看此内容,请随时访问我正在处理的项目,该项目恰好可以处理大量敌人(小行星) - http://asteroidio.bitballoon.com/

从该游戏的第333行开始,您可以看到我所拥有的Asteroid对象,它可以作为创建所有小行星的模板。然后,一旦游戏开始我使用:

for (let i=0; i<foodValue; i++) {
    asteroids[i] = new Asteroids;
} 

创建了几百个小行星,并将它们放入一个数组中。