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

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

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

Регистрация: Aug 2008
Сообщений: 128
Отправить сообщение для alekson с помощью ICQ
По умолчанию Вопрос по наложенным спрайтам и их событиям

ситуация:
есть спрайт(ellipse) который является основанием(визуально) для нескольких более меньших по размерам спрайтов(dots).

как сделать чтобы при mouse_move по dots также срабатывало mouse_move ellipse?

нужно чтото типа прозраности спрайтов для событий мыши.

спрайты одного уровня иерархии.

Старый 10.09.2008, 16:13
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 2  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Приведите код, и конкретно что не работает.
Цитата:
> является основанием(визуально)
Что это значит, dots являются child'ами ellipse или нет?
Цитата:
> спрайты одного уровня иерархии
Все или только dots?


Последний раз редактировалось mre; 10.09.2008 в 16:15.
Старый 10.09.2008, 16:18
alekson вне форума Посмотреть профиль Отправить личное сообщение для alekson Найти все сообщения от alekson
  № 3  
Ответить с цитированием
alekson

Регистрация: Aug 2008
Сообщений: 128
Отправить сообщение для alekson с помощью ICQ
упростим...

Код:
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");
}
нужно чтобы вовремя area2Over выполняось также areaOver

Старый 10.09.2008, 16:26
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 4  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Дак подпишите контейнер:
Код:
this.addEventListener(MouseEvent.MOUSE_OVER,areaOver);
this.addEventListener(MouseEvent.MOUSE_OUT,areaOut);
И если не хотите чтобы диспатчились события мыши внутренних объектов, то подписывайтесь на ROLL_OVER, ROLL_OUT или this.mouseChildren = false.

Старый 10.09.2008, 17:00
alekson вне форума Посмотреть профиль Отправить личное сообщение для alekson Найти все сообщения от alekson
  № 5  
Ответить с цитированием
alekson

Регистрация: Aug 2008
Сообщений: 128
Отправить сообщение для alekson с помощью ICQ
хм.. если усложнить задачу, то не работает =\

Код:
		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);
		}
у ImageUnits[i] выполняются события заданные внутри класса, но если добавить новые обработчики то они уже не работают (функции over и out). Почему?

Старый 10.09.2008, 17:12
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 6  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
А где добавление в DisplayList?

Старый 10.09.2008, 17:25
alekson вне форума Посмотреть профиль Отправить личное сообщение для alekson Найти все сообщения от alekson
  № 7  
Ответить с цитированием
alekson

Регистрация: Aug 2008
Сообщений: 128
Отправить сообщение для alekson с помощью ICQ
Код:
imageUnits.push(new ImageUnit(unit,generationContainer));
в констукторе все добавляется, спрайт появляется и работает.
А вот новое событие к уже созданному экземпляру добавить не получается.

generationContainer - это и есть дисплейлист

Старый 10.09.2008, 17:46
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 8  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Покажите класс ImageUnit.

Старый 10.09.2008, 18:11
alekson вне форума Посмотреть профиль Отправить личное сообщение для alekson Найти все сообщения от alekson
  № 9  
Ответить с цитированием
alekson

Регистрация: Aug 2008
Сообщений: 128
Отправить сообщение для alekson с помощью ICQ
Код:
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();
		}
	}
}

Старый 10.09.2008, 18:19
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 10  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Все понятно.
Вы же ImageUnit не добавляете в DisplayList, а добавляете его переменные.
Можно сделать так:
Код:
...
private function initContainers()
{
    imageUnitContainer.addChild(imageUnit);
    if (xmlData.note) note = new Note(xmlData.note,imageUnitContainer);
    this.addChild(imageUnitContainer);
    parentObject.addChild(this);
}
...
Но реализация структуры классов у Вас весьма не грамотная.


Последний раз редактировалось mre; 10.09.2008 в 18:32.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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