![]() |
|
||||||||||
|
|||||
|
[+ 06.08.11]
Регистрация: Jul 2011
Сообщений: 79
|
Здравствуйте,два дня маюсь над задачкой,решение всё не приходит на ум.
Есть граф(вообще дерево с произвольным количеством детей) члены данные -указатель на голову типа Vertex -указатель текущий вершины(для работы с графом). class Vertex - class Image - список Vertex class Image имеет следующие члены данные: - src image - Vector<Pointer> Pointer -это стрелки которые должны быть созданы поверх изображения. члены данные - координаты - src изображения стрелки (возможно) i- ая стрелка в списке стрелок соответствует i- ой вершине в списке вершин. (для текущий вершины). Как всё это прикрутить на сцену,чтобы при нажатии на изображение стрелки текущая вершина (указатель current в графе) определил номер стрелки (то бишь нужно передать координаты стрелки для поиска или по src изображению или писать ещё один класс ) ,потом по этому номеру выбирал нужную вершину из списка вершин(это понятно как сделать) и осуществлял перерисовку сцены исходя из данных текущей вершины(это тоже понятно). Собственно как разобраться со стрелочками?Как определить какая стрелочка сработала? какой-то признак дополнительный создавать? Или делать какой-то класс интерфейс? Ответ можно псевдокодом или на словах,конкретную реализацию я уже сделаю самостоятельно. |
|
|||||
|
[+1 15.01.11]
Регистрация: Jan 2011
Сообщений: 70
|
Если стрелка-потомок Спрайта, то почему не повесить слушателя для его "onclick"? Если стрелка-потомок Битмапа, и вы все рисуете на "битмап", то вперед поиском по координатам клика в битмап. Координаты стрелки у вас есть, размер стрелки тоже имеется.
|
|
|||||
|
[+ 06.08.11]
Регистрация: Jul 2011
Сообщений: 79
|
Пока что класс стрелки не чей потомок,поскольку не знаю что именно с ним делать,поэтому обратился сюда с вопросом.
ну у меня имеется класс для добавления изображения [Event(name="complete", type="flash.events.Event")] public class ImgLoader extends EventDispatcher { private var loader:Loader = new Loader(); private var bitmap: BitmapData; private var bmp:Bitmap; private var sprBmp:Sprite = new Sprite(); public function ImgLoader(s:String) { //Начинаем загрузку loader.load(new URLRequest(s)); // подписываем обработчики события loader.contentLoaderInfo.addEventListener(Event.COMPLETE,displayImage); } private function displayImage(evt:Event):void { bitmap = new BitmapData(loader.width, loader.height, false, 0xFFFFFFFF); bitmap.draw(loader.content); bmp = new Bitmap(bitmap, "auto", true); sprBmp.addChild(bmp); dispatchEvent(new Event(Event.COMPLETE)); } public function getSprite():Sprite { return sprBmp; } } На сцену я отправляю уже готовый спрайт с изображением,хотя наверное это не правильно,лучше отправлять bitmap и уже этот bitmap добавлять на sprite в сцене И так вот что у меня получилось я отнаследовал стрелку от спрайта public class Pointer extends Sprite // добавил метод добавения public function loadPointer():Pointer { var x:ImgLoader = new ImgLoader(srcpoint); x.getSprite().x = coord.x; x.getSprite().y = coord.y; addChild(x.getSprite()); return this; } далее мне нужно определить какая стрелка была нажата на sprite, сначала покажу как добавляю стрелки на сцену и привязываю event. Сделан отдельный спрайт на который добавляются изображение и стрелки. public function Scene(_gr:Graph) { //Начинаем загрузку gr = _gr; spim = new Sprite(); SetImg(gr.getCurrent()); addChild(spim); } private function SetImg(s:Vertex):void { load = new ImgLoader(s.getImg().getSrc()); spim.addChild(load.getSprite()); for (var i:Number = 0; i < s.getImg().getPointers().length; i++) { s.getImg().getPointers()[i].loadPointer().addEventListener(MouseEvent.CLICK, onMouseClickSpim); spim.addChild(s.getImg().getPointers()[i].loadPointer()); } addChild(spim); //spim.addEventListener(MouseEvent.CLICK, onMouseClickSpim); } private function onMouseClickSpim(e:MouseEvent):void { _parent = gr.getCurrent(); var l:Number = 1; for (var i:Number=0; i < gr.getCurrent().getImg().getPointers().length; i++) { trace("for"); if (gr.getCurrent().getImg().getPointers()[i] == e.target as Pointer) { // Сюда не заходит алгоритм,проверку не производит. Как проверить на какую стрелку нажал пользователь? trace(i); l = l+i; break; } } gr.setCurrent(gr.getCurrent().getList().getElembyInde(l) as Vertex); SetImg(gr.getCurrent()); } } Вопрос решил путём сравнения координат. Последний раз редактировалось savva; 05.10.2011 в 14:47. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|