[iuud8]cocos2dx3.2項目捕捉android的返回鍵

</pre>最近一不小心就整天在搞android了。。。。。<p></p><p>然後各種磕磕絆絆的,</p><p>上午把項目捕捉到安卓手機的返回鍵事件給實現了下,具體如下:</p><p>安卓手機項目的退出有兩種方法:</p><p>1.雙擊返回鍵退出:</p><p></p><pre name="code" class="java">if (keyCode == KeyEvent.KEYCODE_BACK) {
	        if ((System.currentTimeMillis() - mkeyTime) > 2000) {
	            mkeyTime = System.currentTimeMillis();
	            Toast.makeText(this, "再按一次退出遊戲", Toast.LENGTH_LONG).show();
	        } else {
	            finish();
	            System.exit(0);
	        }
	        return false;
	    }
	    return super.onKeyDown(keyCode, event);
	}

2:通過彈出對話框選擇退出:

		public boolean onKeyDown(int keyCode, KeyEvent event) {  
	        if (keyCode == KeyEvent.KEYCODE_BACK) {  
	            dialog();  
	            return true;  
	        }  
	        return true;  
	    }  
		
		protected void dialog() {  
	        AlertDialog.Builder builder = new AlertDialog.Builder(this);  
	        builder.setMessage("確定要退出嗎?");  
	        builder.setTitle("提示");  
	        builder.setPositiveButton("確認",  
	        new android.content.DialogInterface.OnClickListener() {  
	            @Override  
	            public void onClick(DialogInterface dialog, int which) {  
	                dialog.dismiss();  
	                //AccoutList.this.finish();  
	                //System.exit(1);  
	                android.os.Process.killProcess(android.os.Process.myPid());  
	            }  
	        });  
	        builder.setNegativeButton("取消",  
	        new android.content.DialogInterface.OnClickListener() {  
	            @Override  
	            public void onClick(DialogInterface dialog, int which) {  
	                dialog.dismiss();  
	            }  
	        });  
	        builder.create().show();  
	    }

兩種方法任選一個即可,把它加入到這個類中:

但是,僅僅做這些,會發現返回鍵還是不可用!

通過查找官方api,會發現

public boolean onKeyDown(int keyCode, KeyEvent event) 
這個函數會在用戶按下某個按鍵時候調用,但前提是這個事件沒有被監聽處理!!

因此,返回鍵不可用,是因爲在cocosdx中,已經對安卓進行了返回鍵的監聽處理。

在eclipse中,打開:cocos2d/cocos/platform/android/java/src/org/cpcps2dx/lib/Cocos2dxGLSurfaceView.java

找到這個函數:

	public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) {
		switch (pKeyCode) {
			case KeyEvent.KEYCODE_BACK:
				Cocos2dxVideoHelper.mVideoHandler.sendEmptyMessage(Cocos2dxVideoHelper.KeyEventBack);
			case KeyEvent.KEYCODE_MENU:
			case KeyEvent.KEYCODE_DPAD_LEFT:
			case KeyEvent.KEYCODE_DPAD_RIGHT:
			case KeyEvent.KEYCODE_DPAD_UP:
			case KeyEvent.KEYCODE_DPAD_DOWN:
			case KeyEvent.KEYCODE_ENTER:
			case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
			case KeyEvent.KEYCODE_DPAD_CENTER:
				this.queueEvent(new Runnable() {
					@Override
					public void run() {
						Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleKeyDown(pKeyCode);
					}
				});
				return true;
			default:
				return super.onKeyDown(pKeyCode, pKeyEvent);
		}
	}

case KeyEvent.KEYCODE_BACK:
				Cocos2dxVideoHelper.mVideoHandler.sendEmptyMessage(Cocos2dxVideoHelper.KeyEventBack);
修改爲:

case KeyEvent.KEYCODE_BACK:
				return false;
這樣,自己寫的安卓返回鍵監聽就可以使用了。


發佈了24 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章