更新:我想告诉你我已经解决了这个问题,如果不一定回答我自己的问题。我没有尝试定位推送阵列的元素,而是这样做:
在
var ground=[], water=[], enemies=[], environment=[];
我添加了
tokens=[];
到最后。
然后我写了一个新函数updateTokens:
function updateTokens() {
for (var i = 0; i < tokens.length; i++) {
tokens[i].update();
tokens[i].draw();
if (player.minDist(tokens[i]) <= player.width - platformWidth / 2) {
gameOver();
}
}
if (tokens[0] && tokens[0].x < - platformWidth) {
tokens.splice(0, 1);
}
}
(&#39; gameOver();&#39;功能仅用于测试目的)。 然后我添加了&#39; spawnTokensSprites();&#39;到spawnSprites();功能。 接下来,我为spawnTokensSprites编写了一个新函数:
function spawnTokensSprites() {
if (score > 0 && rand(0, 20) === 0 && platformHeight < 3 {
if (Math.random() > 0.5) {
tokens.push(new Sprite(
canvas.width + platformWidth % player.speed,
platformBase - platformHeight * platformSpacer - platformWidth,
'tokens'
));
}
}
}
然后我添加了&#39; updateTokens();&#39;到动画功能,最后,我添加了'tokens = []&#39;到了'startGame()&#39;功能。 就是这样。不是原始问题的答案,而是解决我遇到的问题的有效方法。我希望这可以帮助别人,这就是我更新帖子的原因。
---------------------------------------------------------
我在这里深受我的影响。我一直在关注this教程制作HTML5画布游戏。这很棒,而且我学到了很多东西,但我完全陷入困境。 我有精灵的矢量
function Sprite(x, y, type) {
this.x = x;
this.y = y;
this.width = platformWidth;
this.height = platformWidth;
this.type = type;
Vector.call(this, x, y, 0, 0);
this.update = function () {
this.dx = -player.speed;
this.advance();
};
this.draw = function () {
ctx.save();
ctx.translate(0.5, 0.5);
ctx.drawImage(assetLoader.imgs[this.type], this.x, this.y);
ctx.restore();
};
}
Sprite.prototype = Object.create(Vector.prototype);
所有精灵都从中继承。生成&#39;令牌&#39;精灵,我用这个函数:
function spawnEnvironmentSprites() {
if (score > 0 && rand(0, 20) === 0 && platformHeight < 3) {
if (Math.random() > 0.5) {
environment.push(new Sprite(
canvas.width + platformWidth % player.speed,
platformBase - platformHeight * 2 * platformSpacer - platformWidth,
'tokens'
));
}
else if (platformLength > 2) {
environment.push(new Sprite(
canvas.width + platformWidth % player.speed,
platformBase - platformHeight * 1.5 * platformSpacer - platformWidth,
'tokens'
));
}
}
}
将精灵绘制到屏幕上。我不能做的是从阵列中取出这些类型的精灵用于碰撞检测。我试过使用“如果&#39;来自“更新敌人”的声明功能:
if (player.minDist(enemies[i]) <= player.width - platformWidth/2) {
gameOver();
}
}
在更新环境中&#39;功能,我替代敌人&#39;对于&#39;环境&#39;,但因为我不知道如何指定代币&#39;来自&#39; environment&#39;,使用此行不会导致任何环境精灵被绘制到画布,包括平台。今天早些时候,我试过包括“令牌”。在“敌人精灵”中,玩家碰撞的时候,gameOver()函数运行了,但我无法弄清楚如何给予“令牌”#39;不同的行为(即分数增加而不是gameOver)。我应该提一下,由于我使用过的assetLoader函数,精灵被称为这种方式。 长话短说,我怎么能与“令牌”碰撞?#39;还有其他一切行为应该如此吗? 提前致谢。 编辑:对不起,我忘了提到环境数组是在一个看起来像这样的变量中声明:
var ground = [], water = [], enemies = [], environment = [];
感谢。
更新:好的,我仍然没有对此进行整理,但我已做出改变,我认为这将使您更容易帮助我(!) 我删除了令牌&#39;来自&#39; spawnEnvironmentSprites()&#39;功能并添加条件给spawnEnemySprites&#39;那推动了令牌#39;这意味着他们现在拥有与我的其他敌人相同的行为。即.. gameOver()在碰撞检测时运行。我现在的问题是,我如何定位代币&#39;在这行代码中,我可以给那个碰撞不同的行为?我喜欢&#39;令牌&#39;精灵消失,分数增加,但我不知道如何只针对“令牌”#39;数组的一部分。处理碰撞的线是:
if (player.minDist(enemies[i]) <= player.width - platformWidth/2) {
gameOver();
}
}
你能帮忙吗?提前致谢。