我刚刚开始为Android制作游戏,并决定从Retro Chicken的教程开始。
我不知道的是游戏真正开始侦听命令的地方?
通常他们会调用public void run ()
之类的函数。
主要是:
game = new GamePanel(this);
setContentView(game);
主要调用的构造函数是:
public GamePanel(Context context){
super(context);
this.getHolder().addCallback(this);
thread = new MainThread(getHolder(), this); // Inherits [Thread] class. Code posted
player = new RectPlayer(new Rect(100,100,200,200), Color.rgb(255,0,0)); Class made by me. Has nothing special.
playerPoint = new Point(150,150);
// We ensure that THIS canvas will get the focus.
setFocusable(true);
}
我浏览了一些super
次来电,但仍然没有
编辑:我对调用run
函数,在哪里以及如何调用感兴趣?
答案 0 :(得分:3)
这是实际启动控制器线程的块,
@Override
public void surfaceCreated(SurfaceHolder holder){
thread = new MainThread(getHolder(), this);
thread.setRunning(true);
thread.start();
}
从class MainThread extends Thread
开始,调用Thread对象的start
方法将在新线程上调用run
方法。
现在该方法如何运行?
@Override
public void surfaceCreated
这是对implements SurfaceHolder.Callback
定义的重写。
你的game
对象知道接口,因为构造函数将自身的引用传递给持有者本身,包含要调用的接口。
this.getHolder().addCallback(this);
持有人现在有一个对这个类的引用,可以调用
callback.surfaceCreated();
surfaceCreated
是您实施的接口方法。
现在表面是如何创建的?
The surfaceCreated
method is called when:
首次创建曲面后立即调用此方法。这种实现应该启动他们想要的任何渲染代码。请注意,只有一个线程可以绘制到Surface中,因此如果正常渲染将在另一个线程中,则不应在此处绘制Surface。
您通过调用最终调用setContentView(game);
来启动该过程,这会使表面膨胀。
答案 1 :(得分:0)
这是主线程获取startet的地方,如果它是你想要知道的。
@Override
public void surfaceCreated(SurfaceHolder holder){
thread = new MainThread(getHolder(), this);
thread.setRunning(true);
thread.start();
}
我认为你应该稍微指出你的问题。
这是回调方法,用于处理游戏面板上的触摸。
@Override
public boolean onTouchEvent(MotionEvent event){
/* [event.getAction()] : returneaza un [int] care are o valoeare
in functie de ce fel de touch e
*/
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
playerPoint.set((int)event.getX(), (int)event.getY());
}
return true;
}
答案 2 :(得分:0)
GamePanel类是SurfaceView,它提供绘图表面。您正在按setContentView(game);
添加图层。
现在你需要开始绘画。在绘图中,如果需要在Paint Board(Surface View)上更改某些内容,则需要再次擦除和绘制。
现在您需要一次又一次地呼叫draw (Canvas canvas)
以达到上一个目的。所以你正在使用MainThread。
查看MainThread的run()
方法,有一个无限while(true)
循环。通过该循环,您的GamePanel的draw (Canvas canvas)
会在特定的持续时间内运行。