Форум 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=159989)

ganjubazz 07.07.2011 16:55

Получить имя объекта, нажимая мышью на принадлежаций ему спрайт
 
Привет народ! Подскажите пожалуйста, как обратится к объекту, который содержит спрайт, по нажатию мышки на спрайт? Вот пример кода:
Код AS3:

var spr:Sprite = new Sprite();
var name:String;
var obj:Object = {sp:spr, name_:name}
function mouse_down(e:MouseEvent):void
{
 
        trace((e.target.name_) //не получется естественно, потомучто кликаем по спрайту
}

Как, кликнув по спрайту, получить имя объекта, к которому он принадлежит?

cv' 07.07.2011 17:08

Код AS3:

import flash.utils.Dictionary;
var spr:Sprite = new Sprite();
var name:String;
var obj:Object = { sp:spr, name_:name }
var dic:Dictionary = new Dictionary();
dic[spr] = obj;
function mouse_down(e:MouseEvent):void
{
        trace(dic[e.currentTarget].name_);
}


spooner 07.07.2011 17:28

А что значит "объект, который содержит спрайт" в вашем случае?

Jewelz 07.07.2011 17:31

вот что значит
Код AS3:

var obj:Object = {sp:spr, name_:name}

cv' уже верно подсказал

spooner 07.07.2011 17:33

Тьфу ты, не в ту сторону думал. Согласен.

ganjubazz 07.07.2011 17:40

Спасипо, чесное слово не знал про Dictionary

S-ed 08.07.2011 02:22

Хм. Не совсем понятно, код с ошибками, и не полный (кто регистрирует слушателя)...
Код AS3:

var nameX:String = "xxx";
var _obj:Object = new Object();
_obj["name_"] = nameX;
_obj.addEventListener(MouseEvent.MOUSE_DOWN, mouse_down);
function mouse_down(e:MouseEvent):void
{
        trace(e.target.name_);
}

Этот код не работает?

cv' 08.07.2011 11:20

Цитата:

Сообщение от S-ed (Сообщение 1009846)
Этот код не работает?

Конечно нет!
Чтобы случалось событие MouseDown, слушателя надо вешать на интерактивный дисплей объект, а это Sprite, MovieClip, Loader и еще некоторые, но никак не Object.

Вот полный рабочий пример:
Код AS3:

import flash.utils.Dictionary;
 
var dic:Dictionary = new Dictionary();
 
for(var i:int = 0; i<3; i++)
{
        var sprite:Sprite = new Sprite();
        var color:uint = Math.random()*0xFFFFFF;
        sprite.graphics.beginFill(color);
        sprite.graphics.drawRect(0,0,50,50);
        sprite.graphics.endFill();
        sprite.x = 60*i;
        sprite.addEventListener(MouseEvent.CLICK,eventHadnler_mouseClick)
        addChild(sprite);
        var spriteName:String = "Sprite #" + (i+1);
        var object:Object = { color:color, sprite:sprite, name:spriteName }
        dic[sprite] = object;
}
 
function eventHadnler_mouseClick(event:MouseEvent):void
{
        var sprite:Sprite = event.currentTarget as Sprite;
        var object:Object = dic[sprite];
        trace(object.name + ' color is ' + object.color);
}


ganjubazz 08.07.2011 21:10

Цитата:

Сообщение от S-ed (Сообщение 1009846)
Хм. Не совсем понятно, код с ошибками, и не полный (кто регистрирует слушателя)...
Код AS3:

var nameX:String = "xxx";
var _obj:Object = new Object();
_obj["name_"] = nameX;
_obj.addEventListener(MouseEvent.MOUSE_DOWN, mouse_down);
function mouse_down(e:MouseEvent):void
{
        trace(e.target.name_);
}

Этот код не работает?

ну да, там какбе кусок кода

S-ed 09.07.2011 02:10

cv'
Понятно. Пока плохо знаком с графической частью...


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

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