Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.05.2011, 18:45
asterion вне форума Посмотреть профиль Отправить личное сообщение для asterion Найти все сообщения от asterion
  № 1  
Ответить с цитированием
asterion

Регистрация: 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.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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