双人游戏开发中如何使用方向键作为输入并解决字符常量格式错误
问题原因
- 语法报错直接诱因:
'LEFT'属于非法字符常量写法,单引号仅支持包裹单个字符,LEFT/RIGHT/UP/DOWN是Processing预定义的整型特殊键码常量,不属于普通可打印字符,既不能用单引号包裹,也无法存储到char类型变量中。 - 原有逻辑缺陷:当前按键监听逻辑仅处理了普通字符类按键,没有适配方向键这类特殊编码按键。Processing中特殊按键触发时
key变量会被赋值为CODED,必须读取keyCode变量才能拿到正确的键值。
修复步骤
- 修改Player类中所有按键属性、
checkforInputs方法入参的类型,从char改为int。普通可打印字符的ASCII码可无缝兼容int类型,原有普通按键的逻辑无需额外调整。 - 调整按键监听逻辑,兼容普通按键和特殊编码按键:
void keyPressed(){ int inputKey; if (key == CODED) { // 特殊编码按键取keyCode值 inputKey = keyCode; } else { // 普通按键转小写后转int inputKey = Character.toLowerCase(key); } for (Player p:g.players){ p.checkforInputs(inputKey); } }
- 调整
checkforInputs方法的入参类型:
// 入参从char改为int void checkforInputs(int k){ if(k == moveLeftKey){ // 原有移动逻辑保持不变 } // 其余按键判断逻辑无需调整 }
- 修改Player实例化的传参写法,方向键常量直接传入,不要加单引号:
// 方向键常量不需要加单引号,普通字符可直接传入会自动转为对应int值 players.add(new Player(LEFT, RIGHT, UP, DOWN, '<', '>', 'm'));
内容的提问来源于stack exchange,提问作者mijmajmoj
相关产品推荐
相关产品推荐

