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

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

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

Регистрация: Sep 2010
Сообщений: 20
По умолчанию hitTestObject для массива

Беда такая... создаю класс, и из класса "достаю" объекты, размещаю их на сцене...
каждый объект проверяется на столкновение... вроде бы все должно работать нормально (объект удаляется при столкновении), а в результате сносится пол-сцены. Проверяю x и y каждого объекта из массива, получается 0 0 на все.

Код AS3:
for (var i:uint = 2; i < n; i++)
{
 for (var j:uint = 2; j < m; j++)
 {
	 var Ex:Ex_Class = new Ex_Class()
	 Ex.addEx(50*i, 50*j)
	 addChild(Ex)
	 Arr.push(Ex)
	 trace (Ex.x, Ex.y)
(функция addEx рисует графику объекта, получается квадрат 5х5=25 объектов, все нормально)

Если проверить каждый элемент массива (Arr[l].x), тоже получаются нули.


Последний раз редактировалось Navznich; 11.10.2010 в 02:04.
Старый 11.10.2010, 02:22
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну так у Вас и есть (0, 0). При добавлении на сцену у объекта координаты (0, 0). Если хотите другие - надо их задавать. Вы же задаете координаты отрисовки, как я понял. Объект стоит в (0, 0), и в этом объекте отрисован квадрат в координатах (50*i, 50*j). Но объект-то в (0, 0)
__________________
Reality.getBounds(this);

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

Регистрация: Feb 2007
Сообщений: 109
Отправить сообщение для DanQuimby с помощью ICQ
Код AS3:
for (var i:uint = 2; i < n; i++)
{
 for (var j:uint = 2; j < m; j++)
 {
	 var Ex:Ex_Class = new Ex_Class()
	 Ex.addEx(50*i, 50*j)
         Ex.x = 50*i;
         Ex.y = 50*i;
	 addChild(Ex)
	 Arr.push(Ex)
	 trace (Ex.x, Ex.y)
     }
}
Wolsh вот о чем он хотел сказать.
вот в этом примере должно все работать как следует

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Только
Ex.y = 50*j;
и
Ex.addEx(50*i, 50*j) бессмысленно, если (50*i, 50*j) это координаты отрисовки Графиксом. Рисовать надо в (0, 0), а помещать уже в (50*i, 50*j).
Собственно поэтому и "сносится полсцены", что все объекты перекрываются, пусть и пустыми пространствами, они все стоят в (0, 0) и хитТестятся друг с другом.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 11.10.2010 в 13:34.
Старый 14.10.2010, 00:55
Navznich вне форума Посмотреть профиль Отправить личное сообщение для Navznich Найти все сообщения от Navznich
  № 5  
Ответить с цитированием
Navznich

Регистрация: Sep 2010
Сообщений: 20
Все равно сносятся несколько объектов, находящихся рядом с тем, с которым движущийся объект столкнулся,
причем вызов удаления - при остановке движения:
Код AS3:
{...
if(ball.x>max){
ball.removeEventListener(Event.ENTER_FRAME, go)//функция  движения
hit()
}}
 
function hit(){
for(var l=0;l<35; l++){
var HitEx:Ex_Class = Arr[l] as Ex_Class
trace (ball.hitTestObject(HitEx)) //должно быть 1 раз true, но получается, что несколько
}}
и объекты, и движущееся тело добавляются прямо на сцену (без контейнера)


Последний раз редактировалось Navznich; 14.10.2010 в 01:08.
Старый 14.10.2010, 01:21
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 6  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
Сцена - это тоже контейнер.

Всё правильно, hitTestObject срабатывает над всеми перекрываемыми объектами.
Чтобы удалить только один объект, или находите ближайший к шарику, или лежащий выше всех в иерархии из тех, с кем сработает hitTestObject.

Если ваш шар при проверке на hitTestObject визуально не перекрывает элементы, возможно шар или объекты имеют невидимую область которая срабатывает на перекрытие (aplha=0 и visible=false не мешают hitTestObject)

Старый 14.10.2010, 02:50
Navznich вне форума Посмотреть профиль Отправить личное сообщение для Navznich Найти все сообщения от Navznich
  № 7  
Ответить с цитированием
Navznich

Регистрация: Sep 2010
Сообщений: 20
Невидимых областей нет точно (там на самом деле почти ничего нет, кроме этих несчастных шариков из первого поста), объект перекрывается только один (+ там еще Math.ceil по остановке, и он почти точно в середину попадает)


Последний раз редактировалось Navznich; 14.10.2010 в 03:03.
Старый 14.10.2010, 08:59
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 8  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
Тогда, чтобы получить ответ, вам придётся выложить исходники, которые можно будет скомпилировать и посмотреть как они бажут.
Кто-нибудь наверняка вам поможет.

Старый 15.10.2010, 00:06
Navznich вне форума Посмотреть профиль Отправить личное сообщение для Navznich Найти все сообщения от Navznich
  № 9  
Ответить с цитированием
Navznich

Регистрация: Sep 2010
Сообщений: 20
Решила другой функцией пользоваться - distance

Код AS3:
function distance(clipl, clip2) {
var dx = clipl.x - clip2.x
var dy = clipl.y - clip2.y
return (Math.sqrt(dx*dx+dy*dy))}
- она работает нормально, только немного неудобно (т.к. объекты разного размера), получается, проблема решена...
(ну только любопытство все равно осталось - почему с хиттестом не работает)

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

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

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


 


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


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