surfaceview,activity,startactivityforresult,dialog in activity

时间:2012-04-18 17:18:53

标签: android android-activity surfaceview

我正在制作一个小游戏并遇到一些问题。

有菜单

public void onClick(View arg0) {
    // TODO Auto-generated method stub
    switch (arg0.getId()){
    case R.id.bStartGame:

        Intent a = new Intent(Menu.this, Action.class);
        startActivityForResult(a, 1);

        break; }

然后启动surfaceview的活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(new GameView(this));
}

然后是带有游戏机制的surfaceView。

我的大部分代码都在此视图中。

现在我有问题找到一个很好的游戏过滤器解决方案。

如果我在surfaceview中开始一个新活动,它可以工作 - 但我得不到结果(),这是在会话期间获得的分数。

所以现在我想问你们如何解决这个问题。

我想到了一种方法,但不知道如何实现它。 将高分从surfaceview传递给activity并将其设置为结果(菜单活动返回)。 然后通过对话框启动一个xml文件,这将是游戏过滤器,玩家触摸后退按钮后,他会回到菜单,在那里他可以看到他的成绩。

你能告诉我如何编码吗?

亲切的问候 丹尼斯

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题:

- 使用startActivityForResult,然后从新活动发回,使用onActivityResult在旧活动中捕获它(检查https://developer.android.com/reference/android/app/Activity.html

-do我做了什么(懒惰,hacky方式:) :)用startActivity()启动新活动,并添加高分作为添加到intent的额外数据。在您的新活动中,使用getIntent()。getInt(ow whatever)获取已发送的分数数据并按照您的意愿进行操作。然后关闭该活动,您将返回上一个持有您的表面视图的活动。

NOW THE TRICK:在您开始新活动之前,将其分数添加到意图中,只需在您的Surfaceview活动中运行与在新活动中相同的分数计算!这样,当你返回到surfaceview的活动时,你仍然会得到正确的新分数(如果存储/ onresume'd正确;不要忘记将它添加到你的保存/恢复状态和/或surfaceview的私有变量) !

唯一的缺点是你必须有两个位置来更新你的得分机制。这不是很好的编程。但它很有效,而且很容易。