画面上に 2 つのコントロール スティック (円) がある 2D アクション シューティング ゲームのシンプルな Android ゲームを作成しようとしています。左は移動コントロール、右は武器コントロールです。方向は、円の中心に対する親指の位置によって制御されています。
私はこのサイトのチュートリアルに従っています: http://www.kilobolt.com/day-7-creating-an-android-game-from-start-to-finish.htmlしかし、それは私に基礎を与えただけでした取り組む。私はプログラミングの経験がないので、今はかなり迷っています。
私は TOUCH_DOWN イベントでのみ動作する動きを得ました。ヒーローは本来あるべき場所に移動しますが、方向を変えるには、親指を持ち上げて円に再度触れる必要があります。TOUCH_DRAGGED (または ACTION_MOVE) が壊れているのは、円を横切って指をドラッグすると、キャラクターが非常に速く動くためです。問題は処理されるタッチ イベントが多すぎることだと思いますが、それを修正する方法がわかりません。
親指を円の周りにドラッグすると、ヒーローが即座に方向を変え、速度を常に一定に保つように、これを変更するにはどうすればよいですか? また、タッチする円の中心からどれだけ近くても遠くても、速度は同じでなければなりません。
private void updateRunning(List<TouchEvent> touchEvents, float deltaTime) {
int len = touchEvents.size();
for (int i = 0; i < len; i++) {
TouchEvent event = touchEvents.get(i);
if (event.type == TouchEvent.TOUCH_DOWN || event.type == TouchEvent.TOUCH_DRAGGED) {
if (inBounds(event, 50, 300, 150, 150, 'c')) {
ctrl.setX(event.x);
ctrl.setY(event.y);
ctrl.direction();
hero.move(ctrl.getDirX(), ctrl.getDirY());
}
}
if (event.type == TouchEvent.TOUCH_UP) {
if (inBounds(event, 0, 0, 35, 35,'r')) {
pause();
}
hero.stopMove();
}
}
hero.update();
動き: hero.update() 呼び出しごとに、ヒーローの speedX と speedY がヒーローの centerX と centerY に追加されます。
public void move(float x, float y) {
speedX += x * MOVESPEED;
speedY += y * MOVESPEED;
}
x & y 速度を処理するこのメソッド。ここでstackoverflowで見つけました.touch_downイベントは正常に機能しているため、仕事をしていると思います。私はそれが本来あるべき姿ではないと感じていますが。L_STICK_C は、100 と 350 (円の中心) の値を持つ定数です。
public void direction() {
dir.x = x - L_STICK_C.x;
dir.y = y - L_STICK_C.y;
double hyp = Math.sqrt(dir.x * dir.x + dir.y * dir.y);
dir.x = (float) (dir.x / hyp);
dir.y = (float) (dir.y / hyp);
}