Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中从onTouchEvent获取X和Y值_Java_Android - Fatal编程技术网

Java 在android中从onTouchEvent获取X和Y值

Java 在android中从onTouchEvent获取X和Y值,java,android,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 { fi

我正在开发一款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;
    }

}
这段代码是我为在renderer类中处理冲突检测而编写的

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");
            }
        }
    }
}
private void detectCollisionsOnPlayer(){
float playerPosX=DukesGame.getPlayerX();
float playerPosY=DukesGame.getPlayerY();
字符串posx=Float.toString(playerPosX);
字符串posy=Float.toString(playerPosX);
Log.d(posx,posy);
对于(int d=0;d<3;d++){
对于(int x=0;x

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

我建议您使用一个界面,而不是设置静态值。

什么是
event.getX()
和另一个返回?每次触摸屏幕时,它都会获取播放器飞机的X和Y位置。我想传递的是,当你玩游戏时,屏幕上到底发生了什么,飞机刚刚坠落……触摸事件不起作用。或者是发生了别的事情。我查看了你的代码,我不明白为什么这些值没有得到更新……因为你已经声明了
publicstaticfloatplayerposx,playerPosY当你尝试DukesGames.playerPosX时会发生什么?
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");
            }
        }
    }
}