JSNES連發和連跳

JSNES是javascript做的網頁版的nes模擬器,https://github.com/bfirsh/jsnes

JSNES沒有連跳和連發,不習慣,嘗試加了一下。

總體看來,正常遊戲機和遊戲原本不支持連跳和連發,需要手柄模擬連續點按A和B來實現。

然後修改keyboard.js,調試,原來鍵盤的J、K映射B和A,現在長按U模擬連續點按B,長按I模擬連續點按A,效果還好。

另外,看github上源碼有所不同了,大意當還是如此。

    keyDown: function(evt) {
    	var that = this;
    	//console.log("sekey " + evt.keyCode);
    	if (evt.keyCode == 85 || evt.keyCode == 73) { // 按鍵 U I,連發和連跳
    		var keyno;
    		if (evt.keyCode == 85)
    			keyno = this.keys.KEY_B;
    		else if (evt.keyCode == 73)
    			keyno = this.keys.KEY_A;
		   	setTimeout(function() {
				that.state1[keyno] = that.state1[keyno] != 0x41 ? 0x41 : 0x40;
			}, 100);
    		
    		if (evt.preventDefault) {
	            evt.preventDefault();
	        }
    		return;
    	}
        if (!this.setKey(evt.keyCode, 0x41) && evt.preventDefault) {
            evt.preventDefault();
        }
    },
    
    keyUp: function(evt) {
    	if (evt.keyCode == 85 || evt.keyCode == 73) { // 按鍵 U I,連發和連跳
    		if (evt.keyCode == 85)
    			this.setKey(74, 0x40); // KEY_B-J-74
    		else if (evt.keyCode == 73)
    			this.setKey(75, 0x40); // KEY_A-K-75
    		if (evt.preventDefault) {
	            evt.preventDefault();
	        }
    		return;
    	}
        if (!this.setKey(evt.keyCode, 0x40) && evt.preventDefault) {
            evt.preventDefault();
        }
    },
    

從手柄協議看,是必須順序讀A B SELECT START UP DOWN LEFT RIGHT的狀態,不會有讀連發連跳狀態。

見有修改手柄支持連發連跳,用555定時器觸發的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章