Автоматический выход из SurfaceView - PullRequest
3 голосов
/ 10 июля 2011

У меня есть игра, которую я разрабатываю для Android 2.x.Когда игрок проигрывает, я хочу автоматически выйти из него и вернуться в предыдущее меню игры.Это может быть простой вопрос, но как мне это сделать?

У меня есть MenuActivity, которое вызывает GameActivity, которое вызывает GameView (реализацию SurfaceView), где логика игры.

ОБНОВЛЕНИЕ: Нет, подождите, это сложнее, чем это.Для создания этой игры я последовал примеру MoonLander, в котором использовались темы.

GameView :

public class GameActivity extends Activity
{
GameView gameView;
GameThread gThread;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    gameView = new GameView(this);
    setContentView(gameView);

    gThread = gameView.getThread();
    gThread.doStart();
}

}

GameView :

package com.cp.balldrop;

public class GameView extends SurfaceView implements SurfaceHolder.Callback
{
    class GameThread extends Thread
    {


    public GameThread(SurfaceHolder sHolder, Context context, Handler handler)
    {
        //Code
    }

    public void doStart()
    {
        synchronized (mSurfaceHolder)
        {

        }
    }

    @Override
    public void run()
    {
        while (running)
        {
            Canvas c = null;
            try
            {
                c = mSurfaceHolder.lockCanvas(null);
                synchronized (mSurfaceHolder)
                {    
                    doDraw(c);
                }
            }
            finally
            {
                if (c != null)
                {
                    mSurfaceHolder.unlockCanvasAndPost(c);
                }
            }
        }
    }

    protected void doDraw(Canvas canvas)
    {
            //code
    }
}

/** Handle to the application context, used to e.g. fetch Drawables. */
private Context mContext;

/** Pointer to the text view to display "Paused.." etc. */
private TextView mStatusText;

/** The thread that actually draws the animation */
private GameThread gThread;

public GameView(Context context)
{
    super(context);

    // register our interest in hearing about changes to our surface
    SurfaceHolder holder = getHolder();
    holder.addCallback(this);

    // create thread only; it's started in surfaceCreated()
    gThread = new GameThread(holder, context, new Handler()
    {
        @Override
        public void handleMessage(Message m)
        {
           // mStatusText.setVisibility(m.getData().getInt("viz"));
           // mStatusText.setText(m.getData().getString("text"));
        }
    });

    setFocusable(true);
}

public GameThread getThread()
{
    return gThread;
}

public void surfaceCreated(SurfaceHolder holder)
{
    gThread.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
    boolean retry = true;
    gThread.setRunning(false);

    while (retry)
    {
        try
        {
            gThread.join();
            retry = false;
        }
        catch (InterruptedException e)
        {
        }
    }
}
}

Ответы [ 2 ]

3 голосов
/ 03 октября 2011

В моей теме я вызываю следующий метод из doTouch моего Surfaceview:

public void doLose() {
            synchronized (mSurfaceHolder) {
                //quit to mainmenu
                ((Activity) mContext).finish();
            }            
        }

Похоже, что это закрывает SurfaceView и деятельность, в которой он размещается, возвращая меня назад в мою деятельность в главном меню. Обратите внимание на приведение и предопределенный контекст.

2 голосов
/ 10 июля 2011

Как насчет вызова finish () в GameActivity?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...