【发布时间】:2012-02-14 03:28:53
【问题描述】:
我正在使用 HTML5 画布构建游戏。
您可以在这里找到它以及源代码:www.techgoldmine.com。
我会做一个 jsFiddle,但老实说,我的注意力太短(而且我自己大多太愚蠢),无法了解它是如何工作的。
我目前被困在一个函数上,它查看画布两侧某些元素的位置并移动它们,以使它们覆盖的 y 轴区域不重叠。我称它们为涡轮机,但细长的白色矩形会更准确。我建议刷新几次以直观地了解发生了什么。
这是生成涡轮机的函数:
function gameStateNewLevel(){
for (var i = 0; i < 4; i++){
turbine = {};
turbine.width = 10;
turbine.height = 150;
turbine.y = Math.floor(Math.random()*600)
if (Math.random()*10 > 5){
turbine.side = leftSide;
}else{
turbine.side = rightSide;
}
turbine.render = function (){
context.fillStyle = "#FFFFFF"
context.fillRect(turbine.side, turbine.y, turbine.width,turbine.height);
}
turbine.PositionTop = turbine.y;
turbine.PositionBottom = turbine.y + turbine.height;
turbines.push(turbine);
}
context.fillStyle = "#FFFFFF"
switchGameState(GAME_STATE_PLAYER_START);
}
到目前为止,我已经(在你们这些好人的帮助下)构建了一个函数(它是循环的一部分),可以挑选出每个涡轮机,并开始将它们相互比较。在理解如何让它们在需要时移动和停止时,我完全被难住了:
function updateTurbines(){
var l = turbines.length-1;
for (var i = 0; i < l; i++){
var tempTurbine1 = turbines[i];
tempTurbine1.PositionTop = tempTurbine1.y;
tempTurbine1.PositionBottom = tempTurbine1.y + tempTurbine1.height;
for (var j = 0; j < l; j++) {
var tempTurbine2 = turbines[j];
tempTurbine2.PositionTop = tempTurbine2.y;
tempTurbine2.PositionBottom = tempTurbine2.y + tempTurbine2.height;
if ((tempTurbine1 !== tempTurbine2) && FIXME == true){
if(tempTurbine1.PositionBottom >= tempTurbine2.PositionTop){
turbines[j].y -=2;
//A while loop breaks the browser :(
}
}
}FIXME = false;
}
}
非常欢迎任何想法或要求提供更多解释和信息。我也有一种感觉,我把这件事复杂化了。妈的,我的头好痛。祝福你。
【问题讨论】:
-
我不太确定你的问题是什么。我只能看到那些“涡轮”升起然后从屏幕流出,有时涡轮会留在屏幕上。我不知道您所说的重叠是什么意思;你能详细说明一下吗?
-
当然,我在描述中添加了一个生成涡轮机的函数。它们在 y 轴上的位置是自动确定的,我需要确保在玩家开始播放时它们不会相互重叠。
标签: javascript loops html5-canvas