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

asterion 29.05.2011 18:45

Задать инстанс экземпляру класса, что возвращает event.target
 
Есть простенькая задача: два динамично отрисованных прямоугольника, над ними лежат такие же, которые ловят события мыши. По событиям должны анимироваться те, которорые видны и лежат пон ними.

Код AS3:

import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Graphics;
import flash.display.Shape;
import flash.events.MouseEvent;
//import com.greensock.TweenLite;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import Simple_shape;
 
//var container:Sprite=new Sprite();
//var Rectang:Sprite=new Sprite();
 
var GallRect:Sprite=new Sprite();
var InfoRect:Sprite=new Sprite();
 
var Gallery_rect:Simple_shape;
var Info_rect:Simple_shape;
var Gallery_trans:Simple_shape;
var Info_trans:Simple_shape;
 
//this.addChild(container);
//container.addChild(Rectang);
 
drawRectItems();
 
function drawRectItems() {
        Gallery_rect=new Simple_shape(GallRect,0xFF00FF,1,100,0,200,80);
        Info_rect=new Simple_shape(InfoRect,0xFFFF00,1,301,0,200,80);
        Gallery_trans=new Simple_shape(GallRect,0xFF00FF,0,200,0,200,80);
        Info_trans=new Simple_shape(InfoRect,0xFFFF00,0,401,0,200,80);
 
        addChild(Gallery_rect);
        addChild(Info_rect);
        addChild(Gallery_trans);
        addChild(Info_trans);
 
        Gallery_rect.scaleY=0;
        Info_rect.scaleY=0;
 
        Gallery_trans.addEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
        Info_trans.addEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
}
 
function scaleItemRectMOver(e:MouseEvent) {
        trace(e.target.name);// возвращает instanсe3 и instanсe4
        var trans_target=e.target;
        var target;
        var mis_trans_target;
        //trace("trans_target = "+trans_target.name);
        //trace("target = "+target.name);
        if (trans_target.name==Gallery_trans) {
                target=Gallery_rect;
                mis_trans_target=Info_trans;
        } else {
                target=Info_rect;
                mis_trans_target=Gallery_trans;
        }
        trans_target.removeEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
        mis_trans_target.removeEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
        trans_target.addEventListener(MouseEvent.MOUSE_OUT, scaleItemRectMOut);
        var mOverTween:Tween=new Tween(target,"scaleY",Back.easeOut,0,1,.8,true);
}
 
function scaleItemRectMOut(e:MouseEvent) {
        var trans_target=e.target;
        var target;
        var mis_trans_target;
        if (trans_target==Gallery_trans) {
                target=Gallery_rect;
                mis_trans_target=Info_trans;
        } else {
                target=Info_rect;
                mis_trans_target=Gallery_trans;
        }
        trans_target.removeEventListener(MouseEvent.MOUSE_OUT, scaleItemRectMOut);
        trans_target.addEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
        mis_trans_target.addEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
        var mOutTween:Tween=new Tween(target,"scaleY",Back.easeOut,1,0,.8,true);
}

Прямоугольники создаются простым классом
Код AS3:

package {
        import flash.display.Sprite;
 
        public class Simple_shape extends Sprite {
                public function Simple_shape(geomName, col, alph, rect_x, rect_y, rect_with, rect_height) {
                        //addChild(geomName);
                        geomName.graphics.beginFill(col,alph);
                        geomName.graphics.drawRect(rect_x, rect_y, rect_with, rect_height);
                        geomName.graphics.endFill();
                }
        }
}

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

Добавлено через 5 минут
сорри, протупил, прозрачные отрисовал в том же спрайте что и цветные. Поправил, но все равно более-менее нормально отрисовывает только правый Shape.

Код AS3:

import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Graphics;
import flash.display.Shape;
import flash.events.MouseEvent;
//import com.greensock.TweenLite;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import Simple_shape;
 
//var container:Sprite=new Sprite();
//var Rectang:Sprite=new Sprite();
 
var GallRect:Shape=new Shape();
var InfoRect:Shape=new Shape();
var GallRect_trans:Shape=new Shape();
var InfoRect_trans:Shape=new Shape();
 
var Gallery_rect:Simple_shape;
var Info_rect:Simple_shape;
var Gallery_trans:Simple_shape;
var Info_trans:Simple_shape;
 
//this.addChild(container);
//container.addChild(Rectang);
 
drawRectItems();
 
function drawRectItems() {
        Gallery_rect=new Simple_shape(GallRect,0xFF00FF,1,100,0,200,80);
        Info_rect=new Simple_shape(InfoRect,0xFFFF00,1,301,0,200,80);
        Gallery_trans=new Simple_shape(GallRect_trans,0xFF00FF,0,200,0,200,80);
        Info_trans=new Simple_shape(InfoRect_trans,0xFFFF00,0,401,0,200,80);
 
        addChild(Gallery_rect);
        addChild(Info_rect);
        addChild(Gallery_trans);
        addChild(Info_trans);
 
        Gallery_rect.scaleY=0;
        Info_rect.scaleY=0;
 
        Gallery_trans.addEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
        Info_trans.addEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
}
 
function scaleItemRectMOver(e:MouseEvent) {
        trace(e.target.name);// возвращает instanсe7 и instanсe8
        var trans_target=e.target;
        var target;
        var mis_trans_target;
        if (trans_target.name==Gallery_trans) {
                target=Gallery_rect;
                mis_trans_target=Info_trans;
        } else {
                target=Info_rect;
                mis_trans_target=Gallery_trans;
        }
        trans_target.removeEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
        mis_trans_target.removeEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
        trans_target.addEventListener(MouseEvent.MOUSE_OUT, scaleItemRectMOut);
        var mOverTween:Tween=new Tween(target,"scaleY",Back.easeOut,0,1,.8,true);
}
 
function scaleItemRectMOut(e:MouseEvent) {
        var trans_target=e.target;
        var target;
        var mis_trans_target;
        if (trans_target==Gallery_trans) {
                target=Gallery_rect;
                mis_trans_target=Info_trans;
        } else {
                target=Info_rect;
                mis_trans_target=Gallery_trans;
        }
        trans_target.removeEventListener(MouseEvent.MOUSE_OUT, scaleItemRectMOut);
        trans_target.addEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
        mis_trans_target.addEventListener(MouseEvent.MOUSE_OVER, scaleItemRectMOver);
        var mOutTween:Tween=new Tween(target,"scaleY",Back.easeOut,1,0,.8,true);
}



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

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