我讀了一本寫在「Beginning Android Games」一書中的代碼,但我完全不理解它。該應用程序的入口點是:調用子類方法的抽象類。它是如何工作的?
public class MrNomGame extends AndroidGame {
public Screen getStartScreen() {
return new LoadingScreen(this);
}
}
類「AndroidGame」這是這裏延伸:
public abstract class AndroidGame extends Activity implements Game {
AndroidFastRenderView renderView;
Graphics graphics;
Audio audio;
Input input;
FileIO fileIO;
Screen screen;
WakeLock wakeLock;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
int frameBufferWidth = isLandscape ? 480 : 320;
int frameBufferHeight = isLandscape ? 320 : 480;
Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth,
frameBufferHeight, Config.RGB_565);
float scaleX = (float) frameBufferWidth
/getWindowManager().getDefaultDisplay().getWidth();
float scaleY = (float) frameBufferHeight
/getWindowManager().getDefaultDisplay().getHeight();
renderView = new AndroidFastRenderView(this, frameBuffer);
graphics = new AndroidGraphics(getAssets(), frameBuffer);
fileIO = new AndroidFileIO(this);
audio = new AndroidAudio(this);
input = new AndroidInput(this, renderView, scaleX, scaleY);
screen = getStartScreen();
setContentView(renderView);
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame");
}
@Override
public void onResume() {
super.onResume();
wakeLock.acquire();
screen.resume();
renderView.resume();
}
@Override
public void onPause() {
super.onPause();
wakeLock.release();
renderView.pause();
screen.pause();
if (isFinishing())
screen.dispose();
}
public Input getInput() {
return input;
}
public FileIO getFileIO() {
return fileIO;
}
public Graphics getGraphics() {
return graphics;
}
public Audio getAudio() {
return audio;
}
public void setScreen(Screen screen) {
if (screen == null)
throw new IllegalArgumentException("Screen must not be null");
this.screen.pause();
this.screen.dispose();
screen.resume();
screen.update(0);
this.screen = screen;
}
public Screen getCurrentScreen() {
return screen;
}
}
您本身看到類擴展「活動」。這意味着,如果您在手機上打開應用程序,該應用程序就會進入。在onCreate方法中有一種叫做'getStartScreen()'的方法。這是實現的接口「遊戲」的一種方法。但'getStartScreen()'方法沒有在'AndroidGame'中實現,因此它是一個抽象類。你記得'方法'getStartScreen()'在'MrNomGame'中實現。正如我已經提到的,方法'getStartScreen()'在onCreate方法中被調用。這是令我困惑的一點。超類從它的子類中調用一個方法。它是如何工作的?如果有兩個擴展'AndroidGame'的子類會發生什麼?例如:
public class MrNomGame2 extends AndroidGame {
public Screen getStartScreen() {
return new LoadingScreen(this);
}
}
哪個'getStartScreen()'方法會被調用? MrNomGame或MrNomGame2的那一個?
至少遊戲的界面:
public interface Game {
public Input getInput();
public FileIO getFileIO();
public Graphics getGraphics();
public Audio getAudio();
public void setScreen(Screen screen);
public Screen getCurrentScreen();
public Screen getStartScreen();
}
我知道這是很多代碼。我希望你能幫助我。非常感謝你。
彼得
你能不能展示Manifest? – gunar
這不是特定於Android的。請參閱http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html –
我不知道如何將代碼插入評論中,但我想您想知道清單中的哪些活動。只有MrNomGame Class。 –