2012-08-01 13 views
10

Chcę go zaimplementować za pomocą kodu konami, który już z powodzeniem stosowałem na mojej stronie. Po prostu nie mogę pracować z skifree. Do szybkiego odniesienia Oto kod Konami:Masz problemy z dodawaniem skifree'a jako wielkanocnego jaja

var kkeys = [], konami = "38,38,40,40,37,39,37,39,66,65"; 
$(document).keydown(function(e) { 
kkeys.push(e.keyCode); 
if (kkeys.toString().indexOf(konami) >= 0){ 
$(document).unbind('keydown',arguments.callee); 
// Launch easter egg here 
    } 
}); 

Oto kod dla skifree, jak wyciągnął z tej strony: http://timelessname.com/canvas/skifree/

var left; 
    var right; 
    var faster = false; 

    var step = 0; 
    var obst = new Array(); 

    var locX = 430; 
    var locY = 100; 

    var running = true; 

    var guy = new Image(); 
    var guyLeft = new Image(); 
    var guyRight = new Image(); 
    var crash = new Image(); 
    var rock = new Image(); 
    var tree = new Image(); 
    var bush = new Image(); 
    guy.src = "http://timelessname.com/canvas/skifree/guy_down.png"; 
    guyLeft.src = "http://timelessname.com/canvas/skifree/guy_left.png"; 
    guyRight.src = "http://timelessname.com/canvas/skifree/guy_right.png"; 
    crash.src = "http://timelessname.com/canvas/skifree/crash.png"; 
    rock.src = "http://timelessname.com/canvas/skifree/rock.png"; 
    tree.src = "http://timelessname.com/canvas/skifree/tree.png"; 

    $(window).keydown(function(e){ 
     if(e.keyCode == 37){ 
      left = true; 
     } 
     else if(e.keyCode == 39){ 
      right = true; 
     } 
     else if(e.keyCode == 70){ 
      faster = true; 
     } 
    }); 
    $(window).keyup(function(e){ 
     if(e.keyCode == 37){ 
      left = false; 
     } 
     else if(e.keyCode == 39){ 
      right = false; 
     } 
     else if(e.keyCode == 70){ 
      faster = false; 
     } 
     else if(e.keyCode == 32){ 
      if(!running){ 
       step = 0; 
       obst = new Array(); 
       locX = 430; 
       locY = 100; 
       running = true; 
       runSki(); 
      } 
     } 
    }); 




    //TODO: wrap edges (no wall) 

    function runSki(){ 
     if(!running) return; 
     var canvas = document.getElementById("can"); 
     var ctx = canvas.getContext("2d"); 

     ctx.fillStyle = "rgb(255,255,255)"; 
     ctx.fillRect (0, 0, canvas.width, canvas.height); 


     if(left){ 
      if(locX > -320){ 
       locX--; 
      } 
     } 
     if(right){ 
      if(locX < 640+320){ 
       locX++; 
      } 
     } 

     ctx.fillStyle = "rgb(0,0,0)"; 

     ctx.fillRect (-10-locX, 0, 10, canvas.height); 
     ctx.fillRect (640*2+20-locX, 0, 10, canvas.height); 


     for(var i = 0; i < obst.length;i++){ 
      var o = obst[i]; 
      o.y-=2.5; 
      if(faster){ 
       o.y-=2.5; 
      } 
      ctx.drawImage(o.type,o.x-locX,o.y); 
      if(o.y < -30){ 
       obst.splice(i,1); 
       i--; 
      } 

      var tX = o.x-locX+5; 
      var tY = o.y+5; 

      var d = Math.sqrt((tX-320+3)*(tX-320+3)+ (tY-100+5)*(tY-100+5)); 
      if(d < 20){ 
       ctx.drawImage(crash,320,locY); 
       running = false; 
      } 
     } 
     if(running){ 
     if(left){ 
      ctx.drawImage(guyLeft,320,locY); 
     } 
     else if(right){ 
      ctx.drawImage(guyRight,320,locY); 
     } 
     else{ 
      ctx.drawImage(guy,320,locY); 
     } 
     } 

     var randomnumber=Math.floor(Math.random()*641) 
     if(Math.floor(step*10)%10==0){ 
      var type; 
      if(Math.floor(Math.random()*2) == 0){ 
       type = rock; 
      } 
      else{ 
       type = tree; 
      } 
      var obj = {x: Math.floor(Math.random()*641*2), y:480, type: type}; 
      obst.push(obj); 
     } 
     step+= 0.1; 
     if(running){ 
      setTimeout("runSki();",1); 
     } 
    } 
    setTimeout("runSki();",1000); 
+3

+1. To jest niesamowite. Co masz na myśli przez "nie działa?" Czy możesz dać nam jsfiddle? – SomeKittens

+0

@setTimeout: przekazuje funkcję, a nie ciąg znaków. I 1ms jest zbyt krótki i [nie jest bezpieczny w przeglądarkach] (http://stackoverflow.com/q/9647215/1048572) - prędkość będzie się różnić. – Bergi

+0

Ale .. SkiFree został napisany w C. – user3155368

Odpowiedz

3

Nie pewny tego, ale Twój skopiowany kod wygląda źle; zobacz tutaj:

if(left){ 
     if(locX > -320){ 
      locX--; 
     } 
    } 
    if(right){ 
     if(locX < 640+320){ 
      locX++; 
     } 
    } 

Skopiowałeś to z html? W > & < znaki nie powinny być uciekł :)

EDIT

Należy również pamiętać, aby zaktualizować ścieżki obrazu: D

EDIT

mam to nad tym pracować strona. Prostu dodany element <canvas/> owinięty nartę JavaScript w funkcji zwanej setupSki (który nazywany jest przez funkcję KONAMI) i jej obydwu przykładach

setTimeout("runSki();"

z

setTimeout(runSki

+0

Zaktualizowałem ścieżki obrazu, ale nadal nie działa. Mam na myśli to, że cała gra po prostu się nie pojawia. Próbowałem także utworzyć nową stronę, aby wykonać test i wkleić cały kod źródłowy strony bez nart, ale nawet wtedy gra się nie wyświetli =/ – user1568624

+0

Czy skopiowałeś element canvas? Czy są jakieś błędy javascript (jak "runSki nie jest zdefiniowany")? – lnrbob

Powiązane problemy