2012-08-01 54 views
10

我想使用konami代码实现它,我已经在我的网站上成功地使用了它。我只是无法让它与skifree一起工作。 对于快速参考,下面是KONAMI代码:添加skifree作为复活节彩蛋时遇到问题

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 
    } 
}); 

下面是skifree的代码,因为从这个网站拉: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取代的

setTimeout("runSki();"

两个实例。这太棒了。你是什​​么意思“不起作用?”你能给我们一个jsfiddle吗? – SomeKittens 2012-08-01 12:49:16

+0

@setTimeout:传递一个函数,而不是一个字符串。 1ms太短,[不跨浏览器安全](http://stackoverflow.com/q/9647215/1048572) - 速度会有所不同。 – Bergi 2012-08-01 13:14:51

+0

但是.. SkiFree是用C编写的。 – user3155368 2017-01-05 22:59:20

回答

3

不能肯定这一点,但您复制的代码看起来错误的;看到这里:

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

您是否已经从html复制?该> & <字符不应该逃脱:)

编辑

还记得更新你的图像路径:d

编辑

我得到这个在这方面努力页。刚添加的<canvas/>元件,裹滑雪的javascript在一个函数调用setupSki(其由KONAMI功能调用),并用

setTimeout(runSki

+0

我更新了图像路径,但它仍然不起作用。我的意思是整个游戏没有出现在任何地方。我也尝试创建一个新页面,只是做一个测试,然后用skifree粘贴网页的所有源代码,但即使如此,游戏也不会显示=/ – user1568624 2012-08-01 13:08:32

+0

您是否复制了canvas元素?是否有任何JavaScript错误(如'runSki未定义')? – lnrbob 2012-08-01 13:15:28

相关问题