改写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;
}
}
分享到:
相关推荐
资源:【Android-钢琴模拟实现】
android-support-v4-v7-v13-v14-v17(官方最新完整版),官方最新版的,压缩包内包含android-support-v4、android-support-v7-appcompat,android-support-v7-cardview,android-support-v7-gridlayout,android-support-...
android-studio sdk 模拟 Android 1.5 到 2.3.1 的任一版本.part10.rar
Android----线程实现图片移动 , 运用线程实现图片的水平循环往返移动!
android-sdk\platforms\android-21
在开发中,有时候我们会在app中使用WebView加载一个web页面。这样可以适当减轻我们开发的难度...这里我们就利用动画,以及 获取网页的快照来实现android activity 默认的切换效果(页面从右往左进入,从左往右退出)。
将android-17.zip解压到 Android\android-sdk\platforms 文件夹下。
android 4.1 最新SDK Windows版: http://s1.eoeandroid.com/sdk/4.1/android-sdk_r20-windows.zip(推荐) http://s1.eoeandroid.com/sdk/4.1/installer_r20-windows.exe Mac版: ...
android--ListView实现聊天记录
android-sdk\platforms\android-20
android studio上使用zxing-android-embedded实现二维码生成和扫描
android-studio sdk 模拟 Android 1.5 到 2.3.1 的任一版本.part07.rar
android-studio sdk 模拟 Android 1.5 到 2.3.1 的任一版本.part12.rar
Android-PageTurner 真实模拟翻页效果源码
ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar 要是需要最新的,下载地址: http://code.google.com/p/ksoap2-android/
android--ListView实现带标题栏效果(附源码)
android-support-multidex解决Android Dex 65536 65k问题,解决方案来自严振杰的博客:http://blog.csdn.net/yanzhenjie1003/article/details/51818269
将android-18解压到Android\android-sdk\platforms下。
android-support-v13.jar android-support-v7-gridlayout.jar android-support-v7-appcompat.jar android-support-v4.jar