Я делаю игру на Javascript с использованием HTML5 canvas API и наткнулся на контрольно-пропускной пункт.
Одним из игровых эффектов является ракета, движущаяся вверх вдоль оси y, на которую влияют порывы ветра (испускаемые турбинами), которые перемещают ее вдоль оси x. У меня не было проблем с изготовлением одной из этих турбин, но когда их число увеличилось до 3, я столкнулся с проблемой.
На новом уровне я создаю эти турбины как объекты, которые затем помещаются в массив, как можно увидеть здесь:
function gameStateNewLevel(){
for (var i = 0; i < 2; i++){
turbine = {};
turbine.width = 10;
turbine.height = Math.floor(Math.random()*200); //turbine height
turbine.y = Math.floor(Math.random()*600) //turbine y-axis
if (Math.random()*10 > 5){ //indicates turbine side of canvas
turbine.side = leftSide;
}else{
turbine.side = rightSide;
}
if(turbine.height <= 100){ //Increases turb. size if it's too small
turbine.height += Math.floor(Math.random()*100);
}
turbines.push(turbine);
}
context.fillStyle = "#FFFFFF"
switchGameState(GAME_STATE_PLAYER_START);
}
Теперь, прежде чем они будут отрисованы, они также обновляются с помощью функции updateTurbine. Все, что должна делать эта функция, - это убедиться, что турбины не перекрывают друг друга, и перемещать их вверх или вниз по оси y по мере необходимости (путем циклического перемещения по массиву и сравнения каждого из объектов в нем). Я сделал попытку сделать функцию, но я полностью потерян между всеми циклами. Это примерно столько, сколько у меня есть, и у меня такое ощущение, что я на неправильном пути:
function updateTurbines(){
tempTurbine = {}
turbinePositionTop = tempTurbine.y;
turbinePositionBottom = tempTurbine.y + tempTurbine.height;
for (var i = turbineArrayLength; i < 2; i++){
tempTurbine = turbines[i];
for (var i = turbineArrayLength; i < 2; i++){
if (tempTurbine !== tempTurbines[i]){
while (){
}
}
}
}
}
На сайте www.techgoldmine.com
вы можете найти исходный код и самое дальнее, что у меня получилось без взлома этой вещи.