![]() |
Почему спрайт перестает поворачиваться, если значение угла больше 32768?
Спрайт прикручен к телу в box2d. Тело вращается (колесо). Rotation спрайт получает от угла тела. Угол тела box2d не обнуляется, за каждый пройденный круг прибавляется 2П радиан. После того, как вращение тела произошло более 91 раз, угол тела становится 2П * 91 = 571.76, что в градусах 91 * 180 * П = 32760. И колесо еще сможет сделать оборот на 8 градусов. Но более этого уже не сможет. То есть колесо не сможет сделать 91-ый оборот до конца.
Обхожу это следующим (проверка в каждом кадре): Код AS3:
|
32768, что то мне это число напоминает :-)))))))))))))))
По теме сделайте присвоение через сеттер/геттер. Т.е. если у вас полный круг превышен(360), то отнимайте 360 или кратно 360. Код:
wheelRotation%360 |
Спасибо! С остатком от деления действительно получается изящнее!
P.S. Может быть кто-нибудь знает корень проблемы? Почему так происходит? Почему спрайт не может поворачиваться, если значение более 32768? |
потому что на него отведено 2 байта, со знаком. Это max_value для SI16 = 32768
но, надеюсь, вы не в каждом кадре это проверяете, а при присвоении? |
В каждом кадре, так как присвоение в каждом кадре. Это плохо?
|
Недавно про него вспоминал, в прошлом году наткнулся. Тоже в box2d, колёса у машинки вращаться переставали. Почему так происходит не понятно. Ну. т.е. понятно что два байта, а почему именно два и почему в хелпе не написано об этом не ясно.
|
Цитата:
Добавлено через 39 секунд Цитата:
|
Каким образом переполнение сетки влияет на значение?
Код:
1110b + 1 = 1111b; |
Цитата:
|
| Часовой пояс GMT +4, время: 15:09. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.