如何运行一个对象的多个实例

时间:2018-02-19 18:59:41

标签: javascript oop html5-canvas

我是OOP Javascript的新手,我正在尝试通过构建游戏来学习。在游戏中,你基本上是一个正方形,其他正方形从右边射向你。听起来很容易。你可以通过向上或向下移动来避免它们,如果它们触碰你,你就会死亡。我已经制作了一个Player对象:

function Player() {
this.color = "#0f0";
this.posx = canvas.width / 5;
this.posy = canvas.height / 2;
this.width = canvas.width / 23;
this.height = this.width;
this.jetpack = false;
this.speed = 7;

this.draw = function() {
    context.fillStyle = this.color;
    context.fillRect(this.posx, this.posy, this.width, this.height);
}

this.fly = function() {
    if (this.jetpack == true) {
        this.posy -= this.speed;
    } else {
        this.posy += this.speed * 1.5;
    }

    if (this.posy >= canvas.height - this.height) {
        this.posy = canvas.height - this.height;
    }

    if (this.posy <= 0) {
        this.posy = 0;
    }
}
}

然后我可以用

来定义它
var player = new Player();

这很好用。

我有一个主要功能,基本上是一个间隔,每秒运行30次,重复以下代码:

context.fillStyle = "#000";
context.fillRect(0, 0, canvas.width, canvas.height);

player.draw();
player.fly();

这会吸引玩家并让你移动它就好了。 问题来自敌人。我将Enemy对象定义为:

function Enemy(posy) {
this.color = "#f00";
this.posy = posy;
this.posx = canvas.width;
this.width = canvas.width / 23;
this.height = this.width;
this.speed = 5;

this.draw = function() {
    context.fillStyle = this.color;
    context.fillRect(this.posx, this.posy, this.width, this.height);
}

this.move = function() {
    this.posx -= this.speed;
}
}

但我不知道如何恰当地召唤它。目标是它每隔一秒左右产生一个新的,它们都会移动。我不知道该怎么做..在网上很难找到帮助,因为我甚至不知道它是如何调用的,因此,我不确定我应该搜索什么以及如何正确地表达我的想法。我希望这很清楚......

1 个答案:

答案 0 :(得分:1)

首先,你将创造一个与玩家相同的敌人:

const enemy = new Enemy(123); // change 123 to a random value

你要做的就是在创建它们时将这些敌人放入阵列中:

// make sure this is in an appropriate place to maintain proper context
// probably the same level you define your player variable
const enemies = []; 

function addEnemy() {
  enemies.push(new Enemy(Math.random() * screenHeight)); // screenHeight will be whatever the max height for them to spawn is.
}

然后,这将让您遍历该函数并将它们全部移动:

enemies.forEach(enemy => enemy.move());

在某些时候,你还需要移除敌人(当他们击中某些东西或离开屏幕时),你将要使用splice()

enemies.splice(indexOfEnemyToRemove, 1);