PDA

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


ganjubazz
07.07.2011, 16:55
Привет народ! Подскажите пожалуйста, как обратится к объекту, который содержит спрайт, по нажатию мышки на спрайт? Вот пример кода:

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
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
вот что значит 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
Хм. Не совсем понятно, код с ошибками, и не полный (кто регистрирует слушателя)...
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
Этот код не работает?
Конечно нет!
Чтобы случалось событие MouseDown, слушателя надо вешать на интерактивный дисплей объект, а это Sprite, MovieClip, Loader и еще некоторые, но никак не Object.

Вот полный рабочий пример:
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
Хм. Не совсем понятно, код с ошибками, и не полный (кто регистрирует слушателя)...
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'
Понятно. Пока плохо знаком с графической частью...