游戏实际上从哪里开始?

时间:2017-03-04 21:41:53

标签: java android

我刚刚开始为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次来电,但仍然没有

  1. MainThread.java
  2. GamePanel.java

    编辑:我对调用run函数,在哪里以及如何调用感兴趣?

3 个答案:

答案 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)会在特定的持续时间内运行。