我在Android上做了些小调整,目标是要做一个小小的探索游戏。实际上,到目前为止,我已经有了相当多的进展:一个不错的sprite系统,一个标题屏幕,上面有一个主菜单,所有的菜单都是游戏代码(没有用户界面按钮或任何东西),可以启动各种活动。加载此酷地图视图的活动,单击此活动将加载地图中更详细的“放大”操作部分的另一个视图。一切都很好,但现在我想知道我在这方面做得有多好。
(当您实例化一个视图,然后将设置上下文移动到一个新视图时,该视图会发生什么情况?我猜只要活动是活动的,活动使用的各种视图的所有实例化仍然是好的?在活动中,onpause是指当用户退出游戏时,ID必须保存在这些视图中更改的数据,以保持状态。?)
游戏开始时我有三个菜单选项。主要是:
新游戏
这一切都很好地工作,就像在地图视图中单击一个单元格,它通过侦听器通知调用活动启动详细的操作视图,并传递单元格的ID(这样它就知道在详细视图中基于在第二个视图中单击的单元格加载哪些对象)。(这花了我一段时间才弄明白,但有人在另一个问题上帮了我。)
here.
我也使用了这里的各种信息
ViewSwitcher
.
我甚至在第二个视图中有一个“是-否”对话框,当他们单击该单元格时,它会询问他们是否真的想转到该单元格,而“是”则会告诉调用活动设置新的视图。帮助我完成这项工作的是这份推荐信
here.
我还得拨弄电话
getContext
而且,我仍然不能百分之百确定什么
getResources
和
获取上下文
帮我吧。
那么,从视图调用和加载对话框是一个坏习惯吗?如果是,那么我不明白如果视图中有一个事件需要弹出一个对话框,我该怎么做?回调活动并让活动处理对话响应,然后在视图上调用响应的方法?
到目前为止,这一切都很好,我也有点了解线程。我为我的菜单视图(处理按钮点击和响应的检测)生成了一个不同的线程,我的Cellmap视图(处理用户可以点击以查看我的系统视图)处理酷的大地图。
所以基本上,活动调用列表是这样的:
home.activity->scrollmap.activity,当出现“是/否”对话框时(在Cellmap视图中),它将侦听Cellmap,如果问题的答案为“是”,则Ontouchevent将使用
private CellMap.MapClickedListener onTouchEvent=
new CellMap.MapClickedListener() {
@Override
public void onMapClick(int id) {
setContentView(new SolarSystem(theContext,id));
}
};
为了帮助其他人,必须在我的Cellmap类中定义该侦听器。然后在Scrollmap活动中,当我即将启动Cellmap时,我只调用一个方法来设置映射单击侦听器。到目前为止,这是我从一个对话框(在本例中是单击它以设置新视图)中获取数据的唯一方法。这是适当的做法吗?
现在我最大的问题是,我有一个playerObject类,我想在新的游戏事件上初始化(我知道如何检测推送),然后在循环的整个生命周期内,它对任何活动中的任何视图都可用。到目前为止,游戏活动只有两个视图(如果计算加载进度条,则为3个)。我想知道玩家的名字,这是另一个活动还是视图?我找不到一个像样的教程,教你如何制作一个简单的输入对话框来返回一个字符串。
我该怎么把这些东西传出去?在从要加载该编辑框的任何位置获取玩家名称后,我希望在类中设置玩家名称,并将该类实例传递到另一个视图或活动,以便他们可以获取该数据。我在这上面搜索的所有东西似乎都是多余的,或者不是正确的方式。什么是传递这个“playerclass”的最佳方式,这样我就可以从其他视图访问它(也就是说在每个视图中显示玩家的名字)。
我还有我的家庭活动,它等待在3个按钮上单击一次,然后启动显示视图的活动。我意识到一个继续游戏和新游戏是相同的活动,只会改变从驱动器加载的数据来恢复一个保存游戏。单击“新建游戏”按钮时,我希望获得他们要使用的玩家名称,当然,请将playerclass的成员设置为该名称,以使其保持不变。
我在哪里打电话(是编辑对话吗?)编辑对话框来自?(更多关于如何构建一个可以接受OK按钮和键盘等输入的按钮)。我还想让它漂亮,也许我可以有一个简单的视图,其中有一个编辑框和一个很好的图像背景(虽然我还没有找到如何放置编辑框,以很好地匹配我为它画的背景)。我想我喜欢一个编辑对话框,我可以皮肤看我想要它的样子和适合的游戏的外观)。
事实上,我有点高兴到目前为止,它看起来还不错,只是不确定一些细节,如获取玩家姓名的用户输入。存储这些信息并将其传递给其他活动和视图。
最好是有一个游戏主活动和大量的视图:
地图视图
字符表视图
库存视图等?
还是应该在某个地方也有不同的活动?