Я создаю игру, используя HTML5 canvas.
Вы можете найти его здесь вместе с исходным кодом: 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;
}
}
Любые идеи или просьбы о дополнительных объяснениях и информации приветствуются. У меня также есть чувство, что я слишком сильно усложняю это. Черт, моя голова болит. Будьте здоровы.