2012-12-04 1 views
5

Sto usando cocos2dx per fare un piccolo gioco e nell'attività del mio gioco ho le seguenti funzioni per gestire il pulsante indietro.Il pulsante indietro Android non funziona

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    return super.onKeyDown(keyCode, event); 
} 

@Override 
public void onDestroy() 
{ 
    android.os.Process.killProcess(android.os.Process.myPid()); 
    super.onDestroy(); 
} 

Premendo il tasto ottengo il seguente avviso di nuovo nel mio logcat

Impossibile aprire il file keycharmap

Errore caricamento del file keycharmap '/ system/usr/keychars/qtouch-Touch .kcm.bin'. hw.keyboards.65538.devname = 'qtouch-touchscreen'

La chiamata non raggiunge le funzioniKeyDown o onDestroy.

Per favore dimmi perché questo avviso è causato e perché non riesco a gestire il pulsante Indietro di Android.

Le funzioni lavorare bene sul mio progetto Android java ma non nel mio progetto cocos2d-x

risposta

7

E 'stato gestito qui nel file Cocos2dxGLSurfaceView.java

cambiamento al di sotto, dove myActivity è la cocos2dActicity

 case KeyEvent.KEYCODE_BACK: 
        AlertDialog ad = new AlertDialog.Builder(myActivity) 
        .setTitle("EXIT?") 
        .setMessage("Do you really want to exit?") 
        .setPositiveButton("YES", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          ((Cocos2dxActivity)myActivity).finish(); 
         } 
        }) 
        .setNegativeButton("NO", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 

         } 
        }).create(); 
        ad.show(); 
      return true; 
     case KeyEvent.KEYCODE_MENU: 
+0

Grazie, questo è quello che stavo cercando – glo

+0

Non esce, quando lo eseguo di nuovo il continua da dove era. – McDermott

+0

Come si ottiene esattamente l'accesso all'attività qui? –

1

Hai attivato il contatto? Se no, per favore abilitalo e Hope, risolverà il tuo problema.

Presumo che sia il pulsante nella schermata di gioco.

+0

No volevo dire il pulsante indietro sul telefono Android. Il pulsante Home sul telefono funziona perfettamente ma il pulsante Indietro non funziona. – glo

2

Per gestire il pulsante Indietro premendo è necessario ridefinire il metodo onBackPressed() dell'attività, non questi due metodi.

+0

Ho provato anche questo, ma la chiamata non sta raggiungendo il metodo 'onBackPressed()'. – glo

+0

Sembra cocos caprute indietro premendo. Controlla questo messaggio, forse questo è quello che stai cercando http://www.cocos2d-x.org/boards/6/topics/5041?r=5059#message-5059 – Evos

+0

Ma questo aiuterà solo se sto ereditando CCLayer quale io non sono. C'è un altro modo per risolvere questa crisi. – glo

2

solo la tua app implementa per il metodo di override per onKeyDown,

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // TODO Auto-generated method stub 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // Here to implements for your code. 
     Log.d(TAG, "KEYCODE_BACK"); 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

Sì, sto semplicemente ignorando la funzione onKeyDown ma funziona perfettamente sul mio progetto java android. Non funziona nel mio progetto cocos2d-x. – glo

1

Ecco un aggiornamento per Cocos2d-x versione 3+

Questo è stato risposto semplicemente (e lavora) here

così come un po 'meno youtube completa here