java - 从 android 中的 onTouchEvent 获取 X 和 Y 值

标签 java android

我正在开发一款 Android 飞机射击游戏,每次玩家移动飞机时我都需要获取 X 和 Y 位置以检测碰撞。

下面的类处理玩家飞机的运动

package com.pe44.dukes;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;

public class DukesGame extends Activity {
    final DukesEngine gameEngine = new DukesEngine();
    private DukesGameView gameView;
    public static float playerPosX, playerPosY;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        gameView = new DukesGameView(this);
        setContentView(gameView);
    }
    @Override
    protected void onResume() {
       super.onResume();
       gameView.onResume();
    }

    @Override
    protected void onPause() {
       super.onPause();
       gameView.onPause();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //
        playerPosX = event.getX();
        playerPosY = event.getY();
        String SPposX = Float.toString(playerPosX);
        String SPposY = Float.toString(playerPosY);
        Log.i(SPposX, SPposY);
        int height = DukesEngine.display.getHeight() / 4;
        int playableArea = DukesEngine.display.getHeight() - height;
        if (playerPosY > playableArea){
            switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                if(playerPosX < DukesEngine.display.getWidth() / 2){
                    DukesEngine.playerFlightAction = DukesEngine.player_turn_left;
                }else{
                    DukesEngine.playerFlightAction = DukesEngine.player_turn_right;
                }
                break;
            case MotionEvent.ACTION_UP:
                DukesEngine.playerFlightAction = DukesEngine.PLAYER_RELEASE;
                break;
            }

        }

        return false;
    }
    public static float getPlayerX(){
        return playerPosX;
    }
    public static float getPlayerY(){
        return playerPosY;
    }

}

我需要传递playerPosX = event.getX();和playerPosY = event.getY();到我的渲染器类中,它将处理碰撞检测。

我创建了两个 get 方法

public static float getPlayerX(){
    return playerPosX;
}
public static float getPlayerY(){
    return playerPosY;
}

我编写的用于处理渲染器类中的碰撞检测的代码

private void detectCollisionsOnPlayer(){
    float playerPosX = DukesGame.getPlayerX();
    float playerPosY = DukesGame.getPlayerY();
    String posx = Float.toString(playerPosX);
    String posy = Float.toString(playerPosX);
    Log.d(posx,posy);
    for (int d = 0; d < 3; d++){
        for (int x = 0; x < DukesEngine.total_fighters + DukesEngine.total_jets + DukesEngine.total_warships - 1; x++ ){
            if(enemies[x].posX == playerPosX && enemies[x].posY == playerPosY ){
                Log.d("Game Over", "game over");
            }
        }
    }
}

由于某种原因,X 和 Y 值没有传递到我在 DukesGame 类中创建的两个方法中。谁能提出这个问题的解决方案?

最佳答案

我建议您使用接口(interface)而不是设置静态值。

关于java - 从 android 中的 onTouchEvent 获取 X 和 Y 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30056470/

相关文章:

Android Studio Gradle 错误

java - 如何将 Apache cookie 转换回字符串?

c# - 存在哪些开源空间索引库?

php - 从 Android 接收 PHP 脚本中的 JSON 对象

java - 从 Android 中的 ListView 适配器中删除参数错误

android - LocationManager 与 Google Maps API 的准确性

Android 从触摸位置开始拖动

java - Android 获取日期前 7 天(一周)

java - 目标无法到达,标识符 'demoBean' 解析为空

java - 为什么这个图形对象不绘画? (我究竟做错了什么?)