众所周知,当今大部分智能手机是没有物理键盘的,在使用cocos开发Android应用时,自然也就不会去注意不必要的键值的注册。然而有些时候,我们需要游戏具有高精度的操控体验,就会用到键盘。然而当我们在PC平台上敲好了KEY_W/A/S/D时,却发现这些键在Android平台上无法使用,这就很尴尬了。
经过个人探索,我发现发生这种情况主要是由两方面引起的:
一,PC键盘上的键值不能够和Android手机外接键盘后对应的键值相对应。
二,Android设备并不知道我们需要它监控那些键,即外接键盘上的按键是没有在应用中进行注册的。
知道了这两个原因,我们就能比较明确地找到问题的解决办法。
首先是PC和Android的沟通。打开cocos2d\cocos\platform\android\jni\TouchesJni.cpp文件。通过文件夹名和文件名我们可以知道这个文件是关于Android设备人机交互的(大概),我们会看到这样的东西。
我们可以推测这是一个类似于两个平台沟通键值的地方,前者是Android平台对应的键值(实际上KEYCODE_**正是awt下KeyEvent中KeyCode的表达方式),在java中我们可以打印这些键值,发现KEYCODE_BACK的键值恰好是0x04。同时,在方法体中的后者又恰好是我们在Visual Studio中使用的键值名称。了解了这一点后要解决这一问题并不难,更改后如下:
这样就解决了PC和Android键值交接的任务。
第二个问题则是将我们要使用的键在应用中进行简单的注册。打开cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxGLSurfaceView.java可以找到很显眼的两个方法:
这几个是已经注册的键,所以我们需要再添加几个要使用的键进去,如下:
当然为了防止会出现各种问题我们最好在onKeyDown和onKeyUp方法中同时添加需要的键。
至此,Android平台可以正常使用外接键盘操纵游戏。
需要注意到第二个问题修改的的.java文件是不会在编译时自动更改的,所以需要到eclipse或Android studio下找到相应的文件进行修改。
有问题请扫码qq群: