我有一个游戏循环,每秒在以下条件下刷新〜20次,这是在功能growPlayerBlockCounterWinner()内部:
if (obstacleArray[i][2] > canvas.height) {player.size += 5;}
这意味着:如果黑色物体超出了画布区域,则播放器大小将增加5个像素。
该功能通常执行一次,但是由于将其置于游戏循环中,因此每次刷新游戏时都会执行,因此玩家不断成长。
以前我用符号'='代替od'>',但是当黑色块逐像素移动并且我希望它们移动得更快时,这种方法效果很好。
您可以在远程服务器上检查问题和完整代码:https://stacho163.000webhostapp.com/firstLevel.html
下面,我仅粘贴我的障碍物功能:
// js game script //
let obstacle = {
size: 0,
posX: 0,
posY: 0,
speed: 0
}
let obstacleArray = new Array(100);
function generateObstacle() {
for (i = 0; i < obstacleArray.length; i++) {
obstacle.size = Math.round((Math.random() * 100) + 50);
obstacle.posX = Math.round((Math.random() * (canvas.width -
obstacle.size)));
obstacle.posY = -450 - (i * 100);
obstacle.speed = 5;
obstacleArray[i] = [obstacle.size, obstacle.posX, obstacle.posY,
obstacle.speed];
}
}
function drawObstacle() {
for (i = 0; i < obstacleArray.length; i++) {
ctx.fillStyle = "#000";
ctx.fillRect(obstacleArray[i][1], obstacleArray[i][2],
obstacleArray[i][0], obstacleArray[i][0]);
obstacleArray[i][2] += obstacleArray[i][3];
}
}
function growPlayerBlockCounterWinner() {
for (i = 0; i < obstacleArray.length; i++) {
// grow player
if (obstacleArray[i][2] > canvas.height) {
player.size += 5;
}
}
}
generateObstacle();
function game() {
drawObstacle();
growPlayerBlockCounterWinner();
requestAnimationFrame(game);
}
requestAnimationFrame(game);
我正在寻找意见,也许我关于该陈述的逻辑不正确,或者我应该将该陈述放在其他地方。
感谢您的提示:)
答案 0 :(得分:1)
由于您有定义数量的黑匣子,因此您可以存储播放器已经为之增加尺寸的黑匣子,如下所示:
let obstacle = {...};
var affectedBlackBoxes = {};
//...//
function growPlayerBlockCounterWinner() {
for (i = 0; i < obstacleArray.length; i++) {
// grow player
if (obstacleArray[i][2] > canvas.height && !affectedBlackBoxes[i]) {
player.size += 5;
affectedBlackBoxes[i] = true;
}
}
}