2015-05-28 2 views
0

Я хочу установить событие касания, которое возникает только при касании объекта игрока. Но почему мой класс игрока по-прежнему не может использовать метод setOnTouchListener? Я положил его в главном классе, который расширяет SurfaceView и реализует SurfaceHolder.Callback, он говорит, что не может разрешить символ наНе удается разрешить набор символовOnTouchListener

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

Моего класс игрока проходит GameObject (это просто абстрактный класс, содержащий свойство объекта) и реализует View.OnTouchListener , Я также переопределяю метод в самом классе игрока.

@Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return true; 
    } 

Любая идея? Благодарю.

EDIT:

@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); 
    safeArea = new SafeArea(WIDTH/2,HEIGHT/2,100,40); 
    bouncer = new ArrayList<Bouncer>(); 

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

    //Start the game loop 
    thread.setRunning(true); 
    thread.start(); 
    setOnTouchListener(player); 
} 
+0

Что ваш импорт выглядеть? –

+0

в классе игроков: import android.graphics.Bitmap; import android.graphics.Canvas; импорт android.view.MotionEvent; импорт android.view.View; @KristyWelsh – user3411184

ответ

1

Как вы сказали Класс player «s реализует View.OnTouchListener. Очевидно, class View.OnTouchListener не имеет метода setOnTouchListener().

Вы должны пересмотреть свое намерение. Вы хотите, чтобы player вместо View? Или чьи OnTouchListener вы хотите установить на самом деле?

Поскольку ваш «основной класс» расширяет SurfaceView, это выглядит, как вы можете

setOnTouchListener(player); 

, который устанавливает player как OnTouchListener экземпляра «основной класс», который также является SurfaceView и, таким образом, является View ,

Для определения player.onTouch(), вы должны определить его в классе Player как:

class Player implements View.OnTouchListener // extends GameObject ? 
{ 
    // ... 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return true; 
    } 
} 
+0

Я попытался реализовать только Просмотр, но он говорит, что интерфейс здесь ожидается, поэтому я попытался реализовать View.OnTouchListener вместо этого и подумал, что это будет то же самое. Мой плохой тогда, так есть какое-то решение этого? Спасибо – user3411184

+0

@ user3411184 Обновлено. 'View' может быть расширен только, но вы расширили' GameObject'. Таким образом, я предполагаю ваше намерение, как описано в моем ответе. – timrau

+0

wow thanks Я думаю, что он начинает работать, но еще один шаг, как вызвать функцию onTouch? поскольку теперь мы не устанавливаем функцию onTouch внутри метода setOnClickListener. – user3411184

0

Попробуйте

OnTouchListener X_ol = new OnTouchListener() { 
    @Override 

    public boolean onTouch(View p_v, MotionEvent p_event) { 

     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     //Insert desired code here 
     return true; 
    } 
    return false; 
    } 
}; 

player.setOnTouchListener(X_ol); 

} 
Смежные вопросы