Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как преобразовать event.target в глобальную переменную (http://www.flasher.ru/forum/showthread.php?t=203043)

UserSuperPupsik 27.08.2013 20:36

Как преобразовать event.target в глобальную переменную
 
Здравствуйте.
Можно ли преобразовать переменную event.target в глобальную переменную.
Уточню, в пределах funct1 {} можно манипулировать с event.target:

Код AS3:

stage.addEventListener(MouseEvent.CLICK,funct1);
function funct1(event:MouseEvent):void
{
    //здесь можно манипулировать с event.target
}
 
// а здесь уже нельзя  манипулировать с event.target!

Как преобразовать event.target в глобальную переменную, чтобы к ней можно было обращаться из любого места кода?

dimarik 27.08.2013 20:46

http://risovach.ru/upload/2013/08/me...0763_orig_.jpg

Akopalipsis 27.08.2013 21:32

А что вы хотите сделать с этим обьектом?
Для чего Вам это понадобилось?

MikroAcse 27.08.2013 21:34

Главный вопрос: зачем?
Ну да ладно:
Код AS3:

var lastTarget:Object;
stage.addEventListener(MouseEvent.CLICK,funct1);
function funct1(event:MouseEvent):void
{
    lastTarget = event.target;
}

До клика эта переменная будет равняться null.

Wolsh 27.08.2013 23:09

Цитата:

До клика эта переменная будет равняться null.
Код AS3:

var lastTarget:Object = "а хрен его знает";

Добавлено через 4 минуты
Весь код, написанный в кадре, будет собран в конструктор (кроме функций, разумеется, включая обработчики). Когда этот код выполнится, объект будет создан и ТОЛЬКО ПОСЛЕ ЭТОГО может появиться на экране. И больше он не будет выполняться, это ж конструктор)) Так что все, что в коде в кадре делается с lastTarget, делается ТОЛЬКО с первоначальной инициализацией. Так что нет. Нельзя просто так взять и.

UserSuperPupsik 28.08.2013 00:39

Ребят всё работает, я получил то, что хотел!!!
Код AS3:

var T:Object;
var s1:S1=new S1();// S1 - класс символа
s1.x=50;
s1.y=50;
addChild(s1);
 
var s2:S1=new S1();// S1 - класс символа
s2.x=150;
s2.y=150;
addChild(s2);
 
stage.addEventListener(MouseEvent.CLICK,funct1);
function funct1(event:MouseEvent):void
                                                                                {
                                                                                T = event.target;
                                                                                T.startDrag();
                                                                                f1();
                                                                                }
 
function f1 ():void{
                        if(T.x>=300 || T.y>=300) {
                                                                      T.stopDrag();
                                                                                          }
 
                                        }

Благодарю Вас, друзья, теперь мой код будет выглядеть более красиво, а то все функции приходилось пихать в функцию события( function funct1(event:MouseEvent):void {//вот прямо сюда} ) .
Уважаемый, Wolsh, может быть я что-то не понял?!?

Wolsh 28.08.2013 00:59

Цитата:

Уважаемый, Wolsh, может быть я что-то не понял?!?
Вы не видите разницу между первым своим кодом и вторым? Во втором f1 вызывается ИЗ обработчика, когда переменная уже инициализирована в обработчике. В первом коде у Вас нет никакой второй функции, есть комментарий "//не работает тут", расположенный в коде, который попадет в конструктор.
Да почитайте уже хоть что-нибудь. Методом тыка Вы 10 лет будете "изучать" язык, а ямы под фундаментом так и останутся.

UserSuperPupsik 28.08.2013 01:01

Вот более полезный код, в котором всё работает!!!

Код AS3:

var raz:Boolean=false
 
var T:Object;
var s1:S1=new S1();// S1 - класс символа
s1.x=50;
s1.y=50;
addChild(s1);
 
var s2:S1=new S1();// S1 - класс символа
s2.x=150;
s2.y=150;
addChild(s2);
 
stage.addEventListener(MouseEvent.CLICK,funct1);
function funct1(event:MouseEvent):void
                                                                                {
                                                                                T = event.target;
                                                                                if (raz==false){
 
 
                                                                                T.startDrag();
                                                                                raz=true;
                                                                                f1();
                                                                                                }
                                                                                else if (raz==true){
                                                                                //T = event.target;
 
                                                                                T.stopDrag();
                                                                                raz=false;
                                                                                f1();
 
                                                                                                  }
 
                                                                                }
 
function f1 ():void{
                      trace("T.y:",T.y);
                                  trace("T.x:",T.x);
                                        // здесь может быть большой код!
 
                                        }

Добавлено через 2 минуты
Спасибо, Wolsh, я всё понял!!! :)

chamele0n 28.08.2013 01:05

Цитата:

Сообщение от Wolsh (Сообщение 1144974)
Да почитайте уже хоть что-нибудь.

и не пугайте людей своим "красивым кодом"

Wolsh 28.08.2013 01:08

Можно было сделать и без "глобальной" (старайтесь не использовать красивые слова, смысл которых еще не понимаете) переменной.
Код AS3:

function funct1(event:MouseEvent):void
{
        var target:Sprite = event.target as Sprite;
        target.startDrag();
        f1(target);
}
 
function f1 (dragged:Sprite):void
{
        if(dragged.x>=300 || dragged.y>=300)
        {
                dragged.stopDrag();
        }
}

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

if (raz==false)
Выражение в скобках после оператора if после вычисления возвращает тип Boolean (то есть либо true, либо false). Если у Вас переменная raz УЖЕ имеет тип Boolean, нет никакого смысла делать еще одну проверку "а точно ли это true или false". Достаточно просто if(raz) или if(!raz).

belv 28.08.2013 01:18

В очередной раз вы видите чудеса, кликните по свободному пространству и увидите чудеса в виде ошибок.
Скажите, что Вы хотите сделать?Проще написать для Вас написать код, чем объяснять весь AS3 и работу флешплеера.

UserSuperPupsik 28.08.2013 01:51

Да, Wolsh, так тоже работает:
Цитата:

Достаточно просто if(!raz) или if(raz)
. - скорее всего так и быстрее!Спасибо за совет! :)

MikroAcse 28.08.2013 01:54

Умоляю, UserSuperPupsik, прочитайте хоть одну книгу, хоть один туториал.
И потом уже идите на форум.

Добавлено через 51 секунду
А то я чувствую приплыв постов типа "как сделать **** переменной"

UserSuperPupsik 28.08.2013 02:05

Цитата:

кликните по свободному пространству и увидите чудеса в виде ошибок.
-с этим уже нет проблем, я положил объекты в контейнеры, добавил if для проверки имени контейнера и ,если проверку проходит(т.е. такое имя контейнера есть), то делает указанные манипуляции с объектом контейнера!!!
Ребят,с 1 сентября начинаю в деталях читать Мука. Спасибо Всем За Участие!!!


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

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