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定时器触发的。