![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
ситуация:
есть спрайт(ellipse) который является основанием(визуально) для нескольких более меньших по размерам спрайтов(dots). как сделать чтобы при mouse_move по dots также срабатывало mouse_move ellipse? нужно чтото типа прозраности спрайтов для событий мыши. спрайты одного уровня иерархии. |
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
Приведите код, и конкретно что не работает.
Цитата:
Цитата:
Последний раз редактировалось mre; 10.09.2008 в 16:15. |
|
|||||
|
упростим...
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
var area:Sprite = new Sprite();
var area2:Sprite = new Sprite();
area.graphics.lineStyle(1,0xff0000,1, true,"normal", CapsStyle.ROUND, JointStyle.ROUND, 3);
area.graphics.beginFill(0xff0000,1);
area.graphics.drawEllipse(0,0,200,200);
area2.graphics.lineStyle(1,0x00ff00,0.6, true,"normal", CapsStyle.ROUND, JointStyle.ROUND, 3);
area2.graphics.beginFill(0x00ff00,0.6);
area2.graphics.drawEllipse(50,50,100,100);
this.addChild(area);
this.addChild(area2);
area.addEventListener(MouseEvent.MOUSE_OVER,areaOver);
area.addEventListener(MouseEvent.MOUSE_OUT,areaOut);
area2.addEventListener(MouseEvent.MOUSE_OVER,area2Over);
area2.addEventListener(MouseEvent.MOUSE_OUT,area2Out)
function areaOver(event:Event):void{
trace("areaOver");
}
function areaOut(event:Event):void{
trace("areaOut");
}
function area2Over(event:Event):void{
trace("area2Over");
}
function area2Out(event:Event):void{
trace("area2Out");
}
|
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
Дак подпишите контейнер:
И если не хотите чтобы диспатчились события мыши внутренних объектов, то подписывайтесь на ROLL_OVER, ROLL_OUT или this.mouseChildren = false. |
|
|||||
|
хм.. если усложнить задачу, то не работает =\
private function drawGeneration(){
var area:Area = new Area(xmlData.area,generationContainer);
var imageUnits:Array = new Array();
for each(var unit in xmlData.units.unit){
imageUnits.push(new ImageUnit(unit,generationContainer));
imageUnits[imageUnits.length-1].addEventListener(MouseEvent.MOUSE_OVER, over);
imageUnits[imageUnits.length-1].addEventListener(MouseEvent.MOUSE_OUT, out);
}
}
private function over(event:Event):void{
trace(1);
}
private function out(event:Event):void{
trace(2);
}
|
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
А где добавление в DisplayList?
|
|
|||||
|
в констукторе все добавляется, спрайт появляется и работает.
А вот новое событие к уже созданному экземпляру добавить не получается. generationContainer - это и есть дисплейлист |
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
Покажите класс ImageUnit.
|
|
|||||
package{
import flash.events.*;
import flash.text.*;
import flash.display.*;
import flash.net.URLRequest;
import flash.errors.*
import flash.utils.Timer;
public class ImageUnit extends Sprite{
var myException:MyException = new MyException();
var xmlData:XML;
var parentObject:Object;
var pos_x, pos_y:int;
var global_x, global_y, global_w,global_h:int;
var loader:Loader = new Loader();
var imageUnit:Sprite = new Sprite();
var imageUnitContainer:Sprite = new Sprite();
var urlRequest:URLRequest;
var imageFile:String;
var note:Note;
var timer:Timer = new Timer(1000,2);
public function ImageUnit(xmlImport:XML, obj:Object){
parentObject=obj;
xmlData=xmlImport;
render();
}
public function show(){
imageUnitContainer.addEventListener(Event.ENTER_FRAME, initContainer);
}
public function hide(){
imageUnitContainer.addEventListener(Event.ENTER_FRAME, destroyContainer);
}
private function render(){
setSettings();
initContainers();
}
private function initContainers(){
imageUnitContainer.addChild(imageUnit);
if (xmlData.note) note = new Note(xmlData.note,imageUnitContainer);
parentObject.addChild(imageUnitContainer);
}
private function setSettings(){
pos_x=new int(xmlData.@x);
pos_y=new int(xmlData.@y);
imageFile=xmlData.image;
imageUnit.alpha=new Number(xmlData.alpha);
urlRequest=new URLRequest(imageFile);
loader.load(urlRequest);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fileLoaded);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, invalidFile);
imageUnitContainer.addEventListener(MouseEvent.MOUSE_OVER, noteShow);
imageUnitContainer.addEventListener(MouseEvent.MOUSE_OUT, noteHide);
}
private function initContainer(event:Event):void{
if (imageUnitContainer.scaleY>=1) imageUnitContainer.removeEventListener(Event.ENTER_FRAME, initContainer);
else{
imageUnitContainer.y=global_y+global_h*(1-imageUnitContainer.scaleY);
imageUnitContainer.scaleY+=0.1;
}
}
private function destroyContainer(event:Event):void{
if (imageUnitContainer.scaleY<=0) imageUnitContainer.removeEventListener(Event.ENTER_FRAME, destroyContainer);
else{
imageUnitContainer.y=global_y+global_h*(1-imageUnitContainer.scaleY);
imageUnitContainer.scaleY-=0.1;
}
}
private function invalidFile(event:Event){
myException.errorMessage("Ошибка при открытии файла: "+imageFile,parentObject);
}
private function fileLoaded(event:Event):void{
imageUnit.addChild(loader.content);
global_x=pos_x-imageUnit.width/2;
global_y=pos_y-imageUnit.height/2;
global_h=loader.content.height;
imageUnitContainer.x=global_x;
imageUnitContainer.y=global_y;
imageUnitContainer.scaleY=0;
show();
}
private function noteShow(event:Event):void{
timer.addEventListener("timer",timerHandler);
note.show();
}
private function noteHide(event:Event):void{
timer.start();
}
private function timerHandler(event:TimerEvent):void{
note.hide();
}
}
}
|
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
Все понятно.
Вы же ImageUnit не добавляете в DisplayList, а добавляете его переменные. Можно сделать так: Но реализация структуры классов у Вас весьма не грамотная. Последний раз редактировалось mre; 10.09.2008 в 18:32. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|