加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 教程 > 正文

Android开发教程: 触摸屏模拟达成方向键

发布时间:2021-12-16 13:32:43 所属栏目:教程 来源:互联网
导读:改写Android的Snake例子,使之运行于我的三星手机上。判断规则如下:如果x方向移动距离大于y方向,则认为是水平移动,反之则是上下移动。如果水平移动,x移动正距离x-x00 则认为向右移动,负距离x-x00 则认为向左移动;上下移动的判断同理。 代码如下,需要

改写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;   
    }   
}  

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读