![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2012
Сообщений: 66
|
добрый день, очень надеюсь на вашу помощь.
Ситуация следующая: есть два класса Unit и Floor. каждый объект класса Floor добавляется конструтктором в статический массив этого класса. Объект класса Unit каждый кадр обращается к функции класса Floor, которая пебирает все экзэмпляры Floor и проверяет пересекаются ли они одним из своих подобъектов(вложенные мувики) с объектом вызвавшим функцию(экземпляром Unit-а). все работало превосходно, но затем мне понадобилось добавить все объекты со сцены(экземпляры Unit и Floor) в отдельный муви клип.(map_mc предположим). после чего появилось обилие проблем с координатами( хотя поидеи я предусмотрел смещение сетки координат) и более того методы hitTestObject и hitTestPoint перестали работать. приведу сокращенный код, думаю его хватит. если понадобится кину исхожник. класс Unit 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); } } } 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) { } } } } } |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
координаты всех объектов, добавленных в мувиклип теперь будут такие : map_mc.x+object.x, это чтобы привести их к глобальным.
Вообще правильно изначально привязывать координаты объекта не к координатам Stage, а к координатам класса (наследованного от спрайта или мувиклипа), в котором находятся все объекты, чтобы координаты были относительными. |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 66
|
поясните про координаты класса пожалуйста..
и да.. как из класса в обратиться к map_mc, если класс находится в отдельном пакете? я немного запутался с этим. нужно импортировать какойто класс? |
|
|||||
|
Регистрация: 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 |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 66
|
я наверно немного не правильно пояснил, не знаю.. или я не понимаю... дело не в координатах совсем. хотя спасибо за разъяснения - это может частично помочь) я не пойму как сделать вновь рабочим метод hitTest. странно, он должен был бы хотя бы выводить ошибку, что не находит какой-то из объектов. но нет. он считает что они не пересекаются. хотя оба объекта находятся в map_mc, визуально пересекаются, и оба находятся в приделах видимости метода.
|
|
|||||
|
[+1 22.04.13]
[+1 06.03.13] Регистрация: Apr 2012
Сообщений: 239
|
использвание hittest - первый признак *****кода... по делу: вы зря тратите время. Лучше учитесь программировать, возложите всю математику и координатный гемор на готовый движок (например flashpunk). Я вам по личному опыту говорю, первые 2-3 проекта - в мусорную корзину, лучше сосрдоточтесь на архитектуре
|
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
мой совет такой, скачайте несколько исходников, и разберитесь как в них расположены классы, как что наследовать, что в чем размещать,как должны взаимодействовать классы, и почитайте побольше про ООП.
|
|
|||||
|
Регистрация: Jul 2012
Сообщений: 66
|
это все конечно замечательно, и без сомнения справедливо. но я учусь в том числе и на практике. и у меня возник вполне конкретный вопрос. советов я вроде как не спрашивал.)
Добавлено через 19 минут а за совет движка спасибо) хотя проблема все равно не решилась ибо дело не в физике. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:18. |
|
|
« Предыдущая тема | Следующая тема » |
|
|