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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.08.2012, 22:30
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 1  
Ответить с цитированием
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
Question Почему спрайт перестает поворачиваться, если значение угла больше 32768?

Спрайт прикручен к телу в box2d. Тело вращается (колесо). Rotation спрайт получает от угла тела. Угол тела box2d не обнуляется, за каждый пройденный круг прибавляется 2П радиан. После того, как вращение тела произошло более 91 раз, угол тела становится 2П * 91 = 571.76, что в градусах 91 * 180 * П = 32760. И колесо еще сможет сделать оборот на 8 градусов. Но более этого уже не сможет. То есть колесо не сможет сделать 91-ый оборот до конца.
Обхожу это следующим (проверка в каждом кадре):
Код AS3:
var rotLimit:Number = 180 * 10;
while (wheelRotation > rotLimit) 
{
	wheelRotation -= rotLimit;
}
Но как-то не очень красиво получается. Может есть другие способы борьбы с этой проблемой?

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

Регистрация: Jul 2007
Сообщений: 393
32768, что то мне это число напоминает :-)))))))))))))))
По теме сделайте присвоение через сеттер/геттер. Т.е. если у вас полный круг превышен(360), то отнимайте 360 или кратно 360.
Код:
wheelRotation%360
, если кратко

Старый 19.08.2012, 23:05
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 3  
Ответить с цитированием
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
Спасибо! С остатком от деления действительно получается изящнее!
P.S. Может быть кто-нибудь знает корень проблемы? Почему так происходит? Почему спрайт не может поворачиваться, если значение более 32768?

Старый 19.08.2012, 23:13
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 4  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
потому что на него отведено 2 байта, со знаком. Это max_value для SI16 = 32768
но, надеюсь, вы не в каждом кадре это проверяете, а при присвоении?

Старый 20.08.2012, 00:36
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 5  
Ответить с цитированием
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
В каждом кадре, так как присвоение в каждом кадре. Это плохо?

Старый 20.08.2012, 12:26
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 6  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Недавно про него вспоминал, в прошлом году наткнулся. Тоже в box2d, колёса у машинки вращаться переставали. Почему так происходит не понятно. Ну. т.е. понятно что два байта, а почему именно два и почему в хелпе не написано об этом не ясно.
__________________
:)

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

Регистрация: Jul 2007
Сообщений: 393
Цитата:
Сообщение от Aquahawk Посмотреть сообщение
Недавно про него вспоминал, в прошлом году наткнулся. Тоже в box2d, колёса у машинки вращаться переставали. Почему так происходит не понятно. Ну. т.е. понятно что два байта, а почему именно два и почему в хелпе не написано об этом не ясно.
Потому что один байт мало, а три много. Поэтому два.

Добавлено через 39 секунд
Цитата:
Сообщение от gait Посмотреть сообщение
В каждом кадре, так как присвоение в каждом кадре. Это плохо?
Нет, поскольку у вас это одно и то же, то нормально.

Старый 20.08.2012, 17:45
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Каким образом переполнение сетки влияет на значение?
Код:
1110b + 1 =    1111b;
1111b + 1 = [1]0000b; -> новое значение 0000b;
0000b + 1 =    0001b;
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 20.08.2012, 19:23
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 9  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Цитата:
Каким образом переполнение сетки влияет на значение?
Код:
1110b + 1 = 1111b;
1111b + 1 = [1]0000b; -> новое значение 0000b;
0000b + 1 = 0001b;
неправда ваша. При установке больших значений вращения не происходит. Таким образом оно бы продолжилось с рывком
__________________
:)

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

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

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


 


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


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