Я работаю над своей первой видеоигрой для платформы 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, которые выяснили, как сделать хорошее управление с помощью сенсорного экрана, и могут дать несколько советов.