2

如果您不想浏览一些文字墙,请转到 tl;dr。

我想为 Android 创建一个文本冒险应用程序。

这将是巨大的,所以我想不是创建 10,000 个活动,而是只处理一个活动并绘制不同的内容 - 并且 - 根据用户现在所在的“页面”绘制不同的按钮。

IE

我们从第 0 页开始。

它向我们展示了类似的东西:

第 0 页

欢迎冒险家!你是什​​么性别?

[按钮 1 = 字符串“男性”转到第 1 页重绘活动] [按钮 2 = 字符串“女性”转到第 2 页重绘活动]

第 1 页

欢迎我的女士!

[button 1 = string "hello" go to page 3 redraw the Activity] [button 2 = string "bye" go to page 4 redraw the Activity]

欢迎好先生!

第 2 页 [按钮 1 = 字符串“hello”转到第 5 页重绘活动] [按钮 2 = 字符串“再见”转到第 6 页重绘活动]

正如你所看到的,它变得非常复杂。这只是我希望它如何工作的一个例子,游戏中的选择将比“你好”或“再见”更“一点”。

我需要一种方法来重绘 TextView 的内容和显示在下方的按钮,以及屏幕顶部的一些变量,如“健康”或“黄金”。所有在变量'page'被修改之后。

另一种选择是为每个选择创建不同的活动。可能传递变量 'health' 和 'gold' 会很容易,重绘会发生 onCreate 并且字符串已经在新活动的 XML 布局中到位。

但我不确定我是否要完成创建 10,000 个活动并在链接的变量之间传递变量的过程中进行编码。:/

有什么建议么?

TL;DR 我可以在始终保持同一个 Activity 的同时根据整数重绘 android 应用程序的内容吗?

这与我想要实现的目标相似:https: //play.google.com/store/apps/details? id=wizardsChoiceV1.toucher&hl=en

编辑 我现在得到的没有给我任何错误,但它不会切换屏幕。:/

    package com.example.textadventure;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;


public class MainActivity extends Activity implements OnClickListener {

    public static int page = 1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
    }

    public void onClick(View view) {
        onClick(view);
        switch (view.getId()) {
        case R.id.button1:
            setContentView(R.layout.activity_main2);
        break;
        case R.id.button2:
            setContentView(R.layout.activity_main);
        break;
        default:
            //code..
        break;
        }
    }
}
4

1 回答 1

0

你是对的,你不想为每个选择创建一个活动。您可能希望将设计拆分为组件,并为每个显着不同的组件创建布局。

然后,您可以创建一个布局,根据游戏的当前状态将这些组件组合在一起,并定义与布局中各个视图关联的值。

例如,您可能有一个组件来表示您的角色状态(健康、金币、装备等)和几个表示不同类型选择的组件(带有是/否选择的描述、带有描述的房间、一些交互式项目/对象和一些退出)。

您可以将游戏状态存储在 Activity 中的某个位置,并根据该状态决定需要哪些组件,例如,如果您在初始位置有一个新角色,您可能会在顶部显示角色状态布局和一个房间布局在底部。

角色状态布局将包含许多 View 对象,您可以对其进行修改以匹配当前角色状态,同样适用于房间布局。

于 2013-04-20T19:26:08.607 回答