我正在开发Canvas API游戏,我想创建一些敌人,每次我创建一个新的敌人实例,我希望它在新的位置创建(不是随机的,而是3个特定的位置。
所以,让我说我有这个功能:
var enemy = new Enemy(0, Math.random() * 184 + 50, Math.random() * 256);
这会产生一个新的敌人,其Y位置为0,X位置是随机的,而Speed参数也是随机的。
这样可以正常运行,但我希望只在3个特定的位置创建敌人,并且每次创建新的敌人实例时,速度只会增加10倍。
更多信息:一旦玩家进入获胜的最终位置,就会召唤新的敌人,如下所示:
var increaseDifficulty = function(numEnemies) {
// remove all previous enemies on canvas
allEnemies.length = 0;
// load new set of enemies
for (var i = 0; i <= numEnemies; i++) {
var enemy = new Enemy(0, Math.random() * 184 + 50, Math.random() * 256);
allEnemies.push(enemy);
}
};
我想要的是每次创造一个具有不同参数的新敌人的方法。仅限于位置和速度。
类似的东西:
var enemy = new Enemy(0, 1, 1);
第二次被叫它时会有所不同:
var enemy = new Enemy(0, 3, 2);
当然,价值不会是1,2和3,但你明白了。
更新:
新敌人呼吁:
var Enemy = function(x, y, speed) {
this.x = x;
this.y = y;
this.speed = speed;
this.sprite = 'images/enemy-bug.png';
};
Enemy.prototype.update = function(dt) {
this.x += this.speed * dt;
if (this.x >= 505) {
this.x = 0;
}
checkCollision(this);
};
Enemy.prototype.render = function() {
ctx.drawImage(Resources.get(this.sprite), this.x, this.y);
};
答案 0 :(得分:1)
speed
始终为0,因此无法将其传递给构造函数,X
具有一些起始值,然后总是增加10,因此也没有任何一点传递它。 X
是唯一随机的东西,并且有一点将它传递给构造函数,但我也不会这样做。我将创建一个可能值const xValues = [20, 60, 100];
//The Enemy "class":
function Enemy() {
this.y = 0;
this.x = xValues[Math.floor(Math.random() * xValues.length)];
Enemy.speed = (Enemy.speed += 10) || 10;
this.speed = Enemy.speed;
this.sprite = 'images/enemy-bug.png';
}
let e1 = new Enemy;
console.log(e1);
let e2 = new Enemy;
console.log(e2);
let e3 = new Enemy;
console.log(e3);
的数组,并在构造函数中随机选择其中一个。
Math.floor(Math.random() * xValues.length)
&#13;
注1: Math.floor
创建一个随机的整数(感谢xValues
)数字介于0和{{1}之间的长度数组。此数字用于从xValues
数组中选择随机值。
注意2:在这一行上,我创建类似于类变量Enemy.speed
的东西,起始值为10.起初Enemy.speed
不存在{{1} }评估为Enemy.speed += 10
,因为NaN
是假的,评估会继续NaN
;
10
然后我将值复制到实例。
Enemy.speed = (Enemy.speed += 10) || 10;
答案 1 :(得分:0)
我不知道整个项目,所以这只是示例/草稿:</ p>
const createEnemiesFactory = pos => {
let lastPos = -1;
let lastSpeed = 0;
return () => {
lastPos = (lastPos + 1) % pos.length;
lastSpeed += 10;
return new Enemy(pos[lastPos].x, pos[lastPos].y, lastSpeed);
};
};
let enemiesFactory = createEnemiesFactory([
{x: 0, y: 0},
{x: 10, y: 10},
{x: 20, y: 20}
]);
var increaseDifficulty = function(numEnemies) {
// remove all previous enemies on canvas
allEnemies.length = 0;
// load new set of enemies
for (var i = 0; i <= numEnemies; i++) {
allEnemies.push( enemiesFactory() );
}
};
小注意:如果您需要重置难度(即重启时),显然会重新创建敌人工厂,因为没有其他方法可以重置lastSpeed
。