什么时候是;更新;在Java中运行的类中的方法?
我想这是一个基本的Java问题。我正在学习一个教程,其中有一个自定义类“LoadingScreen”(扩展了另一个自定义类“Screen”) 一旦调用“LoadingScreen”类,“update()”方法就会运行 问题是update()方法是从哪里调用的?在Java中,构造函数调用update()方法是默认的吗什么时候是;更新;在Java中运行的类中的方法?,java,class,syntax,Java,Class,Syntax,我想这是一个基本的Java问题。我正在学习一个教程,其中有一个自定义类“LoadingScreen”(扩展了另一个自定义类“Screen”) 一旦调用“LoadingScreen”类,“update()”方法就会运行 问题是update()方法是从哪里调用的?在Java中,构造函数调用update()方法是默认的吗 public class LoadingScreen extends Screen { public LoadingScreen(Game game) { //constructo
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:添加“屏幕”类
更新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();
}
不,默认情况下构造函数不调用任何方法 当您说“只要调用了“LoadingScreen”类,“update()”方法就会运行”是什么意思?您的意思是创建LoadingScreen类的实例吗 这是Java中调用update()方法的默认值吗 建造师
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() {
}
}
不,默认情况下构造函数不调用任何东西
问题是update()方法是从哪里调用的
这里的构造函数调用超类的构造函数。因此可能从那里调用了update()
。您应该查看Screen
类的构造函数
编辑书中的那句话不正确。AndroidGame构造函数似乎间接调用了update()。请参见:屏幕扩展了什么?使用屏幕类更新了问题。它没有扩展任何东西,它只是一个抽象类。是的,我的意思是当创建LoadingScreen的实例时,会调用“update()”方法。这是预期的吗?是否调用了所有函数[pause()、resume()、…])?然后,正如@Caner在下面建议的那样,您应该查看
屏幕类构造函数。Screen
类可能还扩展了一些其他类,因此可以从类层次结构中的任何构造函数调用Update()
方法。我用Screen类更新了这个问题,但我仍然不知道“Update()”方法(在类加载屏幕中)从何处调用。只看了您的编辑。我怀疑在实例化LoadingScreen
类-new LoadingScreen()时是否调用了Update()
方法。我猜这是从外部调用的。您是否将实例化对象传递给任何函数?你用你的实例调用setScreen(screen)方法吗?我用screen类更新了这个问题,但我仍然不知道从哪里调用“update()”方法。书中的那句话不正确。似乎AndroidGame
构造函数间接调用update()
。看这个:你是对的。谢谢你的回答,好的。将你的回答标记为答案。