2012-08-01 46 views
10

Tôi muốn triển khai nó bằng mã konami mà tôi đã sử dụng thành công trên trang web của mình. Tôi chỉ không thể làm cho nó hoạt động với skifree. Để tham khảo nhanh, Đây là mã Konami:Gặp sự cố khi thêm skifree làm trứng Phục sinh

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

Dưới đây là các mã cho skifree, như kéo từ trang web này: 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. Điều này thật tuyệt. Bạn có ý nghĩa gì bởi "không hoạt động?" Bạn có thể cho chúng tôi một jsfiddle không? – SomeKittens

+0

@setTimeout: chuyển một hàm, không phải chuỗi. Và 1ms quá ngắn và [không an toàn giữa các trình duyệt] (http://stackoverflow.com/q/9647215/1048572) - tốc độ sẽ thay đổi. – Bergi

+0

Nhưng .. SkiFree được viết bằng C. – user3155368

Trả lời

3

Không chắc chắn về điều này nhưng mã được sao chép của bạn trông sai; xem tại đây:

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

Bạn đã sao chép từ html này chưa? Các > & < nhân vật không nên được thoát :)

EDIT

Cũng nên nhớ để cập nhật đường dẫn hình ảnh của bạn: D

EDIT

Tôi có này để làm việc về vấn đề này trang. Chỉ cần thêm các yếu tố <canvas/>, bọc trượt tuyết javascript trong một chức năng gọi là setupSki (được gọi bởi hàm Konami) và thay thế cả hai trường hợp của

setTimeout("runSki();"

với

setTimeout(runSki

+0

Tôi đã cập nhật đường dẫn hình ảnh nhưng vẫn không hoạt động. Những gì tôi có nghĩa là bởi vì toàn bộ trò chơi chỉ là không hiển thị bất cứ nơi nào. Tôi cũng đã thử tạo một trang mới, chỉ để thực hiện kiểm tra và dán toàn bộ mã nguồn của trang web bằng skifree, nhưng ngay cả khi đó trò chơi sẽ không hiển thị =/ – user1568624

+0

Bạn đã sao chép phần tử canvas chưa? Có bất kỳ lỗi javascript nào (như 'runSki không được định nghĩa') không? – lnrbob

Các vấn đề liên quan