我正在制作简单的游戏。我有3个活动。第一个活动是主菜单(FirstActivity类)
第一个活动有以下代码:
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, ACTIVITY_CREATE);
它调用第二个活动,其中第二个活动有以下代码:
setContentView(new MovementView(this));
MovementView类扩展了SurfaceView。 MovementView类是我编写所有游戏代码的地方。
所以我想在生命== 0时创建它,它会改为ThirdActivity。我该怎么做?
我试过把代码类似于FirstActivity的类,但它似乎不起作用
如果我把
((Activity)getContext()).finish();
它只是跳回到FirstActivity,但这不是我需要的,我需要它去参加ThirdActivity类。
答案 0 :(得分:3)
最后我可以回答,不得不等待24小时
所以最后我设法做的唯一变种是这样的:
FirstActivity类:
点击
private void startGame() {
Intent i = new Intent(this, SecondActivity.class);
startActivity(i);
}
SecondActivity类:
protected void onCreate(Bundle savedInstanceState) {
setContentView(new MovementView(this));
}
@Override
protected void onDestroy() {
Intent i = new Intent(this, GameOver/*GameOver=ThirdActivity*/.class);
startActivity(i);
super.onDestroy();
}
MovementView类:
if (lives == 0){
updateThread.setRunning(false);
((Activity)getContext()).finish();
}
我不知道onDestroy和onStop之间的区别是否有效。 唯一令人不快的是,当生命== 0时,它会回到FirstActivity(半秒钟),然后再回到GameOver类。
答案 1 :(得分:2)
当你尝试它时它没有用,因为你试图从View创建一个intent,而不是一个Activity。您需要使用视图的上下文(getContext()
)而不是this
。您还需要使用startActivity
而不是startActivityForResult
,除非您实际上计划使用结果(尽管如果您仅使用它来将内容转换为活动应该相当安全你自己的代码。)
答案 2 :(得分:1)
由于您使用..ForResult()
启动 Activity2 ,您还可以在完成之前设置第二个活动的结果(使用setResult(GAME_OVER)
),以便活动1 如果在显示 Activity3 时 Activity2 不再存在,则在onActivityResult()
中启动 Activity3
RE: @Yoni Samlan,好吧,如果我把
Intent i = new Intent(this, ThirdActivity.class);
startActivityForResult(i, ACTIVITY_CREATE);
它显示第一行的构造函数Intent(MovementView,Class)未定义,而方法startActivityForResult(Intent,int)未定义为MovementView 类型的第二行。
您应该将Activity
作为第一个参数传递而不是视图,并调用Activity.startActivityForResult()
...
因此,请将Activity
传递给您的观点,然后按照说明使用它。
答案 3 :(得分:0)
使用MovementView构造函数,您必须记住该活动,使用它来启动第三个活动。
private Activity a;
public MovementView(Acitivity a) {
this.a = a;
// your code
}
在MovementView的某处,替换
Intent i = new Intent(this, ThirdActivity.class);
通过
Intent i = new Intent(a, ThirdActivity.class);