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

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

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
По умолчанию hitTestPoint для вложеных клипов проблема

Совершенно на ровном месте завис и не могу понять причину проблемы.
Есть clip(movieClip), в нем obj(MovieClip), и отдельный от всех клип point(красный кружок)
Функция выполняет такое:
нужно переместить obj в случайное место ->
затем создаются случайные координаты по x и y ->
и проверить clip(его родителя) на hitTestPoint с этими случайными координатами ->
если хит-тест выдает "сталкивается", то нужно вызывать эту функцию до тех пор пока хит-тест не выдаст "не сталкивается" и поместить point(красный кружок) в эти координаты.То есть я хочу что бы point(красный круг) всегда был вне клипа clip
Всё так просто, а не работает, рано или поздно всё равно point оказывается поверх клипа clip.
Код AS3:
function hit() {
	//случайные координаты
	var xrand=Math.random()*550;
	var yrand=Math.random()*400;
	//проверка на столкновения
	if (clip.hitTestPoint(xrand,yrand,true)) {
	//если сталкивается то перезапускаю функцию
		hit();
	} else {
	//если не сталкивается то помещаю точку в это место
		point.x=xrand;
		point.y=yrand;
	}
}
stage.addEventListener(MouseEvent.CLICK,cl);
function cl(e:MouseEvent) {
	//случайные координаты для объекта в клипе
	clip.obj.x=Math.random()*550;
	clip.obj.y=Math.random()*400;
	//проверка на столкновение
	hit();
}
Буду очень раз решению этой "проблемы"
Вложения
Тип файла: rar hitTest добавил седины.rar (7.6 Кб, 24 просмотров)

Старый 08.08.2010, 15:10
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 2  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
А если рекурсию не использовать?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от -De- Посмотреть сообщение
А если рекурсию не использовать?
Я не очень то разбираюсь во всём этом, а что такое рекурсия, и как её не использовать?

Старый 08.08.2010, 15:22
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Вы назвали рекурсию "перезапуском" в своём коде.

Старый 08.08.2010, 16:05
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 5  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Вы назвали рекурсию "перезапуском" в своём коде.
Ага, я понял, но если через цикл, то та же проблема осталась
Что же делать, неужели нет выхода...
Код AS3:
function hit() {
	//случайные координаты
	var xrand=Math.random()*550;
	var yrand=Math.random()*400;
	//проверка на столкновения
	while (clip.hitTestPoint(xrand,yrand,true)) {
		//если сталкивается то перезапускаю функцию
		xrand=Math.random()*550;
		yrand=Math.random()*400;
	}
	//если не сталкивается то помещаю точку в это место
	point.x=xrand;
	point.y=yrand;
 
}
stage.addEventListener(MouseEvent.CLICK,cl);
function cl(e:MouseEvent) {
	//случайные координаты для объекта в клипе
	clip.obj.x=Math.random()*550;
	clip.obj.y=Math.random()*400;
	//проверка на столкновение
	hit();
}


Последний раз редактировалось samana; 08.08.2010 в 17:07.
Старый 21.08.2010, 00:28
Страга вне форума Посмотреть профиль Отправить личное сообщение для Страга Найти все сообщения от Страга
  № 6  
Ответить с цитированием
Страга
 
Аватар для Страга

Регистрация: Jan 2010
Сообщений: 17
Код AS3:
function hit() {
	//случайные координаты
	var xrand=Math.random()*550;
	var yrand=Math.random()*400;
	//проверка на столкновения
	if (clip.obj.hitTestPoint(xrand,yrand)) {
	//если сталкивается то перезапускаю функцию
		hit();
	} else {
	//если не сталкивается то помещаю точку в это место
		point.x=xrand;
		point.y=yrand;
	}
}
Вот. Вроде теперь работает )
Ты сделал проверку коллизии не с obj, а clip. Поэтому если заметил у тебя за границы синей рамки точка не заходит.
Но вот если делать
if (clip.obj.hitTestPoint(xrand,yrand,true))
то все равно точка накладывается на круг.

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

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

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


 


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


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