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