|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Человек и Здание
|
Ошибка в работе hitTest при rotation
Накопал ошибку hitTest, дает массу проблем.
Задача - двигать клип до пересечения с крестом (как точкой). Рисуем квадрат 200х200, конвертируем в мувиклип, даем имя mc, помещаем в координаты x=75 y=0 Рисуем крест, конвертируем в мувиклип, даем имя cross, помещаем в центр экрана В первый кадр помещаем код mc.onEnterFrame = function () { // this._rotation = 45; // *1 for (var i=0; i<400; i++) { // *2 this._x += 1; this._y += 1; if (this.hitTest(_root.cross._x, _root.cross._y, true)) { delete this.onEnterFrame; break; } } // *3 } Резюме: если объект повернут, flash получает информацию о кривых его потрохов только после обновления экрана (fps). Если объект не повернут, или повернут на +/- 90 +/-180, то все хорошо; если повернут, то используется "старое" положение, т.е. информацию о площади шейпа от предыдущего просчета объектов. updateAfterEvent не помогает. Идеи? Рисовать объект drawing-ом не катит, т.к. объект должен быть рисованым ручками.
__________________
Регардсы. Последний раз редактировалось Смольный (Smolniy); 15.07.2008 в 20:35. |
|
|||||
Человек и Здание
|
В финальной версии объект (квадрат в примере) будет _visible = false, кстати...
Нильс, у тебя же, в описании hitTest bitmap написано: Цитата:
__________________
Регардсы. |
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Сначала надо снять с помощью draw скриншот с объекта, указав при этом вторым параметром матрицу с текущими траснформациями клипа, тогда все будет идентично. Вопрос только в производительности.
|
|
|||||
Человек и Здание
|
_visible=false, какой скриншот???
Пойду на flashkit жаловаться...
__________________
Регардсы. |
|
|||||
Человек и Здание
|
Ну так он запрограммирован двигаться под углом 45 через центр экрана, если он промахивается мимо креста, конечно он не остановится. В том и задача - доехать до тайлов, имеющих в себе опорные точки (кресты, условно говоря), и об них удариться, т.е. остановиться. Просто обнаружил, что при повороте объекта (а он разумеется будет повернут), flash ошибается в том шаге, где коллизия реально происходит.
Ты говоришь "чуть"? Укажи точные координаты и размеры, проверю. bitmapData пользоваться не хочу, т.к. уверен в ее тормознутости. Скажем так, для обнаружения коллизии, я двигаю объект, тестю соударение, если оно есть - ищу ближайшую точку несоударения двоичным поиском, поэтому может быть 4-7 итераций за каждый fps для каждого движущегося объекта, что перебор...
__________________
Регардсы. Последний раз редактировалось Смольный (Smolniy); 15.07.2008 в 20:06. |
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Сделал исходник с примером.
Три объекта, двигаются по одной траектории и два объекта хит пойнта для хитТеста. mc - проскакивает оба хит пойнта. mc1 - хит тестится только с одним пойнтом cross и удачно срабатывает, однако, если хиттестить с cross1, то не работает. mc2 - опять хит тестится с обоими хит пойнтами, но без цикла и останавливается при соприкосновении с cross PS. Хм, в CS3 работает все как надо... А в standalone 9 опять косяки. Последний раз редактировалось iNils; 15.07.2008 в 20:26. |
|
|||||
Человек и Здание
|
Да.
Все так. У меня, например, клип нижней стороной проходил сквозь точку, а правой нет. Бардак, уродство. hitTest не работает корректно с динамически измененым положением объекта. Тьфу
__________________
Регардсы. |
Часовой пояс GMT +4, время: 02:33. |
|
« Предыдущая тема | Следующая тема » |
|
|