Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Переместить объект на передний план! (http://www.flasher.ru/forum/showthread.php?t=196196)

zomkoner 20.03.2013 21:38

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

                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

Привет! Перемещай на передний план так!
Код AS3:

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

Или так!
Код AS3:

stage.addChild(e.target);


zomkoner 20.03.2013 21:48

bav Спасибо, но меня интересует именно метод setChildIndex.

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

Цитата:

Код AS3:

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

Или так:
Код AS3:

stage.addChild(e.target);


Тоже выдает ошибку!

GBee 20.03.2013 22:26

Потому что надо привести к DisplayObject'у
Код AS3:

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

Цитата:

Сообщение от GBee (Сообщение 1126068)
Потому что надо привести к DisplayObject'у
Код AS3:

addChild(e.target as DisplayObject);

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

Это конечно работает, но ошибку в flash builder на это строке выдает:
Код:

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

Меня смущает что справа весит это крестик. Почему ошибку выдает а метод работает?

Добавлено через 5 минут
Цитата:

Сообщение от in4core (Сообщение 1126076)
Ну это конечно жестакч! Зачем учить такому людей? По поводу setChildIndex - в чем проблема? Метод простой, работает всегда

Проблема в том что он не работает, если addChild работает но выдает ошибку, то:
Код AS3:

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

заработало вот так:
Код AS3:

                        setChildIndex(e.target as DisplayObject, numChildren -1);

Всем спасибо большое! Я наверно где отпечатался, т.к. удалил всё скомпилировал, написал заново и все нормально...
))) тема закрыта! всем большое спасибо ещё раз!

Добавлено через 1 минуту
Цитата:

Сообщение от GBee (Сообщение 1126081)
импортните, наконец, DisplayObject

да у меня он был импортирован, иначе бы у меня ничего бы не работало!

UserSuperPupsik 21.08.2013 21:21

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

Код AS3:

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 объекта на сцену.
Код AS3:

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/FlashPla...#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, .
Почитал, очень помогло, здесь даже примерчики были.
Цитата:

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

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 по нажатии на него левой клавиши мыши(событие).Вот мой код, что здесь нужно исправить?

Код AS3:

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
                                  }
                                                }


Уточню: как, применить этот метод
Код AS3:

container1.setChildIndex(circle1,(container1.numChildren-1));

к вот этому самому
Код AS3:

e.target

?

Добавлено через 58 минут
Всё, разобрался, благодарю всех участников, вот как должно быть:
Код AS3:

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
                                  }
                                                }



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

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