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定時器觸發的。