Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.11.2017, 20:32
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Слот СПИН, плавность

Всем привет. Честно говоря даже неудобно спрашивать такие вопросы, так как данной работой я зарабатываю деньги уже как лет 8 почти, но с другой стороны, я никогда не претендовал на гения математики или оптимизации...

По делу : чтобы всем было понятно, возьмем готовый с интернета пример о чем идет речь

http://snorkl.tv/dev/blitmask/slotDemo.html

В нашем случае таких барабанов 5, по 3 символа на барабане, ну то есть масштаб чуть больше.

Пишем мы на haxe, поэтому, если будете рассматривать твинеры и т.п. имеем только Actuate.

Далее описываю алгоритм, как это работает у меня :

сервер подает раскладки, у каждого барабана свое кол-во символов, от 20 до 500 например, то есть вариации приличные. Каждый символ некий класс на Bitmap (пускай просто картинка типа png). Каждый барабан хранит в себе маску, которая соответсвенно показывает на экране 3 символа, но держит за маской и остальные, например в 500 штук (общий контейнер). Спин происходит следующим образом, вешается таймер в 30-50 мс, с каждым тиком контейнер символов двигается на ровное кол-во px например на 20. Когда полоска символов доходит до конца, перекидывается на 0 и продолжается далее, чтобы не было швов 3 символа конца = 3 символам начала. В настойщий момент вешаю таймер в 1 мс и двигаю по 20пх (так выходит более плавно, чем таймер на 30мс и двигать по 60пх например). Вот собственно и все, в итоге конечно получается немного дерганно, не плавно, но как улучшить данный процесс, пока мозгов не хватило. Если же ранее мы могли использовать блитМаск, то теперь этого нет, да и не надо, не думаю, что все известные игроделы его юзают.

П.с. какие у меня есть идеи, но применять их пока не хочу, так как думается мне прирост будет совсем минимальный, но вдруг вы скажите, что прирост будет приличный :
1) сделать ОБЩУЮ маску на все 5 барабанов, а не у каждого барабана свою маску.
2) сделать ОБЩИЙ таймер на все 5 барабанов, а не у каждого свой.

П.п.с - само собой по скольку пишем на Хаксе, все это портируется как в swf так и в html5, так вот в html5, все то, что я описал выше работает очень плавно ( видимо там рендер по-другому пляшет , ну само собой )

Всем спасибо!
__________________
Марк Tween

Старый 27.11.2017, 20:42
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 2  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
а от чего бы не разбить на отдельные символы и для каждого барабана рисовать со смещением текущий+предыдущий+следующий символы? Это было бы оптимально с т.з. производительности.Листать портянку из 500 символов да еще и под маской никакой батарейки не хватит(если вы на мобилки собираетесь)

Старый 27.11.2017, 21:02
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от undefined Посмотреть сообщение
а от чего бы не разбить на отдельные символы и для каждого барабана рисовать со смещением текущий+предыдущий+следующий символы? Это было бы оптимально с т.з. производительности.Листать портянку из 500 символов да еще и под маской никакой батарейки не хватит(если вы на мобилки собираетесь)
Пожалуй плюсану к этому ответу. Это единственный нормальный сопособ отрисовать такую махину без видимых фризов.
Цитата:
так вот в html5, все то, что я описал выше работает очень плавно
Давно уже известно, что JS, в среднем, в 6 раз быстрее флеша
__________________
Ко мне можно и нужно обращаться на ты)

Старый 27.11.2017, 21:38
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Ну на мобилки не претендуем конечно.
undefined / caseyryan Плюсануть то можно, и это первоначальная идея была, когда я только начинал заниматься этим, однако смотрите сами : тут ты просто крутишь контейнер ничего другого не делая, а тут ты каждые 20 мс, будешь создавать новый битмап, ну или брать из массива ( по сути все равно в памяти будет висеть) то есть у тебя каждые 20 мс будет : bit = getImage("someNewPng"); хотите сказать это явно будет быстрее? Это перввый нюанс, второй нюанс : у нас на экране 20 картинок( по вашей логике), 4 на каждом, вот и смотри - как только 4й уходит за маску, его надо удалить со сцены или переместить наверх, затем сменить в нем Битмап( что я описал в первом нюансе) и продолжить движение, опять затраты производительности, ну и наконец!- самое печальное, что у тебя шанс того, что будет стык стремится к 100% , так как размер поля скажем 500, а двигать мы можем и по 14 пх, и по 13 пх, в зависимости от нужд, соответсвенно будут стыки, то есть не будет ровной проверки if(y == 500) будет проверка на if(y >= 500) - что скорее всего и произойдет в нескольких разах.
__________________
Марк Tween

Старый 27.11.2017, 21:55
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 5  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
а тут ты каждые 20 мс, будешь создавать новый битмап, ну или брать из массива ( по сути все равно в памяти будет висеть)
Так они и сейчас в памяти висят
Цитата:
а тут ты каждые 20 мс, будешь создавать новый битмап, ну или брать из массива ( по сути все равно в памяти будет висеть)
Взятие из массива намноого быстрее,чем отрисовка битмапы.
Цитата:
ну и наконец!- самое печальное, что у тебя шанс того, что будет стык стремится к 100% , так как размер поля скажем 500, а двигать мы можем и по 14 пх, и по 13 пх, в зависимости от нужд, соответсвенно будут стыки, то есть не будет ровной проверки
Смотри,ты анимируешь некий параметр t от 0 до 1.Смещение вычисляешь как dy=t*symbolHeight все.Больше никаких проверок не требуется.В конце анимации тебе просто надо переставить битмапы и повторить анимацию снова.Никаких стыков заметно быть не должно


Последний раз редактировалось undefined; 27.11.2017 в 22:08.
Старый 27.11.2017, 22:18
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
undefined - это всего лишь умозаключение - попробовал еще раз вернуться на старые грабли, потратил добрых 30 минут переписать все - плавности как не было так и нет, ниче не меняется.
__________________
Марк Tween

Старый 27.11.2017, 22:33
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 7  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Ты хочешь сказать что у тебя 15 битмап на экране тормозят?

Добавлено через 1 минуту
Цитата:
это всего лишь умозаключение
Это здравый смысл и общая практика - никогда не рисуй то,чего не видно

Старый 27.11.2017, 22:35
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 8  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
in4core
странно, на самом деле, вертеть портянку.
Я когда делал слоты, делал так - сначала математически "крутил" барабан из 500 слотов и сразу получал целевые слоты (допустим 3,7,0). Потом запускал анимацию, типа барабан крутится, все красиво, все довольны. Анимацию делал разными способами - один это просто размытое нечто пару-тройку секунд, второй - это подстановка вверх нового символа и прокрутка на слот вниз (для достижения именно такого эффекта, как в примере топикпастера). В общем, придолжном творческом подходе можно сделать очень даже симпатично и неотличимо от оригинала так сказать. Затем, по истечении заданного времени для анимации кручения, подставлял вверх три целевых слота и уже делал анимацию остановки твином там каким-нибудь.
Помню, делал так тоже для того, чтобы добиться производительности. У меня все летало.
__________________
while(live()) { hope(); }

Старый 27.11.2017, 22:41
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 9  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
еще одна засада с таким подходом - можно упереться в максимальный размер DO,он,конечно,большой,но не бесконечный.

Старый 27.11.2017, 23:08
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
а я вертел портянку. 5 столбиков по 200 картинок, 8 строк под маской, крутил 1 раз. Крутил ТвинЛайтом с небольшой задержкой между стартами для каждой колонки, и ТвинЛайтом же управлял БлюрФильтром. Не знаю, как с точки зрения вашего перфекционизма, а как по мне вполне убедительно крутилось.
Мне кажется, как раз портянка — лучшее решение для быстродействия: в процессе движения никаких созданий и перетасовываний не происходит, скачкам и задержкам просто неоткуда взяться.
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:23.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:23.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.