0

私が推測する基本的なJavaの質問。カスタムクラス「LoadingScreen」(別のカスタムクラス「Screen」を拡張)があるチュートリアルを進めています。

「LoadingScreen」クラスが呼び出されるとすぐに、「update()」メソッドが実行されます。

質問は update() メソッドがどこから呼び出されているかです。update() メソッドがコンストラクターで呼び出されるのは、Java のデフォルトの何かですか?

public class LoadingScreen extends Screen {

public LoadingScreen(Game game) { //constructor for this class
    super(game);
}

@Override
public void update(float deltaTime) {
    Graphics g = game.getGraphics();
    Assets.background = g.newPixmap("background.png", Graphics.PixmapFormat.RGB565);
    Assets.logo = g.newPixmap("logo.png", Graphics.PixmapFormat.ARGB4444);
    Assets.mainMenu = g.newPixmap("mainmenu.png", Graphics.PixmapFormat.ARGB4444);
    Assets.buttons = g.newPixmap("buttons.png", Graphics.PixmapFormat.ARGB4444);
    Assets.help1 = g.newPixmap("help1.png", Graphics.PixmapFormat.ARGB4444);
    Assets.help2 = g.newPixmap("help2.png", Graphics.PixmapFormat.ARGB4444);
    Assets.help3 = g.newPixmap("help3.png", Graphics.PixmapFormat.ARGB4444);
    Assets.numbers = g.newPixmap("numbers.png", Graphics.PixmapFormat.ARGB4444);
    Assets.ready = g.newPixmap("ready.png", Graphics.PixmapFormat.ARGB4444);
    Assets.pause = g.newPixmap("pausemenu.png", Graphics.PixmapFormat.ARGB4444);
    Assets.gameOver = g.newPixmap("gameover.png", Graphics.PixmapFormat.ARGB4444);
    Assets.headUp = g.newPixmap("headup.png", Graphics.PixmapFormat.ARGB4444);
    Assets.headLeft = g.newPixmap("headleft.png", Graphics.PixmapFormat.ARGB4444);
    Assets.headDown = g.newPixmap("headdown.png", Graphics.PixmapFormat.ARGB4444);
    Assets.headRight = g.newPixmap("headright.png", Graphics.PixmapFormat.ARGB4444);
    Assets.tail = g.newPixmap("tail.png", Graphics.PixmapFormat.ARGB4444);
    Assets.stain1 = g.newPixmap("stain1.png", Graphics.PixmapFormat.ARGB4444);
    Assets.stain2 = g.newPixmap("stain2.png", Graphics.PixmapFormat.ARGB4444);
    Assets.stain3 = g.newPixmap("stain3.png", Graphics.PixmapFormat.ARGB4444);

    Assets.click = game.getAudio().newSound("click.ogg");
    Assets.eat = game.getAudio().newSound("eat.ogg");
    Assets.bitten = game.getAudio().newSound("bitten.ogg");

    Settings.load(game.getFileIO());
    game.setScreen(new MainMenuScreen(game));
}

@Override
public void present(float deltaTime) {

}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void dispose() {

}
}

更新 1:「画面」クラスの追加

public abstract class Screen {
protected final Game game;

public Screen(Game game) {
    this.game = game;
}

public abstract void update(float deltaTime);

public abstract void present(float deltaTime);

public abstract void pause();

public abstract void resume();

public abstract void dispose();
}

更新 2:「ゲーム」インターフェイスの追加

パッケージ com.neil.gamesbook.framework;

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();
}
4

2 に答える 2

0

いいえ、コンストラクターはデフォルトでメソッドを呼び出しません。

「「LoadingScreen」クラスが呼び出されるとすぐに「update()」メソッドが実行される」とはどういう意味ですか? LoadingScreen クラスのインスタンスを作成するということですか?

于 2013-10-20T02:22:33.693 に答える
0

update() メソッドがコンストラクターで呼び出される Java のデフォルトの何かですか?

いいえ、コンストラクターはデフォルトでは何も呼び出しません。

質問は update() メソッドがどこから呼び出されているかです。

ここでのコンストラクターは、スーパー クラスのコンストラクターを呼び出します。おそらくupdate()そこから呼び出されます。Screenクラスのコンストラクターを調べる必要があります。

編集
本のその文は正しくありません。AndroidGame コンストラクターが間接的に update() を呼び出しているようです。これを参照してください:「Androidゲームの開始」のコードの説明が必要です

于 2013-10-20T02:25:31.293 に答える