2013-12-15 44 views
0

我正在嘗試爲一個「小遊戲」測試做一個多鍵新聞組合驗證。 基本上是一個真人快打的角色,我用ASDW鍵移動......但是如果我想在同一時間(例如S + K)進行鴨子和阻擋,會發生什麼情況。我不能使它工作:S如何在jquery/javascript中處理多鍵遊戲的遊戲目的?

現在...不僅如此,如果我只按S,它會鴨。然後我按下K(同時保持S推)它應該阻止而躲避。如果我釋放K,它應該繼續躲避。這一個可能嗎?

如何處理例如在JavaScript中做技能的組合? 如果我按S-> D-> Punch會做一個技巧(不是同時按下一個序列)

是否有任何可能的方法來做到這一點?

這是我的一個簡單的HTML內整個代碼,所以你完全可以看到它:

PS:看在預置圖像部分的評論,我的意思是,動畫不連貫,同時試圖將字符從移動一種方式到另一種......爲什麼是這樣?我究竟做錯了什麼?

<! DOCTYPE html> 
<html> 
<head> 
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
    <style> 
    #reptile_wrapper { 
     top: 120px; 
     left: 140px; 
     position:relative; 
    } 

    #container { 
     margin-top: 240px; 
     margin-left: 470px; 
     width: 890px; 
     height: 301px; /* entire one 547px */ 
     background: url("img/bgs/pit_background.png") no-repeat; 
     background-size: 100%; 
    } 

    #pit { 
     top: 0px; 
     position: relative; 
     width: 890px; 
     height: 300px; 
     background: url("img/bgs/pit.png") no-repeat; 
     background-size: 100%; 
    } 

    #pit_chain { 
     position: absolute; 
     width: 150px; 
     height: 340px; 
     background: url("img/bgs/pit_chains.png") no-repeat; 
     margin-left: 695; 
    } 

    </style> 
</head> 
<body> 

<audio src="sounds/mk3thepit.mp3" preload="auto" loop="true" autoplay="true" autobuffer></audio> 
<div id="pit_chain"> 
</div> 
<div id="container"> 
    <div id="pit"> 
    <div id="reptile_wrapper"> 
     <img src="img/reptile_idle.gif"/> 
    </div> 
    </div> 
</div> 

<script> 

    /* Preload all the images and gifs */ 
    function preloadImages(srcs, imgs, callback) { 
    var img; 
    var remaining = srcs.length; 
    for (var i = 0; i < srcs.length; i++) { 
     img = new Image(); 
     img.onload = function() { 
     --remaining; 
     if (remaining <= 0) { 
      callback(); 
     } 
     }; 
     img.src = srcs[i]; 
     imgs.push(img); 
    } 
    } 

    // then to call it, you would use this 
    var imageSrcs = ["img", "img/bgs"]; 
    var images = []; 

    preloadImages(imageSrcs, images, startGame()); 
    /* End of preloading images and gifs */ 

    var duckImages = ["d01", "d02"]; 
    var defaultY = '120px'; 

    reptileIdleAnimation(); 

    function startGame() { 
    var keys = []; 
    window.addEventListener("keydown", 
    function(e){ 
     keys[e.keyCode] = e.keyCode; 
     var keysArray = getNumberArray(keys); 

     if(keysArray.toString() == "68"){ 
     $("#reptile_wrapper img").attr('src', 'img/reptile_walk_forward.gif') 
     .parent().css({left: '+=5px'}); 
     }else if(keysArray.toString() == "17,65"){ 
     // document.body.innerHTML += " Select all!" 
     } 
    }, 
    false); 

    window.addEventListener('keyup', 
    function(e){ 
     keys[e.keyCode] = false; 
     reptileIdleAnimation(); 
    }, 
    false); 

    function getNumberArray(arr){ 
     var newArr = new Array(); 
     for(var i = 0; i < arr.length; i++){ 
     if(typeof arr[i] == "number"){ 
      newArr[newArr.length] = arr[i]; 
     } 
     } 
     return newArr; 
    } 
    } 
</script> 
</body> 
</html> 

感謝。

+0

聲音對我來說是可能的,一些鍵盤會限制同時按下按鈕的數量,但兩個在大多數現代鍵盤上都不應該是問題,但是沒有任何代碼,我們應該怎麼知道問題是什麼? – adeneo

+0

請向我們展示如何捕捉按鍵。包括你的JS代碼。 – SquareCat

+0

@SquareCat發佈了我的所有代碼,另請參閱圖像預加載哪個不工作,我應該在我的代碼中使用這些img.src? :(但如何? – user3078876

回答

1

您不一定需要依靠jQuery捕獲密鑰。

Here is a plain javascript solution

var keys = []; 
document.body.innerHTML = "Keys currently pressed: " 
window.addEventListener("keydown", 
    function(e){ 
    keys[e.keyCode] = e.keyCode; 
    var keysArray = getNumberArray(keys); 
    document.body.innerHTML = "Keys currently pressed:" + keysArray; 
    if(keysArray.toString() == "17,65"){ 
     document.body.innerHTML += " Select all!" 
    } 
    }, 
    false); 

window.addEventListener('keyup', 
    function(e){ 
    keys[e.keyCode] = false; 
    document.body.innerHTML = "Keys currently pressed: " + getNumberArray(keys); 
    }, 
    false); 

function getNumberArray(arr){ 
    var newArr = new Array(); 
    for(var i = 0; i < arr.length; i++){ 
    if(typeof arr[i] == "number"){ 
     newArr[newArr.length] = arr[i]; 
    } 
    } 
    return newArr; 
} 

正如你所看到的,同時檢測多個按鍵和釋放是沒有問題的,在技術上。

我認爲這裏唯一的瀏覽器元兇(對於普通的JS)是e.keyCode。如果你想使用jQuery,你可以重寫監聽器定義,以便他們使用jQuery。

In this question i asked for a proper but plain image preloader

查看提供的答案;您可以使用此代碼正確處理預加載。

希望有幫助!

+0

讓我看看:)如果我想做一個按鈕序列?我需要使用setTimeout函數或任何東西?就像「如果你在不到1秒的時間內按A,D,F,G,那麼我會扔出一個技巧?會是這樣的嗎? – user3078876

+0

嘿廣場,它的作品,但動畫的GIF變得不穩定,爲什麼那麼?:(試着用你給我的預加載器來試試吧 – user3078876

+0

不要:(試着用preloader和它一起使用它,但是動畫仍然不穩定,代碼更新,所以你可以看到它的外觀 – user3078876