首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TouchScreens进行游戏控制

使用TouchScreens进行游戏控制
EN

Stack Overflow用户
提问于 2009-03-15 02:05:14
回答 2查看 483关注 0票数 8

我正在为Android平台开发我的第一个视频游戏,作为一个晚上和周末的项目。

它进展得很好,但我对控件的感知度非常不满意。

在这个游戏中,你在屏幕上左右移动一个物体。在屏幕的底部是一个类似于“触摸板”的东西,这是你的手指应该休息的地方。

代码语言:javascript
复制
/-------------------------\
|                         |
|                         |
|                         |
|       Game Area         |
|                         |
|                         |
|                         |
|                         |
|                         |
/-------------------------\
|                         |
|       Touch Area        |
|                         |
\-------------------------/

我目前正在使用一个状态变量来保存"MOVING_LEFT,MOVING_RIGHT,NOT_MOVING“,并根据该变量更新每一帧播放器对象的位置。

然而,我的读取触摸屏输入并设置此状态变量的代码要么太敏感,要么太滞后,这取决于我如何调整它:

代码语言:javascript
复制
public void doTouch (MotionEvent e) {
    int action = e.getAction();

    if (action == MotionEvent.ACTION_DOWN) {
        this.mTouchX = (int)e.getX();
        this.mTouchY = (int)e.getY();           
    } 
    else if (action == MotionEvent.ACTION_MOVE) {
        if ((int)e.getX() >= this.mTouchX) {
            this.mTouchX = (int)e.getX();
            this.mTouchY = (int)e.getY();   
            if (this.TouchRect.contains(this.mTouchX, this.mTouchY)) {              
                this.mTouchDirection = MOVING_RIGHT;
            }
        } 
        else if ((int)e.getX() <= this.mTouchX) {
            this.mTouchX = (int)e.getX();
            this.mTouchY = (int)e.getY();
            if (this.TouchRect.contains(this.mTouchX, this.mTouchY)) {              
                this.mTouchDirection = MOVING_LEFT;
            }
        }
        else {
            this.mTouchDirection = NOT_MOVING;
        }               
    } 
    else if (action == MotionEvent.ACTION_UP) {
        this.mTouchDirection = NOT_MOVING;
    }       
}

这个想法是,当有任何移动时,我检查用户手指的先前位置,然后确定移动播放器的方向。

这并不是很有效,我想这里有一些IPhone/Android开发人员已经想出了如何通过触摸屏做好控制,并可以给出一些建议。

EN

回答 2

Stack Overflow用户

发布于 2009-03-15 02:24:59

你可以在Windows上尝试类似于“拖动矩形”的操作。当您在某物上按住鼠标按键时,直到鼠标移出鼠标按下位置周围的一个小区域时,才会开始拖动操作。原因是很难在单击时将光标保持在相同的像素上。

因此,第一次尝试可能是(int)e.getX() >= this.mTouchX + DEAD_ZONE,对于另一种情况也类似,其中DEAD_ZONE是一个小整数。

然而,这并不涉及在同一划程中转身。您可以通过仅当当前位置在右转后最后一个位置左侧的DEAD_ZONE像素时才向左转来解决此问题,反之亦然。

票数 2
EN

Stack Overflow用户

发布于 2009-03-15 02:39:57

一个明显的问题是,你没有考虑到自最后一次触摸以来的时间。

我建议你在-x/+x-y/+y的模拟范围内,将玩家的触觉视为期望运动的表达,然后根据时间在其他地方执行实际运动。

例如。

代码语言:javascript
复制
objectPos += objectPos + (joyPos * timeDelta * maxSpeed);

因此,如果你的物体的最大速度是10ms-1,玩家的手指在控制板上的位置是0.5,那么物体每秒将移动5米。如果你的游戏以10fps的速度运行,那么每一帧对象将移动0.5米。

这些数字是虚构的,但希望能证明需要将控制与移动分开,然后再考虑时间因素。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/647112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档