2013-06-23 4 views
-1

У меня есть класс Elevator, который используется для объектов, и я помещаю их в массив. Однако моя функция Prepare, которая очищает холст, работает для всего остального на экране, за исключением этого объекта. Я попытался перемещаться по функциям перезаписи и где я их называю, но ничего не исправляет, и я не вижу, что другие затронуты, если этот объект не является?Canvas redraw not working

нажмите и посмотреть, что я имею в виду: http://www.taffatech.com/Platformer.html

function drawElevators() 
{ 

for (var i=0;i<Elevators.length;i++) 
{ 

Elevators[i].y--; 
ctx.fillStyle = "grey"; 
ctx.fillRect(Elevators[i].x,Elevators[i].y,Elevators[i].width,Elevators[i].height); 


} 


} 

Мой цикл:

function Loop(){ 

Prepare(); 
movePlayer(); 

if(level == 1) 
{ 
Level1(); 
} 

else if(level == 2) 
{ 
Level2(); 
} 

else if (Level ==3) 
{ 
Level3(); 
} 

else 
{ 
Level4; 
} 


if(ElevatorOn == true) 
    { 
    drawElevators(); 
    } 

checkCol(); 
drawPlayer(); 



requestAnimFrame(Loop); 
} 

ответ

2

У вас есть слишком много лифтов, которые все близко друг к другу, и они порождают бесконечно. Функция Prepare() работает и не виновата здесь.

Попробуйте добавить это ограничить количество лифтов:

function Level1() 
{ 
    ... 
    var Ele1 = new Elevator(canvasWidth - (canvasWidth - 90),canvasHeight - 50,40,20); 
    if(Elevators.length<2){ 
     Elevators.push(Ele1); 
    .... 
} 
+0

Но я только создал один объект лифта, так что, если я хотел более чем 1 лифт на уровень? Как я могу сделать так, чтобы объект просто повышался (y--), а затем перерисовывал объект? –

+0

Вы уже перерисовываете объект. Но они двигаются слишком медленно, поэтому все они склеиваются. Попробуйте сделать их быстрее: 'y- = 50' или отделить их, например, различные начальные координаты x. – simonzack

+0

Сделать увеличение больше не будет, проблема заключается в том, чтобы не очистить последний из себя. То что не так. Как игрок движется так, почему Wont The Elevator :) –