我正在为Android平台开发我的第一个视频游戏,作为一个晚上和周末的项目。
它进展得很好,但我对控件的感知度非常不满意。
在这个游戏中,你在屏幕上左右移动一个物体。在屏幕的底部是一个类似于“触摸板”的东西,这是你的手指应该休息的地方。
/-------------------------\
| |
| |
| |
| Game Area |
| |
| |
| |
| |
| |
/-------------------------\
| |
| Touch Area |
| |
\-------------------------/我目前正在使用一个状态变量来保存"MOVING_LEFT,MOVING_RIGHT,NOT_MOVING“,并根据该变量更新每一帧播放器对象的位置。
然而,我的读取触摸屏输入并设置此状态变量的代码要么太敏感,要么太滞后,这取决于我如何调整它:
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开发人员已经想出了如何通过触摸屏做好控制,并可以给出一些建议。
发布于 2009-03-15 02:24:59
你可以在Windows上尝试类似于“拖动矩形”的操作。当您在某物上按住鼠标按键时,直到鼠标移出鼠标按下位置周围的一个小区域时,才会开始拖动操作。原因是很难在单击时将光标保持在相同的像素上。
因此,第一次尝试可能是(int)e.getX() >= this.mTouchX + DEAD_ZONE,对于另一种情况也类似,其中DEAD_ZONE是一个小整数。
然而,这并不涉及在同一划程中转身。您可以通过仅当当前位置在右转后最后一个位置左侧的DEAD_ZONE像素时才向左转来解决此问题,反之亦然。
发布于 2009-03-15 02:39:57
一个明显的问题是,你没有考虑到自最后一次触摸以来的时间。
我建议你在-x/+x和-y/+y的模拟范围内,将玩家的触觉视为期望运动的表达,然后根据时间在其他地方执行实际运动。
例如。
objectPos += objectPos + (joyPos * timeDelta * maxSpeed);因此,如果你的物体的最大速度是10ms-1,玩家的手指在控制板上的位置是0.5,那么物体每秒将移动5米。如果你的游戏以10fps的速度运行,那么每一帧对象将移动0.5米。
这些数字是虚构的,但希望能证明需要将控制与移动分开,然后再考虑时间因素。
https://stackoverflow.com/questions/647112
复制相似问题