Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
1

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

22.03.2015, 13:44. Показов 719. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет. У меня возникла проблема. Создал маленькую игру, На экране двигаются несколько объектов, а один из них двигается в зависимости от нажатия и движения пальцем по экрану. Проблема в том что при нажатии скорость других объектов падает, они как бы начинают подтормаживать. Насколько я понимаю это из за частого вызова 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 в отдельный поток, или отрегулировать частоту его вызова?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2015, 13:44
Ответы с готовыми решениями:

При использовании свича скорость падает до 0
Добрый вечер! У меня интернет разделен на два компьтера свичем. Раньше скорость делилась на две...

падает скорость интернет при закачке файлов
пользуюсь usbмодемом . при закачке файлов dowload master скорость падает до нуля раньше этого не...

Падает скорость интернета при включенном компьютере
Здравствуйте, уважаемые пользователи форума! Уже год пытаюсь решить свою проблему с интернетом. ...

Падает скорость интернета при закачке торента
Здравствуйте! В общем проблема появилась вчера, до вчерашнего дня качал через торент со скоростью...

17
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
22.03.2015, 17:18 2
первый кусок кода какой-то бред вообще, я так и не смог постичь его логику
0
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
22.03.2015, 21:18  [ТС] 3
Что конкретно ты не понял. "e.MyOnDraw(canvas);" - рисую несколько объектов. "touch_obj.MyOnDraw(canvas, X, Y);" рисую объект который перетаскивается по экрану. Ниже в onTouchEvent задаю X, Y координаты.
Проблема в том что во время перетаскивания, остальные объекты подтормаживают.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
23.03.2015, 09:29 4
по строчкам:
- заходим в метод MyOnDraw()
- получаем итератор
- идем по списку и у каждого объекта в списке снова вызываем MyOnDraw() в котором снова получаем итератор и так далее

где логика?
1
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
23.03.2015, 16:33  [ТС] 5
"в котором снова получаем итератор"
Я просто передаю canvas в классе Enemy он уже рисует "canvas .drawBitmap(bmp, src, dst, paint);"
В чем тут проблема?
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
23.03.2015, 16:39 6
вот для интереса, сразу перед этой строкой
Java
1
Iterator<Enemy> i = enemy.iterator();
попробуй выводить что-нибудь в консоль, любой символ или строчку
а потом посмотри сколько раз он его выведет при касании экрана

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

если там нет рекурсии то я очень извиняюсь, нуб и опозорился
0
393 / 338 / 83
Регистрация: 17.10.2014
Сообщений: 1,007
23.03.2015, 16:52 7
Паблито,
Цитата Сообщение от Паблито Посмотреть сообщение
если там нет рекурсии то
увы, там ее нет)
написано же e.MyOnDraw(canvas);
MyOnDraw - разные методы, один для сцены, другой для Enemy как я понял.
2
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
23.03.2015, 16:57 8
я сказал спасибо, но по-прежнему считаю что она там есть
1
393 / 338 / 83
Регистрация: 17.10.2014
Сообщений: 1,007
23.03.2015, 17:03 9
Паблито, ну если нам fanatjan предоставит реализацию метода Enemy.MyOnDraw(canvas), то сможем убедится в присутствии рекурсии, либо же ее отсутствии
0
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
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):
Никакой рекурсии там нет.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
23.03.2015, 17:25 11
то есть существует два класса, в которых есть метод void MyOnDraw(Canvas canvas) ?
вот беда
1
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
23.03.2015, 17:29  [ТС] 12
В смысле?Рисовать все нужно только в одном onDraw? но так же получается достаточно проблематично. Что мне все в одном классе реализовать?)))
0
Pablito
23.03.2015, 17:30
  #13

Не по теме:

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

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

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

Не по теме:

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

0
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
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 - в поток?
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
23.03.2015, 20:06 17
код в первом сообщении в onTouchEvent это все или еще есть что-то?
а то подозрительно мало, две строки с локальными x y
0
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
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);
0
24.03.2015, 21:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2015, 21:59
Помогаю со студенческими работами здесь

Падает скорость отрисовки при transparent = true
вывожу на image1 через буфер. при отключенной прозрачности у image1 скорость отрисовки устраивает,...

При загрузке через GoogleChrome падает скорость до 0 Б/с
Windows 8.1. Роутер D-Link DIR300. Раньше было всё хорошо а щас такая фигня.

При подключении сегмента падает скорость интернета
Ситуация: Есть локальная сеть из трех сегментом и Вай-Фай. Все через Д-линк 2640 (роутер) с выходом...

Скорость процессора падает при включении игр
У меня когда не играю скорость 2.8 GHz Когда играю 1.87 GHz WTF Ноутбук lenovo g505s ЦП ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru