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

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

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

Регистрация: Apr 2012
Сообщений: 88
По умолчанию Объекты в массиве, hitTestPoint()

Cделано следующие
Этот код в кадре мувиклипа обьекта, с которым сверяется столкновение.
Этих "обджектов" в основном мувиклипе много.
Код AS3:
var vrBox:MovieClip=parent as MovieClip;
vrBox.addObj(this);
Далее
в основном мувиклипе.
Если нажал кнопку Keyboard.Down,сверяем есть ли обьек внизу на координатах x_next,y_next, где
x_next,y_next это координаты,куда будет двигаться объект.
oktake- переменная отвечает за то, можно ли двигать героя в те координаты.
В общем в массиве objects есть 36 элементов, столько же сколько и на экране.
Код AS3:
........
var objects:Array = new Array();
function addObj(obj)
{
     objects.push(obj);
}
///////////////////////////////////
for(var i:int=0;i<objects.length;i++){
			trace(objects[i]);
			if(objects[i].hitTestPoint(x_next,y_next,true))
			{oktake=1;trace("LOL");
			}.........
В итоге проверка не пашет вообще, столкновение показывает ложь, когда объект уже стоит на этих объектах.
Значения массива
...
[object Breack_3]
[object Breack_3]
[object Breack_3]
[object Breack_3]
...
Я так понимаю это все один и тот же объект? Я не правильно записал в массив? Как быть? Подскажите!


Последний раз редактировалось Mkey; 13.04.2012 в 01:45. Причина: Вы уж извиняйте за множество объектов:)
Старый 13.04.2012, 03:06
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Я так понимаю это все один и тот же объект?
Нет, все верно, "Breack_3" это имя класса объекта. Если хотите уточнить экземпляры, надо давать им имя (.name) и трейсить его))
Так по такому коду трудно сказать где ошибка (мой компилятор бы такое сразу выплюнул не прожевав).
Поставьте уже строгий режим компиляции, может и ошибку обнаружите?
Ну и давайте переходите уже на темную сторону, у нас есть Классы и Интерфейсы!

Добавлено через 13 минут
Цитата:
В итоге проверка не пашет вообще, столкновение показывает ложь, когда объект уже стоит на этих объектах.
Ну а точка регистрации объекта точно находится внизу? То есть, (x_next, y_next) действительно пересекается с экземплярами Breack_3, или объект только визуально их перекрывает, а точка регистрации у него в верхнем левом углу и на Breack_3 не попадает? Сделайте трейсы координат экземпляров Breack_3 и точки (x_next, y_next) и сравните, есть ли пересечение на самом деле.
__________________
Reality.getBounds(this);

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

Регистрация: Apr 2012
Сообщений: 88
Так, появились вопросы:
..как дать объектам имена? Использовать какой то счетчик? У меня в массиве вообще что хранится? Адрес к объекту или просто имя.
... Может я не понимаю принципы работы hitTestPoint? Он выдает значение тру, когда указанные координаты принадлежат объекту массива? Разве не так?
P.S. До меня просто не доходит, как упрощают жизнь классы, что в С++, что и в ПХП, тема пройдена но для меня не понятна.
З.ы.ы Может есть какая та другая альтернатива моему способу?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Я не правильно записал в массив?
А нам то откуда знать, Вы же не показали код)) То есть функция, которая добавляет некий obj в массив (непонятно зачем отдельная функция с одним действием, ну да ладно, допустим это по совету Боба Мартина))). Но как и где она вызывается, как и где создаются эти кирпичи – нам ведь не показано. Обычно это происходит в каком-то цикле, где создаются новые или перебираются существующие объекты. В каждом витке цикла рассматривается объект, здесь ему можно дать имя, если нужно. Итератор цикла вполне себе счетчик, имя можно задавать как obj.name = "ex_" + i;
В массиве хранятся ссылки на объекты ("адреса", да).
Цитата:
Может я не понимаю принципы работы hitTestPoint? Он выдает значение тру, когда указанные координаты принадлежат объекту массива? Разве не так?
Так. Вопрос только в том, действительно ли ваши координаты принадлежат этим объектам и хитТест врет, или же координаты точки на самом деле мимо. К тому же системы координат могут не совпадать, если ваши кирпичи(?) лежат в отдельном контейнере, а точку Вы задаете в координатах стейджа или другого контейнера.
p.S. Мы не телепаты. Тем более нарисовать во Flash IDE можно такое, что точка регистрации будет за тридевять земель от визуальной формы объекта. Тогда как бы они не пересекались визуально, точка то не будет принадлежать визуальным формам.
__________________
Reality.getBounds(this);

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

Регистрация: Apr 2012
Сообщений: 88
Код AS3:
var objects:Array = new Array();
function addObj(obj)
{
     objects.push(obj);
}
Вот та функция, если присмотреться, то она есть выше.
Структура написания:
Сцена->Level 1(тут функции движения главного объекта, для кого идет проверка, так же заданы функции переменные и прочее)->Блок(Стена)(В нем написана функция var vrBox:MovieClip=parent as MovieClip;
vrBox.addObj(this);
)
Делается все по примерам "Xitri", там правда на АС2, но вот пытаюсь на АС3 перевести.
Ну сейчас все будем проверять

Старый 13.04.2012, 17:37
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 6  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Код AS3:
var objects:Array = [];
function addObj(obj:Object)
{
     objects.push(obj);
}
Код AS3:
trace(objects[0].name);

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

Регистрация: Apr 2012
Сообщений: 88
%) Все заработало! Трасе рулит блин
Одна из координат просто не задавалась, т.е. равна 0, и фсе.
Спасибо за помощь.

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

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

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


 


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


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