SmerxDimas
@SmerxDimas
Начинающий разработчик на Java

Вопрос новичка по графике Android Studio. Как работает canvas?

Ребятки, помогите, пожалуйста, новичку по Android

Уффф, прямо не знаю с чего начать, самый первый вопрос, надеюсь поможете(
Дело вот в чём: мне необходимо написать игру, суть игры думаю, что не важна, проблема в отображении графики. У меня есть метод protected void onDraw(Canvas canvas). В нём идёт начальное отображение уровня на канве. в нём срабатывает вызов Timer.
Timer t = new Timer(player,canvas); //player объект моего игрока где координаты и свой paint
t.start();//Запускаем таймер

Потом таймер с интервалом в секунду вызывает метод update(player,canvas) он отдаёт туда тот же объект Canvas и и тот же объект игрока. Но в нём и потом появляется ошибка, точнее просто вылет приложения
Вот update(c,p);

Код
protected void update (Player player,Canvas canvas){
       player.setX1(player.getX1() + Vx);
       player.setY1(player.getY1() + Vy);
       Log.d("MyTag",String.valueOf(player.getX1()));
      Log.d("MyTag",String.valueOf(player.getY1()));
      try {if (canvas != null){
          canvas.drawCircle(player.getX1(), player.getY1(), player.getRadius(), player.getPaint());} //на этой строке происходит вылет. Canvas не NULL. По идее можно рисовать
      }
    catch (Exception e){Log.d("MyTag","NULL");}
    }


Вот Timer

Код
public class Timer extends CountDownTimer {
        int i;
        public Player player;
        public Canvas  canvas;


        public Timer(Player player, Canvas canvas) {
            super(Integer.MAX_VALUE, 1000);
            this.player=player;
            this.canvas=canvas;

        }


        @Override
        public void onTick(long millisUntilFinished) {
            update(this.player,this.canvas);
            i+=1;
            Log.d("MyLog",Integer.toString(i));
        }

        @Override
        public void onFinish() {

        }

Ребята, пожалуйста, помогите. Все были новичками(
  • Вопрос задан
  • 1084 просмотра
Решения вопроса 1
KuSu
@KuSu
Android разработчик
Начну с того, что для такого лучше использовать SurfaceView.
Но если говорить о текущей реализации, то не рисуй на canvas в таймере. Измени координаты игрока и вызови у view метод invalidate(). А в методе onDraw возьми координаты и перерисуй canvas
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
1) Код - в тег "код". нечитабельно же.
2) Логи, ошибки - где? Там и номера строк, и формулировка, и все вот это. Начинать надо ВСЕГДА с логов.
3) Использовать чистый канвас для игры - так себе идея. Разве что это игра уровня крестиков-ноликов. Хоть сколько то динамическую картинку канвас не потянет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы