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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.07.2008, 19:18
Смольный (Smolniy) вне форума Посмотреть профиль Отправить личное сообщение для Смольный (Smolniy) Посетить домашнюю страницу Смольный (Smolniy) Найти все сообщения от Смольный (Smolniy)
  № 1  
Ответить с цитированием
Смольный (Smolniy)
Человек и Здание
 
Аватар для Смольный (Smolniy)

администратор
Регистрация: Aug 1999
Адрес: Москау-сити, Рассея
Сообщений: 4,671
Отправить сообщение для Смольный (Smolniy) с помощью ICQ
По умолчанию Ошибка в работе 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
}
Вот и все. Запускаем, работает. Раскомментируем строку *1 - не работает. Закомментируем строки *2, *3, работает, но "проваливается" на 1 шаг.
Резюме: если объект повернут, flash получает информацию о кривых его потрохов только после обновления экрана (fps). Если объект не повернут, или повернут на +/- 90 +/-180, то все хорошо; если повернут, то используется "старое" положение, т.е. информацию о площади шейпа от предыдущего просчета объектов. updateAfterEvent не помогает.

Идеи?
Рисовать объект drawing-ом не катит, т.к. объект должен быть рисованым ручками.
__________________
Регардсы.


Последний раз редактировалось Смольный (Smolniy); 15.07.2008 в 20:35.
Старый 15.07.2008, 19:21
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
А как себя ведет BitmapData hitTest?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 15.07.2008, 19:28
Смольный (Smolniy) вне форума Посмотреть профиль Отправить личное сообщение для Смольный (Smolniy) Посетить домашнюю страницу Смольный (Smolniy) Найти все сообщения от Смольный (Smolniy)
  № 3  
Ответить с цитированием
Смольный (Smolniy)
Человек и Здание
 
Аватар для Смольный (Smolniy)

администратор
Регистрация: Aug 1999
Адрес: Москау-сити, Рассея
Сообщений: 4,671
Отправить сообщение для Смольный (Smolniy) с помощью ICQ
В финальной версии объект (квадрат в примере) будет _visible = false, кстати...

Нильс, у тебя же, в описании hitTest bitmap написано:
Цитата:
При определении пересечения, не учитывается масштабирование, поворот, или любое другое преобразование любого из заданных объектов.
__________________
Регардсы.

Старый 15.07.2008, 19:33
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Сначала надо снять с помощью draw скриншот с объекта, указав при этом вторым параметром матрицу с текущими траснформациями клипа, тогда все будет идентично. Вопрос только в производительности.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 15.07.2008, 19:40
Смольный (Smolniy) вне форума Посмотреть профиль Отправить личное сообщение для Смольный (Smolniy) Посетить домашнюю страницу Смольный (Smolniy) Найти все сообщения от Смольный (Smolniy)
  № 5  
Ответить с цитированием
Смольный (Smolniy)
Человек и Здание
 
Аватар для Смольный (Smolniy)

администратор
Регистрация: Aug 1999
Адрес: Москау-сити, Рассея
Сообщений: 4,671
Отправить сообщение для Смольный (Smolniy) с помощью ICQ
_visible=false, какой скриншот???
Пойду на flashkit жаловаться...
__________________
Регардсы.

Старый 15.07.2008, 19:53
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Знаешь, а поворот тут не причем, чуть сместил крест и без всяких поворотов, объект шустро в цикле проносится мимо. Вернул на старую позицию - опять работает.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 15.07.2008, 19:59
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 7  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Цитата:
Сообщение от Смольный (Smolniy) Посмотреть сообщение
_visible=false, какой скриншот???
BitmapData.draw(mc) не страдает, если mc._visible=false; Нормально все прорисовывает.

Старый 15.07.2008, 20:01
Смольный (Smolniy) вне форума Посмотреть профиль Отправить личное сообщение для Смольный (Smolniy) Посетить домашнюю страницу Смольный (Smolniy) Найти все сообщения от Смольный (Smolniy)
  № 8  
Ответить с цитированием
Смольный (Smolniy)
Человек и Здание
 
Аватар для Смольный (Smolniy)

администратор
Регистрация: Aug 1999
Адрес: Москау-сити, Рассея
Сообщений: 4,671
Отправить сообщение для Смольный (Smolniy) с помощью ICQ
Ну так он запрограммирован двигаться под углом 45 через центр экрана, если он промахивается мимо креста, конечно он не остановится. В том и задача - доехать до тайлов, имеющих в себе опорные точки (кресты, условно говоря), и об них удариться, т.е. остановиться. Просто обнаружил, что при повороте объекта (а он разумеется будет повернут), flash ошибается в том шаге, где коллизия реально происходит.
Ты говоришь "чуть"? Укажи точные координаты и размеры, проверю.

bitmapData пользоваться не хочу, т.к. уверен в ее тормознутости. Скажем так, для обнаружения коллизии, я двигаю объект, тестю соударение, если оно есть - ищу ближайшую точку несоударения двоичным поиском, поэтому может быть 4-7 итераций за каждый fps для каждого движущегося объекта, что перебор...
__________________
Регардсы.


Последний раз редактировалось Смольный (Smolniy); 15.07.2008 в 20:06.
Старый 15.07.2008, 20:22
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Сделал исходник с примером.
Три объекта, двигаются по одной траектории и два объекта хит пойнта для хитТеста.

mc - проскакивает оба хит пойнта.

mc1 - хит тестится только с одним пойнтом cross и удачно срабатывает, однако, если хиттестить с cross1, то не работает.

mc2 - опять хит тестится с обоими хит пойнтами, но без цикла и останавливается при соприкосновении с cross

PS. Хм, в CS3 работает все как надо... А в standalone 9 опять косяки.
Вложения
Тип файла: zip hitTestBug.zip (6.1 Кб, 90 просмотров)
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 15.07.2008 в 20:26.
Старый 15.07.2008, 20:39
Смольный (Smolniy) вне форума Посмотреть профиль Отправить личное сообщение для Смольный (Smolniy) Посетить домашнюю страницу Смольный (Smolniy) Найти все сообщения от Смольный (Smolniy)
  № 10  
Ответить с цитированием
Смольный (Smolniy)
Человек и Здание
 
Аватар для Смольный (Smolniy)

администратор
Регистрация: Aug 1999
Адрес: Москау-сити, Рассея
Сообщений: 4,671
Отправить сообщение для Смольный (Smolniy) с помощью ICQ
Да.
Все так.
У меня, например, клип нижней стороной проходил сквозь точку, а правой нет.
Бардак, уродство. hitTest не работает корректно с динамически измененым положением объекта. Тьфу
__________________
Регардсы.

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

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

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


 


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


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