Регистрация: Mar 2010
Сообщений: 18
|
Задать инстанс экземпляру класса, что возвращает 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);
}
Последний раз редактировалось asterion; 29.05.2011 в 18:58.
|