使用新课程? Android Game-dev

时间:2013-02-26 14:28:29

标签: android class object android-activity structure

我正在使用surfaceview开发游戏。

它具有surfaceview将采用的常规方法。

onDraw(){

Drawing here

 }

updateGame(){

Update logic here

}

run() {

while (isRunning){

onDraw()
updateGame()
}

}

所以目前我有一个启动画面,一个选项屏幕和游戏本身。每一个都是一个单独的活动(因此它有自己的类)。

但是每个人都挤进了一个班级(甚至是游戏),而且很难看到发生了什么。

使用我的选项屏幕,用户可以执行一些操作(例如单击帮助按钮或设置按钮),我不确定如何启动另一个类但仍保持相同的活动。< / p>

即,我想使用我在当前类中设置的画布,并在另一个类中绘制它。这可能吗?我找不到任何关于这样做的信息。

我理解java类的概念,我只是不确定如何将它们应用到我的情况中。

或者,做我正在做的事情并为每个'部分'创建新活动是一个更好的主意吗?

3 个答案:

答案 0 :(得分:2)

使用片段:http://developer.android.com/guide/components/fragments.html

它们将允许您将Activity转换为一堆较小的可嵌套作品。片段代表屏幕的一部分,可以控制自己的行为,如活动。它们是在Honeycomb中添加的,但Google为早期版本提供了支持包。谷歌正试图从我能说的标准做出标准做法。

答案 1 :(得分:0)

没有使用课程就很难制作游戏。

您应该联系以保留更新活动中视图的代码。但是你应该完全抽象出另一个类中“updateGame()”中的代码。我们将这个类称为业务类(Controller)。她负责组织游戏过程

然后,如果您有备份信息,则应使用另一个类来访问数据(数据访问层/模型)。

我建议你读这个: http://www.leepoint.net/notes-java/GUI/structure/40mvc.html

如果你有很多动画和很多视频,你应该使用像http://www.andengine.org/这样的框架

使用新活动的示例菜单设置和游戏管理的示例:

    public class MainActivity extends Activity {

    private static final int CODE_MENU_SETTING = 5;
    private int mTimeGame;
    private Thread mGameThread;
    private boolean isCurrentGame, isPause;
    private Button mStartGameButton;

    private ClassBusinessGame mBusiness;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //start button if you want to start the game with a button
        mStartGameButton = (Button) findViewById(/*id button start game*/);
        isCurrentGame = false;
        isPause = false;
        //mTimeGame counts the number of seconds of game
        mTimeGame = 0;
        //the class that controls the game
        mBusiness = new ClassBusinessGame(...); 
        //example thread timer
        mGameThread = new Thread("game thread") {
            public void run() {
                while(isCurrentGame) {
                    //here, your code to update your game, view
                    mTimeGame++;
                    try {
                        Thread.sleep(1000); //pause 1 sec
                    } catch(InterruptedException e) {}
                    while(isPause) {/*load*/} //this is not a good practice to break; loop while paused
                }
            }
        };
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        // here, directly call the Menu Setting Activity
        // attention: here, stop the thread which manage your game
        isPause = true;
        Intent menuIntent = new Intent(this, MenuSettingActivity.class);
        startActivityForResult(menuIntent, CODE_MENU_SETTING); //startActivityForResult to resume game
        return true;
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==CODE_MENU_SETTING) {
            //resume game
            isCurrentGame = false;
        }
    }
}

这是一个基本的例子,很多改进是可能的,但它是(没有框架的游戏)的想法

答案 2 :(得分:0)

嗨,我认为你需要一个游戏引擎,或者你可以像

那样开发一个样本
class Screen {
    public void onShow();
    public void onHide();
    public void onUpdate();
    public void onDraw(Canvas canvas);
}

class Engine {
    Screen mScreen;

    public void setScreen(Screen s) {
        mScreen = s;
    }

    ...
}
顺便说一句,Libgdx是一个不错的选择 http://code.google.com/p/libgdx/