改写Android的Snake例子,使之运行于我的三星手机上。判断规则如下:如果x方向移动距离大于y方向,则认为是水平移动,反之则是上下移动。如果水平移动,x移动正距离x-x0>0 则认为向右移动,负距离x-x0<0 则认为向左移动;上下移动的判断同理。
代码如下,需要注意的是MotionEvent的ACTION_DOWN, ACTION_UP 是这么理解的:
ACTION_DOWN - A pressed gesture has started, the motion contains the initial starting location.
ACTION_UP - A pressed gesture has finished, the motion contains the final release location as well as any intermediate points since the last down or move event.
ACTION_MOVE - A change has happened during a press gesture (between {@link #ACTION_DOWN} and {@link #ACTION_UP}). The motion contains the most recent point, as well as any intermediate points since the last down or move event. -
简而言之,ACTION_DOWN, ACTION_UP 类似于Javascript里面键盘事件OnKeyDown, OnKeyUp 或鼠标事件OnMouseDown, OnMouseUp, 而不是说手指往上划拉或往下划拉了一下。
/**
* Re write onKeyDown() for SAMSUNG
*/
public boolean onTouchEvent(MotionEvent event) {
// Set the game status to running
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (mMode == READY | mMode == LOSE) {
initNewGame();
setMode(RUNNING);
update();
return true;
}
if (mMode == PAUSE) {
setMode(RUNNING);
update();
return true;
}
}
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mX = x;
mY = y;
update();
return true;
case MotionEvent.ACTION_UP:
float dx = x - mX;
float dy = y - mY;
if (Math.abs(dx) >= TOUCH_TOLERANCE
|| Math.abs(dy) >= TOUCH_TOLERANCE) {
if (Math.abs(dx) >= Math.abs(dy)) { // move from left -> right
// or right -> left
if (dx > 0.0f) {
turnTo(EAST);
} else {
turnTo(WEST);
}
} else { // move from top -> bottom or bottom -> top
if (dy > 0.0f) {
turnTo(SOUTH);
} else {
turnTo(NORTH);
}
}
update();
return true;
}
}
return super.onTouchEvent(event);
}
private void turnTo(int direction) {
if (direction == WEST & mDirection != EAST) {
mNextDirection = WEST;
}
if (direction == EAST & mDirection != WEST) {
mNextDirection = EAST;
}
if (direction == SOUTH & mDirection != NORTH) {
mNextDirection = SOUTH;
}
if (direction == NORTH & mDirection != SOUTH) {
mNextDirection = NORTH;
}
}
分享到:
相关推荐
它通常会包含各种按钮,如数字键、方向键、电源键等,并且能够根据用户触摸屏幕的动作触发相应的操作。 在实现`RemoteControlView`时,开发者需要考虑以下几个关键点: 1. **布局设计**:`RemoteControlView`的...
本文将详细介绍如何使用libgdx来实现模拟方向键控制角色移动的功能。 首先,我们需要创建一个Android项目,并集成libgdx库。在Android项目中,我们通常会创建一个`AndroidApplication`作为主入口,如`...
在Android开发中,CustomView是开发者常常需要...总的来说,Android CustomView的遥控方向键设计是一个结合了图形绘制、触摸事件处理和动画实现的综合实践,对于提升Android开发技能和理解用户界面定制有着重要的意义。
但因为手机通常没有硬件键盘,我们通常会使用触摸屏模拟键盘事件。为此,可以创建一个`SurfaceView`,并在其中实现`MotionEvent`的监听,如`onTouchEvent()`方法,根据滑动方向模拟上下左右按键。 3. **动画处理**...
- 物理键盘的Tab键用于在水平方向上切换焦点,Enter/Return键通常用于执行当前焦点View的默认操作。 7. **无障碍服务与焦点**: - 对于无障碍功能,焦点顺序尤为重要,应确保所有关键操作都能通过焦点移动到达。 ...
3. 键盘输入:如果支持物理键盘,还需处理键盘事件,例如使用方向键控制方块移动。 五、游戏状态管理 1. 游戏开始、暂停和结束:提供相应的按钮或手势触发,改变游戏状态并更新UI。 2. 得分计算:当一行满格消除时...
例如,当用户倾斜手机时,应用会相应地向机顶盒发送方向键的指令。 4. **震动反馈模拟**:为了增强游戏体验,手机的震动功能可以被用来模拟机顶盒的震动反馈。比如在游戏中,当角色受到攻击或者完成特定动作时,...
USB触摸屏技术在现代电子设备中扮演着至关重要的角色,特别是在Android系统中。"hid-multitouch"是USB触摸屏驱动程序的一个关键组件,它允许设备识别并处理来自多点触控屏幕的输入。本文将深入探讨USB触摸屏源文件...
在移动设备上,触摸屏已经成为主流的交互方式,而“方向触屏移动”是指通过在屏幕上模拟方向键点击来控制游戏或应用中的物体移动的技术。这个功能尤其在没有物理按键的智能手机和平板电脑中十分常见,它使得用户可以...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
本文将深入探讨如何模拟手机端和OTT(Over-The-Top,即通过互联网提供电视服务)设备上的Android屏保制作,以及如何在设定的时间内监听触屏事件和遥控器按键输入。 首先,我们需要了解Android屏保的工作原理。...
首先,Android系统支持多种输入方式,包括触摸屏、物理键盘、蓝牙键盘、游戏控制器和红外遥控器等。这些设备产生的输入事件会通过Android的输入系统进行处理,然后传递给相应的应用程序。开发者需要确保他们的应用...
在Android UI设计中,TextView是用于显示单行或多行文本的视图组件,它在许多界面元素中都扮演着重要角色。本主题将探讨如何利用TextView来模拟按键效果,为用户提供交互式的菜单体验。在创建这样的菜单时,我们通常...
在Android开发过程中,有时我们需要在命令行环境下模拟用户的各种输入事件,例如输入文字、按键操作、触摸屏手势等。这通常用于自动化测试、调试或创建自定义脚本。`adb shell input`命令提供了这样的功能,它允许...
《very-angry-robots-android》是一款基于LibGDX框架开发的Android游戏示例项目,其设计理念在于为开发者提供一个可学习和借鉴的基础模板。LibGDX是一个强大的跨平台游戏开发框架,支持Android、iOS、桌面(Windows...
为了使游戏更适合触摸屏设备,开发者需要重新设计游戏的输入系统。这可能包括监听屏幕上的滑动事件,或者创建虚拟按键来模拟方向控制。虚拟键盘通常会出现在屏幕的一侧或底部,用户可以通过点击或滑动这些按键来控制...
在本项目中,我们主要探讨的是一个Android应用的开发,其目标是仿制"快按钮",如360智键或米键等实体设备的功能。这类设备通常用于简化手机操作,提供一键触发某些功能的便捷方式。在这个毕业设计中,我们将深入研究...
可以重写`onKeyDown`方法,处理方向键的输入。 ```java @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_UP: // 处理上键事件 break; ...
本文将深入探讨"具有触摸屏的设备中的滚动装置及方法"这一重要知识点,旨在揭示如何在这些设备中实现高效、流畅的用户交互体验。 一、触摸屏技术基础 触摸屏是一种允许用户通过直接触碰屏幕与设备进行交互的输入...