Форум программистов, компьютерный форум CyberForum.ru

Падает скорость объектов на экране при нажатии - Android

Восстановить пароль Регистрация
 
fanatjan
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 51
22.03.2015, 13:44     Падает скорость объектов на экране при нажатии #1
Привет. У меня возникла проблема. Создал маленькую игру, На экране двигаются несколько объектов, а один из них двигается в зависимости от нажатия и движения пальцем по экрану. Проблема в том что при нажатии скорость других объектов падает, они как бы начинают подтормаживать. Насколько я понимаю это из за частого вызова onTouchEvent.
Вот здесь рисую все объекты
Java
1
2
3
4
5
6
7
8
9
protected void MyOnDraw(Canvas canvas) 
{
Iterator<Enemy> i = enemy.iterator();
          while(i.hasNext()) {
              Enemy e = i.next();
              e.MyOnDraw(canvas);
              //canvas.drawCircle(e.m_x+e.myWidth/2, e.m_y+e.myWidth/2, e.myWidth/2, paint);
          }
touch_obj.MyOnDraw(canvas, X, Y);
Вот здесь беру координаты
Java
1
2
3
4
5
6
7
8
9
public boolean onTouchEvent(MotionEvent event)  
    {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_MOVE:
                {
                        float X=(float)event.getRawX();
                        float Y=(float)event.getRawY();
                }
    }
Что нужно сделать чтобы onDraw не тормозил. Можно ли как то кинуть onTouchEvent в отдельный поток, или отрегулировать частоту его вызова?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1868 / 1602 / 493
Регистрация: 12.05.2014
Сообщений: 5,796
Завершенные тесты: 1
22.03.2015, 17:18     Падает скорость объектов на экране при нажатии #2
первый кусок кода какой-то бред вообще, я так и не смог постичь его логику
fanatjan
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 51
22.03.2015, 21:18  [ТС]     Падает скорость объектов на экране при нажатии #3
Что конкретно ты не понял. "e.MyOnDraw(canvas);" - рисую несколько объектов. "touch_obj.MyOnDraw(canvas, X, Y);" рисую объект который перетаскивается по экрану. Ниже в onTouchEvent задаю X, Y координаты.
Проблема в том что во время перетаскивания, остальные объекты подтормаживают.
Паблито
не спать!
1868 / 1602 / 493
Регистрация: 12.05.2014
Сообщений: 5,796
Завершенные тесты: 1
23.03.2015, 09:29     Падает скорость объектов на экране при нажатии #4
по строчкам:
- заходим в метод MyOnDraw()
- получаем итератор
- идем по списку и у каждого объекта в списке снова вызываем MyOnDraw() в котором снова получаем итератор и так далее

где логика?
fanatjan
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 51
23.03.2015, 16:33  [ТС]     Падает скорость объектов на экране при нажатии #5
"в котором снова получаем итератор"
Я просто передаю canvas в классе Enemy он уже рисует "canvas .drawBitmap(bmp, src, dst, paint);"
В чем тут проблема?
Паблито
не спать!
1868 / 1602 / 493
Регистрация: 12.05.2014
Сообщений: 5,796
Завершенные тесты: 1
23.03.2015, 16:39     Падает скорость объектов на экране при нажатии #6
вот для интереса, сразу перед этой строкой
Java
1
Iterator<Enemy> i = enemy.iterator();
попробуй выводить что-нибудь в консоль, любой символ или строчку
а потом посмотри сколько раз он его выведет при касании экрана

если я правильно прочитал код - там рекурсия получается, что бы понять почему тормозит надо сначала распутать эту бороду в коде

если там нет рекурсии то я очень извиняюсь, нуб и опозорился
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 817
23.03.2015, 16:52     Падает скорость объектов на экране при нажатии #7
Паблито,
Цитата Сообщение от Паблито Посмотреть сообщение
если там нет рекурсии то
увы, там ее нет)
написано же e.MyOnDraw(canvas);
MyOnDraw - разные методы, один для сцены, другой для Enemy как я понял.
Паблито
не спать!
1868 / 1602 / 493
Регистрация: 12.05.2014
Сообщений: 5,796
Завершенные тесты: 1
23.03.2015, 16:57     Падает скорость объектов на экране при нажатии #8
я сказал спасибо, но по-прежнему считаю что она там есть
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 817
23.03.2015, 17:03     Падает скорость объектов на экране при нажатии #9
Паблито, ну если нам fanatjan предоставит реализацию метода Enemy.MyOnDraw(canvas), то сможем убедится в присутствии рекурсии, либо же ее отсутствии
fanatjan
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 51
23.03.2015, 17:19  [ТС]     Падает скорость объектов на экране при нажатии #10
Паблито
Вот так печатаю в логе, у меня там 4 объекта рисуется.
Java
1
2
3
4
5
6
7
8
9
int num = 0;
while(i.hasNext()) 
          {
              num++;
              Enemy e = i.next();
              e.MyOnDraw(canvas);
              Log.d("num = " + Integer.toString(num), " ");
              //canvas.drawCircle(e.m_x+e.myWidth/2, e.m_y+e.myWidth/2, e.myWidth/2, paint);
          }
Вот результат
03-23 18:18:31.145: D/num = 1(13807):
03-23 18:18:31.856: D/num = 2(13807):
03-23 18:18:32.957: D/num = 3(13807):
03-23 18:18:34.258: D/num = 4(13807):
Никакой рекурсии там нет.
Паблито
не спать!
1868 / 1602 / 493
Регистрация: 12.05.2014
Сообщений: 5,796
Завершенные тесты: 1
23.03.2015, 17:25     Падает скорость объектов на экране при нажатии #11
то есть существует два класса, в которых есть метод void MyOnDraw(Canvas canvas) ?
вот беда
fanatjan
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 51
23.03.2015, 17:29  [ТС]     Падает скорость объектов на экране при нажатии #12
В смысле?Рисовать все нужно только в одном onDraw? но так же получается достаточно проблематично. Что мне все в одном классе реализовать?)))
Паблито
23.03.2015, 17:30
  #13

Не по теме:

я имел ввиду что есть класс Enemy и еще какой-то другой класс, в котором есть два метода с одинаковым названием?
тот код из первого сообщения, он из какого класса?

fanatjan
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 51
23.03.2015, 17:36  [ТС]     Падает скорость объектов на экране при нажатии #14
Паблито Есть 2 класса в которых методы с одинаковым названием(У каждого по 1 MyOnDraw), MyOnDraw - рисуют объекты данного класса.

Добавлено через 1 минуту
Ребят а по проблеме догадки какие нибудь есть? В коком направлении копать?
Паблито
23.03.2015, 17:39
  #15

Не по теме:

это и были догадки по проблеме, кто мог подумать
а где сам код, который рисует?

fanatjan
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 51
23.03.2015, 17:45  [ТС]     Падает скорость объектов на экране при нажатии #16
Java
1
2
3
4
5
6
7
8
9
                matrix.postRotate(matrix_angle, (myWidth / 2), (myHeight / 2)); //rotate it
                matrix.postTranslate(x, y); //move it into x, y position
                //c.drawBitmap(bmp, src,dst, null); //draw the ball with the applied matrix
 
                // method two 
                c.save(); //save the position of the canvas
                c.rotate(matrix_angle, x + (myWidth / 2), y + (myHeight / 2)); //rotate the canvas' matrix
                c.drawBitmap(bmp, src, dst, paint);
                c.restore(); //rotate the canvas' matrix back
Ну вот часть кода который рисует в Enemy, но тормозить игра начинает когда я пытаюсь брать координаты из onTouchEvent, с рисованием проблем вроде бы нету. Можно ли как то кинуть onTouchEvent - в поток?
Паблито
не спать!
1868 / 1602 / 493
Регистрация: 12.05.2014
Сообщений: 5,796
Завершенные тесты: 1
23.03.2015, 20:06     Падает скорость объектов на экране при нажатии #17
код в первом сообщении в onTouchEvent это все или еще есть что-то?
а то подозрительно мало, две строки с локальными x y
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2015, 21:59     Падает скорость объектов на экране при нажатии
Еще ссылки по теме:

Android Ошибка при нажатии
Android Ошибка при нажатии на кнопку
Программа падает при попытке задать текст TextView в диалоговом окне Android
Вылетает приложение при нажатии на кнопку Android
Android Клиент падает при запуске

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fanatjan
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 51
24.03.2015, 21:59  [ТС]     Падает скорость объектов на экране при нажатии #18
Там так.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public boolean onTouchEvent(MotionEvent event)  
    {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_MOVE:
                {
                        X=(float)event.getRawX();
                        Y=(float)event.getRawY();
                        X=X-(this.getWidth()-bmp_jostic_bg.getWidth());
                        Y=Y-(this.getHeight()-bmp_jostic_bg.getHeight());
                        js.drawStick(event, X,Y);
                        X=js.getX();
                        Y=js.getY();
                }
    }
js.drawStick - это класс который у меня рисует джойстик, от него и берутся новые координаты для touch_obj.
Вот функция js.drawStick
Java
1
2
3
4
5
public void drawStick(MotionEvent arg1, float setX, float setY) {
        position_x = (int) (setX - (myWidth/ 2));
        position_y = (int) (setY - (myHeight / 2));
        distance = (float) Math.sqrt(Math.pow(position_x, 2) + Math.pow(position_y, 2));
        angle = (float) cal_angle(position_x, position_y);
Yandex
Объявления
24.03.2015, 21:59     Падает скорость объектов на экране при нажатии
Ответ Создать тему
Опции темы

Текущее время: 07:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru