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

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

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

Регистрация: Jul 2012
Сообщений: 66
По умолчанию видимость объектов сцены классами

добрый день, очень надеюсь на вашу помощь.

Ситуация следующая: есть два класса Unit и Floor. каждый объект класса Floor добавляется конструтктором в статический массив этого класса.

Объект класса Unit каждый кадр обращается к функции класса Floor, которая пебирает все экзэмпляры Floor и проверяет пересекаются ли они одним из своих подобъектов(вложенные мувики) с объектом вызвавшим функцию(экземпляром Unit-а). все работало превосходно, но затем мне понадобилось добавить все объекты со сцены(экземпляры Unit и Floor) в отдельный муви клип.(map_mc предположим). после чего появилось обилие проблем с координатами( хотя поидеи я предусмотрел смещение сетки координат) и более того методы hitTestObject и hitTestPoint перестали работать.


приведу сокращенный код, думаю его хватит. если понадобится кину исхожник.

класс Unit
Код AS3:
package script_files
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.ui.Mouse;
	import flash.events.MouseEvent;
	import flash.display.Stage;
 
	public class Unit extends MovieClip 
	{
 
 
//CONSTRUTOR		
		public function Unit()
		{
 
			addEventListener(Event.ENTER_FRAME, Behavior);
 
				// constructor code
		}
 
 
//BEHAVIOR main function, enter frame
		private function Behavior(e:Event):void
		{	
			this.x += speed_x;
			this.y += speed_y;
 
			Floor.collision(this);
		}
}
}
класс Floor
Код AS3:
package script_files {
	import flash.display.MovieClip;
 
	public class Floor extends MovieClip
	{
 
 
		private static var FloorArr:Array = new Array();//статический массив флор
		public function Floor() 
		{
			Floor.FloorArr.push(this);//добавляем в массив каждый экземпляр
			// constructor code
		}
		public static function collision(object:MovieClip)
		{
 
			for(var i=0;i< FloorArr.length; i++)//перебираем все экземпляры
			{
				//перебираем все подобъекты [i]-экземпляра
				if( FloorArr[i].collider_up.hitTestPoint(object.x,object.y) && object.speed_y > 0)
				{	
 
					//действия
 
 
				}
				if( FloorArr[i].collider_down.hitTestPoint(object.x,object.y - object.height) && object.speed_y < 0)
				{
 
 
									}
				if( FloorArr[i].collider_left.hitTestObject(object) && object.speed_x > 0)
				{
 
				}
				if( FloorArr[i].collider_right.hitTestObject(object) && object.speed_x < 0)
				{
 
				}
			}
 
 
 
		}
 
	}
 
}

Старый 31.07.2012, 14:35
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 2  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
координаты всех объектов, добавленных в мувиклип теперь будут такие : map_mc.x+object.x, это чтобы привести их к глобальным.
Вообще правильно изначально привязывать координаты объекта не к координатам Stage, а к координатам класса (наследованного от спрайта или мувиклипа), в котором находятся все объекты, чтобы координаты были относительными.

Старый 31.07.2012, 18:08
pall92 вне форума Посмотреть профиль Отправить личное сообщение для pall92 Найти все сообщения от pall92
  № 3  
Ответить с цитированием
pall92

Регистрация: Jul 2012
Сообщений: 66
поясните про координаты класса пожалуйста..
и да.. как из класса в обратиться к map_mc, если класс находится в отдельном пакете? я немного запутался с этим. нужно импортировать какойто класс?

Старый 31.07.2012, 19:49
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 4  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
вы нарисовали экземпляр класса мувиклип вручную, дали ему имя map_mc.
а нужно в его свойствах прописать чтобы он наследовался не от мувиклипа, а от класса ,допустим, Map.
далее создаете класс Map.as
после этого все что вы пропишете в классе Map будет "влиять" на map_mc
допустим чтобы переместить map_mc на координаты (100,100) в конструкторе класса map
пишите this.x = 100;this.y = 100;
тоесть когда будет создаваться map_mc он будет брать все параметры из класса Map

Старый 31.07.2012, 20:40
pall92 вне форума Посмотреть профиль Отправить личное сообщение для pall92 Найти все сообщения от pall92
  № 5  
Ответить с цитированием
pall92

Регистрация: Jul 2012
Сообщений: 66
я наверно немного не правильно пояснил, не знаю.. или я не понимаю... дело не в координатах совсем. хотя спасибо за разъяснения - это может частично помочь) я не пойму как сделать вновь рабочим метод hitTest. странно, он должен был бы хотя бы выводить ошибку, что не находит какой-то из объектов. но нет. он считает что они не пересекаются. хотя оба объекта находятся в map_mc, визуально пересекаются, и оба находятся в приделах видимости метода.

Старый 01.08.2012, 01:16
gagaga вне форума Посмотреть профиль Отправить личное сообщение для gagaga Найти все сообщения от gagaga
  № 6  
Ответить с цитированием
gagaga
[+1 22.04.13]
[+1 06.03.13]

Регистрация: Apr 2012
Сообщений: 239
использвание hittest - первый признак *****кода... по делу: вы зря тратите время. Лучше учитесь программировать, возложите всю математику и координатный гемор на готовый движок (например flashpunk). Я вам по личному опыту говорю, первые 2-3 проекта - в мусорную корзину, лучше сосрдоточтесь на архитектуре

Старый 01.08.2012, 04:45
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 7  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
мой совет такой, скачайте несколько исходников, и разберитесь как в них расположены классы, как что наследовать, что в чем размещать,как должны взаимодействовать классы, и почитайте побольше про ООП.

Старый 01.08.2012, 07:32
pall92 вне форума Посмотреть профиль Отправить личное сообщение для pall92 Найти все сообщения от pall92
  № 8  
Ответить с цитированием
pall92

Регистрация: Jul 2012
Сообщений: 66
это все конечно замечательно, и без сомнения справедливо. но я учусь в том числе и на практике. и у меня возник вполне конкретный вопрос. советов я вроде как не спрашивал.)

Добавлено через 19 минут
а за совет движка спасибо) хотя проблема все равно не решилась ибо дело не в физике.

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

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

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


 


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


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