1
다음 구조로 간단한 게임을 씁니다. 주요 XML 레이아웃 사용자보기 있음 :간단한 게임 버그
이보기에는 두 개의 파일이 있습니다.
package com.sokolovlev.UFOtest03;
import android.content.Context;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MenuView extends SurfaceView implements SurfaceHolder.Callback
{
private SurfaceHolder mSurfaceHolder; //Draw surface
public static MenuManager mMenuManager; //Draw manager
public MenuView(Context context, AttributeSet attrs)
{
super(context, attrs);
// Surface events registration
mSurfaceHolder = getHolder();
mSurfaceHolder.addCallback(this);
mMenuManager = new MenuManager(mSurfaceHolder, context);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
mMenuManager.initPositions(height, width);
}
@SuppressWarnings("static-access")
@Override
public void surfaceCreated(SurfaceHolder holder)
{
mMenuManager.setRunning(true);
try
{
mMenuManager.start();
}
catch (Exception e) { }
}
@SuppressWarnings("static-access")
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
boolean retry = true;
mMenuManager.setRunning(false);
while (retry)
{
try
{
mMenuManager.join();
retry = false;
}
catch (InterruptedException e) { }
}
}
}
그리고 두 번째 파일이 무승부 관리자입니다 : 먼저 사용자 MenuView이다
package com.sokolovlev.UFOtest03;
import ...
public class MenuManager extends Thread
{
private SurfaceHolder mSurfaceHolder;
private static boolean mRunning;
private int _screenHeight;
private int _screenWidth;
private ...
Context c;
private ...
public MenuManager(SurfaceHolder surfaceHolder, Context context)
{
mSurfaceHolder = surfaceHolder;
mRunning = false;
c = context;
...
}
public static void setRunning(boolean running)
{
mRunning = running;
}
@Override
public void run()
{
while (mRunning)
{
Canvas canvas = null;
try
{
// подготовка Canvas-а
canvas = mSurfaceHolder.lockCanvas();
canvas.drawRGB(0, 0, 0);
synchronized (mSurfaceHolder)
{
//All drawing
}
}
catch (Exception e) { }
finally
{
if (canvas != null)
{
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
모든 것이 잘 작동! (단계 №1)하지만 내가 중앙 단추를 누르거나 들어오는 전화가 있거나 작업 관리자 (단계 №2)를 호출하고 내 응용 프로그램으로 돌아갈 경우 - 내 그림이 아니라 검은 색 화면 만 (단계 №3) . 그러나 만약 내가 №2 단계 다음에 가서 내 애플 리케이션에, 나는 모든 것이 작동하는 것을 볼 수있다.
내 도면에 영향을주는 리로딩이있는 곳을 모르겠다! 도와주세요!
아마 http://stackoverflow.com/questions/3527621/how-to-pause-and-resume-a-surfaceview-thread에 대한 대답에 제안 된 내용을 시도해 볼 수 있습니다. – Michael
아, LunarLander와 같은 표면 상태 만 저장할 수 있습니다. Tnx! – Leo