【问题标题】:Getting user input in android game在安卓游戏中获取用户输入
【发布时间】:2013-10-06 21:19:29
【问题描述】:

我正在构建我的第一个 android 应用程序,它是一个简单的游戏。我通过扩展 Activity 类并使用 Canvas 将 2D 图形绘制到屏幕上来完成它(用于学习目的)。

现在我想获取用户/玩家姓名首字母,我需要类似组件之类的东西来读取它。我可以自己画一个键盘,并将触摸监听器绑定到它/读取触摸事件,但我知道 Android 中已经有类似的东西,比如软件键盘。我在想的一个选择是使用 EditText 组件。

我可以使用 Canvas 渲染软件键盘或 EditText 组件吗? EditText 和 KeyBoardView 似乎有方法 draw(Canvas canvas)。那是正确的方法吗?如何设置绘制组件的坐标?

如果这样可行,那么布局和总体外观可能与游戏外观不相符,这是一个正确的假设吗? (这意味着我仍然需要自己实现它?)

提前致谢!

【问题讨论】:

    标签: android canvas input keyboard


    【解决方案1】:

    使用软件键盘可能会破坏游戏的外观和感觉。尽管如此,如果你的游戏是 简单类型,你可以像这样在你的活动视图上放置一个EditText

    FrameLayout layout = new FrameLayout(this);
    
    layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    EditText eTInitials = new EditText(this);  
    eTInitials.setPadding(0, 0, 0, 5); //change to suit your game
    eTInitials.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM); //change to suit your game
    etInitials.setOnKeyListener(new OnKeyListener(){ [override onkeymethod here]   }); //get player initials here
    layout.addView(yourView);
    
    layout.addView(eTInitials);
    setContentView(layout);
    

    我记得我通过软件键盘在 3D 游戏中保存了我的高分,所以这种方法还不错。

    或者如您所说,您可以通过绘制自己的自定义键盘位图并读取触摸事件来自己实现。

    【讨论】:

    • 这可能是它的工作方式,我敢肯定。但我无法让它工作,因为我的游戏本身包含“屏幕”或“视图”,我需要在其中一个“屏幕”上使用 EditText。我得到一个基本上抛出的异常,因为我尝试从工作线程而不是 UI 线程进行绘制。
    • 在您的活动中,只需将 EditText 可见性设置为“已消失”,创建一个侦听器,并使用将其设置回“可见”的方法,然后在需要时在这些“屏幕”中调用它。
    • 我明白了。如果我有几十个我想用于不同目的的小部件怎么样?我需要在我的活动中将它们全部实例化,将可见性设置为 Gone 并使用侦听器?这似乎有点笨拙,因为我希望每个类都负责自己的活动,而不是有一个包含所有变量等的大型类。如果我要在 openGL 中这样做,我可能根本无法使用这些小部件,但我认为我的问题有点相似。我有一个不是由 UI 线程绘制的“屏幕”,我认为 openGL 版本也会有吗?
    • 不,您也可以使用 openGL 中的小部件。记住!大多数伟大的安卓游戏都有广告横幅,这些横幅是小部件/视图,就像 EditText。您的屏幕是绑定到一个活动还是每个屏幕都有自己的活动?后一种方法有其自身的缺点,但可以解决您的问题,否则您必须绘制自己的自定义键盘。
    • 我目前只有一项活动。这可能是问题的根源,我可能需要稍后更改它,因为我也会尝试这些横幅。目前这就是我最终要做的事情:flickr.com/photos/60978799@N03/10107513736 当然,它正在进行中,但现在会做;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多