PDA

Просмотр полной версии : Переместить объект на передний план!


zomkoner
20.03.2013, 21:38
Всем доброго времени суток! Перейду сразу к сути:
Имеется Sprite, при нажатии начинается перетаскивание его! Но нужно спрайт который перетаскиваем переместить на передний план!

public function func_e_Down(e:MouseEvent):void{
priv_starting_spr = new Point(e.target.x, e.target.y);
e.target.startDrag();
e.target.filters = [new DropShadowFilter()];
setChildIndex(DisplayObject(e.target), numChildren-1);

}

bav
20.03.2013, 21:43
Привет! Перемещай на передний план так!

(e.target as DisplayObject).parent.addChild(e.target);

Или так!

stage.addChild(e.target);

zomkoner
20.03.2013, 21:48
bav Спасибо, но меня интересует именно метод setChildIndex.

Добавлено через 13 минут
Да и при использовании :

(e.target as DisplayObject).parent.addChild(e.target);
Или так:
stage.addChild(e.target);
Тоже выдает ошибку!

GBee
20.03.2013, 22:26
Потому что надо привести к DisplayObject'у
addChild(e.target as DisplayObject);


он перебросит данный объект на самый вверх без обращения к numChildren

in4core
20.03.2013, 22:59
(e.target as DisplayObject).parent.addChild(e.target); Ну это конечно жестакч! Зачем учить такому людей? По поводу setChildIndex - в чем проблема? Метод простой, работает всегда

zomkoner
20.03.2013, 23:21
Потому что надо привести к DisplayObject'у
addChild(e.target as DisplayObject);


он перебросит данный объект на самый вверх без обращения к numChildren

Это конечно работает, но ошибку в flash builder на это строке выдает:
Это строка содержит несколько выделений:
-1118: Неявное исправление значения статического типа Object на возможный несвязанный тип
flash.display:DisplayObject.
-1120: Обращение несуществующего свойства DisplayObject.
Меня смущает что справа весит это крестик. Почему ошибку выдает а метод работает?

Добавлено через 5 минут
Ну это конечно жестакч! Зачем учить такому людей? По поводу setChildIndex - в чем проблема? Метод простой, работает всегда
Проблема в том что он не работает, если addChild работает но выдает ошибку, то:

setChildIndex(e.target,numChildren -1);
// или
setShildIndex(DisplayObject(e.target), numChildren-1);

и не работает и выдает ошибку!
1180: Вызов предположительно неопределенного метода DisplayObject.

GBee
20.03.2013, 23:28
импортните, наконец, DisplayObject

zomkoner
20.03.2013, 23:31
заработало вот так: setChildIndex(e.target as DisplayObject, numChildren -1);
Всем спасибо большое! Я наверно где отпечатался, т.к. удалил всё скомпилировал, написал заново и все нормально...
))) тема закрыта! всем большое спасибо ещё раз!

Добавлено через 1 минуту
импортните, наконец, DisplayObject
да у меня он был импортирован, иначе бы у меня ничего бы не работало!

UserSuperPupsik
21.08.2013, 21:21
Извините за некропостинг, но думаю это лучше, чем дубликат темы.Помогите решить проблему.
Дан код, рисующий круг.

var circle:Sprite = new Sprite();
import flash.utils.Dictionary;
import flash.display.DisplayObject;
circle.graphics.lineStyle(1, 0x000000);
circle.graphics.beginFill(0x0000FF, 0.5);
circle.graphics.drawCircle(0, 0, 40);
circle.x=100
circle.y=111
И дан код, добавляющий 2 объекта на сцену.
var a2:S3=new S3();
a2.x=200;
a2.y=200;
addChild(a2);

var a1:S3=new S3();
a1.x=200;
a1.y=300;
addChild(a1);

Что написать, чтобы объекты были на разных планах: circle был на 1-ом плане, a1 на 2-ом плане, a2 на 3-м плане?

Akopalipsis
21.08.2013, 21:36
Вот тут есть ответы на все Ваши вопросы. я не хочу сказать, что Вам не хочу помогать, я наоборот пытаюсь вам помочь! Вот если Вы после прочтения не поймёте, тогда скажите об этом. Выставите в настройках сайта последнею версию плеера и последнею версию cc. И обратите внимание на вот такую вкладку, её нужно открывать.
Общедоступные методы
Показать унаследованные общедоступные методы
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#methodSummary

Aquahawk
21.08.2013, 21:51
вот за это
stage.addChild(e.target);
руки бы оторвал

dimarik
21.08.2013, 23:46
Для popup'ов ок.

UserSuperPupsik
22.08.2013, 18:01
Спасибо, akopalipsis, http://help.adobe.com/ru_RU/FlashPla...#methodSummary.
Почитал, очень помогло, здесь даже примерчики были.
Что написать, чтобы объекты были на разных планах: circle был на 1-ом плане, a1 на 2-ом плане, a2 на 3-м плане?

Вот, что получилось:
var container1:Sprite=new Sprite;//создать контейнер container1 для хранения кругов

var circle1:Sprite = new Sprite();//нарисовать круг 1 (circle1)
circle1.graphics.lineStyle(1, 0x000000);
circle1.graphics.beginFill(0x0000cc, 1);
circle1.graphics.drawCircle(0, 0, 40);
circle1.y=80;
circle1.x=170;


var circle2:Sprite = new Sprite();//нарисовать круг 2 (circle2)
circle2.graphics.lineStyle(1, 0x000000);
circle2.graphics.beginFill(0x33cc00, 1);
circle2.graphics.drawCircle(0, 0, 40);
circle2.y=95;
circle2.x=184;

var circle3:Sprite = new Sprite();//нарисовать круг 3 (circle3)
circle3.graphics.lineStyle(1, 0x000000);
circle3.graphics.beginFill(0xffff99, 1);
circle3.graphics.drawCircle(0, 0, 40);
circle3.y=122;
circle3.x=180;

var circle4:Sprite = new Sprite();//нарисовать круг 4 (circle4)
circle4.graphics.lineStyle(1, 0x000000);
circle4.graphics.beginFill(0xff9933, 1);
circle4.graphics.drawCircle(0, 0, 40);
circle4.y=145;
circle4.x=188;

container1.addChild(circle1);//поместить circle1 в container1
container1.addChild(circle2);//поместить circle2 в container1
container1.addChild(circle3);//поместить circle3 в container1
container1.addChild(circle4);//поместить circle4 в container1
addChild(container1);// поместить все объекты контейнера на сцену
//container2.addChild(container1);
//addChild(container2);
trace("container1.getChildIndex(circle):",container1.getChildIndex(circle1));//показать на каком плане объект(если число большое,то объект близко расположен от наблюдателя)
container1.setChildIndex(circle1,(container1.numChildren-1)); //переместить circle1 на передний план.

trace("container1.getChildIndex(circle):",container1.getChildIndex(circle1));//показать на каком плане объект
trace("container1.numChildren:",container1.numChildren);//показать количество планов(количество объектов) для container1

Добавлено через 22 минуты
Ребят, вот проблема: не могу с помощью setChildIndex изменить индекс e.target 'a по нажатии на него левой клавиши мыши(событие).Вот мой код, что здесь нужно исправить?

import flash.events.MouseEvent;
var i:int=1


addEventListener(MouseEvent.CLICK,funct);

function funct(e:MouseEvent):void
{
if(i==1) {
e.target.startDrag();
trace(e.target.name,"has been taken");

i=2;

}

else if (i==2){
e.target.stopDrag();
trace(e.target.name, "has been dropped");
i=1;
//e.target.x=100
//e.target.y=100
}
}




Уточню: как, применить этот метод container1.setChildIndex(circle1,(container1.numChildren-1)); к вот этому самому e.target?

Добавлено через 58 минут
Всё, разобрался, благодарю всех участников, вот как должно быть:
import flash.events.MouseEvent;
var i:int=1


addEventListener(MouseEvent.CLICK,funct);

function funct(e:MouseEvent):void
{
if(i==1) {
container1.setChildIndex(e.target as DisplayObject,(container1.numChildren -1));
e.target.startDrag();
trace(e.target.name,"has been taken");

i=2;

}

else if (i==2){
e.target.stopDrag();
trace(e.target.name, "has been dropped");
i=1;
//e.target.x=100
//e.target.y=100
}
}