Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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如何仅将motion onTouchEvent设置为某些对象_Java_Android_Touch Event - Fatal编程技术网

Java如何仅将motion onTouchEvent设置为某些对象

Java如何仅将motion onTouchEvent设置为某些对象,java,android,touch-event,Java,Android,Touch Event,最近,我从一些教程中学习了如何使屏幕的任何部分接收触摸输入,但我想知道如何仅为某些按下的对象提供onTouchEvent。我还研究过,如果我想这样做,我需要让对象的类扩展视图,尽管我仍然不知道如何做。不幸的是,我的班级已经扩展了另一个班级。 那么,如何将onTouchEvent仅设置为player对象呢? 另外,当前我的代码从触摸屏的任何部分接收触摸事件 主要代码: public class GamePanel extends SurfaceView implements SurfaceHold

最近,我从一些教程中学习了如何使屏幕的任何部分接收触摸输入,但我想知道如何仅为某些按下的对象提供onTouchEvent。我还研究过,如果我想这样做,我需要让对象的类扩展视图,尽管我仍然不知道如何做。不幸的是,我的班级已经扩展了另一个班级。 那么,如何将onTouchEvent仅设置为player对象呢? 另外,当前我的代码从触摸屏的任何部分接收触摸事件

主要代码:

public class GamePanel extends SurfaceView implements SurfaceHolder.Callback{
public GamePanel(Context context){
    super(context);

    //Add callback to the surfaceview to intercept events
    getHolder().addCallback(this);

    //Make GamePanel focusable so it can handle events
    setFocusable(true);
}
@Override
public void surfaceCreated(SurfaceHolder holder){
    bg = new Background(BitmapFactory.decodeResource(getResources(),R.drawable.background));
    player = new Player(BitmapFactory.decodeResource(getResources(),R.drawable.character),WIDTH/2,HEIGHT/2+40,80,75,14);
    bouncer = new ArrayList<Bouncer>();

    thread = new MainThread(getHolder(), this);

    //Start the game loop
    thread.setRunning(true);
    thread.start();

}
@Override
public boolean onTouchEvent(MotionEvent event){
    if(event.getAction() == MotionEvent.ACTION_DOWN){
        //if not jumping
        if(!player.getIsJumping() && !player.getFall()) {
            //set temp to store distance that should be travelled
            double temp = 1.06 * (bouncer.get(bouncerIndex).getY()-bouncer.get(bouncerIndex+1).getY());
            //setDy based on s = v0*t + 1/2*a*t^2
            player.setDy(((int)Math.ceil((temp+450)/30))*-1);
            player.setIsJumping(true);
            jumpStartTime = System.nanoTime();
        }
        return true;
    }
    if(event.getAction() == MotionEvent.ACTION_UP){
        return true;
    }
    return super.onTouchEvent(event);
}
}
对不起,代码不整洁。谢谢

就在这里ifevent.getAction==MotionEvent.ACTION\u向下。这可能就是原因

当前我的代码从触摸屏的任何部分接收触摸事件

将ontouchlistener仅设置为播放器而不是实现它怎么样

有点像

player.setOnTouchListener(new View.OnTouchListener() {               
        public boolean onTouch(View v, MotionEvent event) {             

            int action = event.getAction();
            switch (action) {

            case MotionEvent.ACTION_DOWN:
                Log.i("PLAYER", "image has been touched"); 
             //if not jumping
               if(!player.getIsJumping() && !player.getFall()) {
            //set temp to store distance that should be travelled
              double temp = 1.06 * (bouncer.get(bouncerIndex).getY()-      bouncer.get(bouncerIndex+1).getY());
            //setDy based on s = v0*t + 1/2*a*t^2
              player.setDy(((int)Math.ceil((temp+450)/30))*-1);
              player.setIsJumping(true);
              jumpStartTime = System.nanoTime();
                }  


                break;


            }               
            return false;
        }
    });

希望这有帮助。

它不起作用。无法解析符号“setOnTouchListener”和“event”。我想它们可能不起作用,因为GamePanel扩展了SurfaceView,而不是我的MainActivity类,只是一个所有游戏机制都由MainActivity调用的类。对不起,我已经编辑了一些代码以提供进一步的信息。仍然需要帮助。谢谢,我的意思是,如果我没弄错的话,setOnTouchListener只有在类正确扩展活动或视图的情况下才有效?因为我的类既不扩展活动也不扩展视图,所以我不知道如何使用setOnTouchListener。
public abstract class GameObject {
protected int x;
protected int y;
protected int width;
protected int height;
protected int dx;
protected int dy;

public void setX(int x){
    this.x = x;
}

public void setY(int y){
    this.y = y;
}

public int getX(){
    return x;
}

public int getY(){
    return y;
}
}
player.setOnTouchListener(new View.OnTouchListener() {               
        public boolean onTouch(View v, MotionEvent event) {             

            int action = event.getAction();
            switch (action) {

            case MotionEvent.ACTION_DOWN:
                Log.i("PLAYER", "image has been touched"); 
             //if not jumping
               if(!player.getIsJumping() && !player.getFall()) {
            //set temp to store distance that should be travelled
              double temp = 1.06 * (bouncer.get(bouncerIndex).getY()-      bouncer.get(bouncerIndex+1).getY());
            //setDy based on s = v0*t + 1/2*a*t^2
              player.setDy(((int)Math.ceil((temp+450)/30))*-1);
              player.setIsJumping(true);
              jumpStartTime = System.nanoTime();
                }  


                break;


            }               
            return false;
        }
    });