2011-12-22 13 views
0

スレッドのpause()メソッドをshowExitDialog()から呼び出すにはどうすればよいですか?あなたがメインコードでスレッドを作成して開始したい場所あなたが私たちに言っていないので はここからスタートゲームのクラスはExitDialogのスレッドを一時停止する

package game.mainmenu; 


import game.view.ViewPanel; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Window; 
import android.view.WindowManager; 

public class StartGame extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     setContentView(new ViewPanel(this));  

    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     //saveScores(); 
     this.finish(); 
     System.exit(1);// pause game when Activity pauses 
    } 


    @Override 
    public boolean onKeyDown(final int pKeyCode, final KeyEvent pEvent) { 

     if (pKeyCode == KeyEvent.KEYCODE_BACK 
       && pEvent.getAction() == KeyEvent.ACTION_DOWN) { 
      showExitDialog(); 

      return true; 
     } 

     return super.onKeyDown(pKeyCode, pEvent); 
    } 

    public void showExitDialog() { 
     AlertDialog.Builder builder = new AlertDialog.Builder(StartGame.this); 
     builder.setMessage("Are you sure you want to exit?") 
       .setCancelable(false) 
       .setTitle("EXIT") 
       .setPositiveButton("Yes", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           StartGame.this.finish(); 
          } 
         }) 
       .setNegativeButton("No", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         dialog.cancel(); 
        } 
       }); 

     AlertDialog alert = builder.create(); 
     //alert.setIcon(android.R.drawable.star_on); 
     alert.show(); 

    } 
} 

です。ここは本当にメインスレッドを持つクラス

public class ViewManager extends Thread 
{ 
    //some states here 
    public static final int STATE_LOSE = 1; 
    public static final int STATE_PAUSE = 2; 
    public static final int STATE_READY = 3; 
    public static final int STATE_RUNNING = 4; 
    public static final int STATE_WIN = 5; 

    //..some not mention code here../ 

    public ViewManager(SurfaceHolder surfaceHolder, Context context) 
    { 
     mSurfaceHolder = surfaceHolder; 
     mRunning = false; 
     mHealthBar = new Rect(0,0,0,0); 
     mLinePaint = new Paint(); 
     mLinePaint.setAntiAlias(true); 
     mLinePaint.setARGB(255, 0, 255, 0); 
     mLinePaint.setTextSize(16); 
     mLinePaint.setStrokeWidth(3); 
     mContext = context; 
     Resources res = context.getResources(); 

     //..some not mention code here../ 
     InitElements(res); 

     mHero = new PlayerAnimated(mPlayerImage, FIELD_WIDTH/2, 600, 64, 64, 3, 3, context, mEnemiesList); 
     //mBoom = new Explosion(mExplosionImage, 200, 500, 64, 64, 7, 7); 
     mEnemyImage = BitmapFactory.decodeResource(res, R.drawable.enemyone); 

     setState(STATE_RUNNING); 

    } 


    /** 
     * threads state 
     * @param running 
     */ 
     public void setRunning(boolean running) 
     { 
      mRunning = running; 
     } 

     //..some not mention code here../ 

     public void run() 
     { 
      while (mRunning) 
      { 
       Canvas canvas = null; 
       try 
       { 
        // подготовка Canvas-а 
        canvas = mSurfaceHolder.lockCanvas(); 
        synchronized (mSurfaceHolder) 
        { 
         if(mMode == STATE_RUNNING){ 

          // draw if not paused 
          addEneimes(mContext); 

          updateStuff(); 

          doDraw(canvas); 
         } 
         else 
         { 
          pauseDraw(canvas); 
         } 
         ViewPanel.displayFps(canvas, aString); 

         aString = Integer.toString(hudscore.getScore()); 

        } 
       } 
       catch (Exception e) { } 
       finally 
       { 
        if (canvas != null) 
        { 
         mSurfaceHolder.unlockCanvasAndPost(canvas); 
        } 
       } 
      } 
     } 

     //..some not mention code here../ 

    public void pause() { 
     synchronized (mSurfaceHolder) { 
      setState(STATE_PAUSE); 
      mLastFiredTime = System.currentTimeMillis() + 100; 
     } 
    } 

    public void unpause() { 
     // 
     synchronized (mSurfaceHolder) { 
      setState(STATE_RUNNING); 
      mLastFiredTime = System.currentTimeMillis() + 100; 
     } 
    } 

    public void setState(int mode) 
    { 
     mMode = mode; 
    } 

    public void pauseDraw(Canvas canvas) 
    { 
     canvas.drawBitmap(Bitmap.createBitmap(FIELD_WIDTH, FIELD_HEIGHT, Bitmap.Config.RGB_565), 0, 0, null); 
    } 
} 
+0

しかし、メインコードのどこにでもスレッドを作成していません... – Tudor

+0

スレッドをViewPanelsクラスに作成しました。それとも、 'StartGame'アクティビティで作成する必要があるのですか? – user1107378

答えて

0

ない明確な質問、です。それが内部にあると仮定しましょう:

public class StartGame extends Activity { 

    private ViewManager viewManager = new ViewManager(); 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     setContentView(new ViewPanel(this));  

     viewManager.start(); // start viewManager thread 
    } 

    // other methods 

    public void showExitDialog() { 

     viewManager.pause(); // call pause 

     // rest of code 
    } 
} 
+0

うーん、今私はそれを得ると思います。 ViewPanelでポーズメソッドを作ることができます。このアクティビティから呼び出すだけです。 – user1107378

+0

@ user1107378:まさにそれは別の良い選択肢です。 – Tudor

関連する問題