我正在使用surfaceview开发游戏。
它具有surfaceview将采用的常规方法。
onDraw(){
Drawing here
}
updateGame(){
Update logic here
}
run() {
while (isRunning){
onDraw()
updateGame()
}
}
所以目前我有一个启动画面,一个选项屏幕和游戏本身。每一个都是一个单独的活动(因此它有自己的类)。
但是每个人都挤进了一个班级(甚至是游戏),而且很难看到发生了什么。
使用我的选项屏幕,用户可以执行一些操作(例如单击帮助按钮或设置按钮),我不确定如何启动另一个类但仍保持相同的活动。< / p>
即,我想使用我在当前类中设置的画布,并在另一个类中绘制它。这可能吗?我找不到任何关于这样做的信息。
我理解java类的概念,我只是不确定如何将它们应用到我的情况中。
或者,做我正在做的事情并为每个'部分'创建新活动是一个更好的主意吗?
答案 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/