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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.07.2010, 20:12
Dr_Bra вне форума Посмотреть профиль Отправить личное сообщение для Dr_Bra Посетить домашнюю страницу Dr_Bra Найти все сообщения от Dr_Bra
  № 1  
Ответить с цитированием
Dr_Bra
 
Аватар для Dr_Bra

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
По умолчанию удаление переменной, которая загружает дополнительный класс

создаю переменню
Код AS3:
private var moveLayers;
переменная подгружает дополнительный класс
Код AS3:
moveLayers=new MoveObj(stage,layer1,layer2,layer3);
как мне удалить эту переменную, что бы подгруженный дополнительный класс перестал в данный момент функционировать?

Старый 02.07.2010, 20:18
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
moveLayers = null;
А если экземпляр этого класса добавляется в список отображения, то следует сначала удалять его оттуда, а затем занулять переменную.
__________________
тут я

Старый 02.07.2010, 20:25
Dr_Bra вне форума Посмотреть профиль Отправить личное сообщение для Dr_Bra Посетить домашнюю страницу Dr_Bra Найти все сообщения от Dr_Bra
  № 3  
Ответить с цитированием
Dr_Bra
 
Аватар для Dr_Bra

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
В главном классе создаются объекты. С помощью дополнительного класса эти объекты двигаются. Значит экземпляры дополнительно класса добавляются в список отображения? Да и просто
Код AS3:
moveLayers = null;
не помог в моем случае..

Добавлено через 4 минуты
попробовал вот так:
Код AS3:
removeChild(moveLayers);
moveLayers=null;
но выдается ошибка:
Код AS3:
TypeError: Error #1034: Type Coercion failed: cannot convert MoveObj@3810b479 to flash.display.DisplayObject.
	at Main/::removeMove()
	at flash.display::DisplayObjectContainer/removeChild()
	at Main/::one()


Последний раз редактировалось Dr_Bra; 02.07.2010 в 20:30.
Старый 02.07.2010, 21:08
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
В таком случае надо создать метод destroy в классе, который чистит все слушатели, удаляет все из отображения (если такое есть, но в вашем случае, получается, класс расширен от Object), затем удалять экземпляр класса занулением.
__________________
тут я


Последний раз редактировалось КорДум; 03.07.2010 в 02:40.
Старый 02.07.2010, 23:53
Dos87 вне форума Посмотреть профиль Отправить личное сообщение для Dos87 Найти все сообщения от Dos87
  № 5  
Ответить с цитированием
Dos87

Регистрация: Jun 2009
Сообщений: 39
В ошибке говорится, что класс MoveObj не может быть приведён к классу DisplayObject

Выкладывай сюда класс MoveObj.

Старый 03.07.2010, 03:02
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 6  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от Dos87 Посмотреть сообщение
В ошибке говорится, что класс MoveObj не может быть приведён к классу DisplayObject

Выкладывай сюда класс MoveObj.
тоже об этом подумал, но возник вопрос: а как же он его до этого добавил?
__________________
Поймай яблоко 2!

Старый 03.07.2010, 14:59
Dr_Bra вне форума Посмотреть профиль Отправить личное сообщение для Dr_Bra Посетить домашнюю страницу Dr_Bra Найти все сообщения от Dr_Bra
  № 7  
Ответить с цитированием
Dr_Bra
 
Аватар для Dr_Bra

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
класс MoveObj:
Код AS3:
package
{
	import flash.events.Event;
	import flash.display.*;
 
 
	public class MoveObj
	{
		private var w:Number;
		private var h:Number;
		private static var _speedX:Number;
		private static var _speedY:Number;
		private var l1xpos:Number;
		private var l1ypos:Number;
		private var l2xpos:Number;
		private var l3xpos:Number;
		private var l3ypos:Number;
 
		public function MoveObj(stage:Stage,layer1:MovieClip,layer2:MovieClip,layer3:MovieClip)
		{
			w=stage.stageWidth;
			h=stage.stageHeight;
			_speedX=30;
			_speedY=60;
 
			stage.addEventListener(Event.RESIZE, res);
			function res(evt:Event):void
			{
				trace(h+"_высота"+"      "+w+"_ширина")
				w=stage.stageWidth;
				h=stage.stageHeight;
			}
 
			stage.addEventListener(Event.ENTER_FRAME, checkMouse);
			function checkMouse(evt:Event):void
			{
				l1xpos = w/2-(stage.mouseX-w/2);
				l1ypos = h/2-(stage.mouseY-h/2)/2;
 
				l2xpos = w/2-(stage.mouseX-w/2)/2;
 
				l3xpos = w/2-(stage.mouseX-w*2)/3;
				l3ypos = h/2-(stage.mouseY-h/2)/3;
 
				layer1.y +=(l1ypos-layer1.y)/_speedY;
				layer1.x +=(l1xpos-layer1.x)/_speedX;
				layer2.y = layer1.y+(layer1.height/2)-215;
				layer2.x +=(l2xpos-layer2.x)/_speedX;
				layer3.y +=(l3ypos-layer3.y)/_speedY;
				layer3.x +=(l3xpos-layer3.x)/_speedX;
 
				if (layer1.y < stage.stageHeight-(layer1.height/2))
				{
					layer1.y = stage.stageHeight-(layer1.height/2)
				}	
			}
		}
	}
}
а подгружается он в главный класс так:
Код AS3:
private var moveLayers;
Код AS3:
moveLayers=new MoveObj(stage,layer1,layer2,layer3);

Старый 03.07.2010, 15:30
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Я так понял это класс-менеджер, управляющий дисплейными объектами, но сам он таковым не является. А все что Вам нужно - это в определенный момент переставать двигать объекты. Для этого надо просто отписываться от события Event.ENTER_FRAME, чтобы не выполнялась функция checkMouse. Сделайте в нем метод с отпиской от этого события и метод для возобновления функционала, будет удобно и логично.
__________________
Reality.getBounds(this);

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

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
в главном классе сделал переменную
Код AS3:
private var checkker:Boolean;
...
checkker=true;
так же в главном классе есть метод, который должен переключать наш checkker
Код AS3:
layer1.i1.addEventListener(MouseEvent.CLICK, one);
...
private function one(evt:MouseEvent):void 
		{
			trace("ONE");
			checkker=true;
		}
дополнительный класс изменился так:
Код AS3:
package
{
	import flash.events.Event;
	import flash.display.*;
 
 
	public class MoveObj
	{
		private var w:Number;
		private var h:Number;
		private static const SPEED_X:Number=30;
		private static const SPEED_Y:Number=60;
		private var l1xpos:Number;
		private var l1ypos:Number;
		private var l2xpos:Number;
		private var l3xpos:Number;
		private var l3ypos:Number;
 
		public function MoveObj(stage:Stage,layer1:MovieClip,layer2:MovieClip,layer3:MovieClip,checkker:Boolean)
		{
			w=stage.stageWidth;
			h=stage.stageHeight;
 
 
			stage.addEventListener(Event.RESIZE, res);
			function res(evt:Event):void
			{
				trace(h+"_высота"+"      "+w+"_ширина")
				w=stage.stageWidth;
				h=stage.stageHeight;
			}
 
			stage.addEventListener(Event.ENTER_FRAME, checkMouse);
			function checkMouse(evt:Event):void
			{
				if(checkker==true)
				{
					l1xpos = w/2-(stage.mouseX-w/2);
					l1ypos = h/2-(stage.mouseY-h/2)/2;
 
					l2xpos = w/2-(stage.mouseX-w/2)/2;
 
					l3xpos = w/2-(stage.mouseX-w*2)/3;
					l3ypos = h/2-(stage.mouseY-h/2)/3;
 
					layer1.y +=(l1ypos-layer1.y)/SPEED_Y;
					layer1.x +=(l1xpos-layer1.x)/SPEED_X;
					layer2.y = layer1.y+(layer1.height/2)-215;
					layer2.x +=(l2xpos-layer2.x)/SPEED_X;
					layer3.y +=(l3ypos-layer3.y)/SPEED_Y;
					layer3.x +=(l3xpos-layer3.x)/SPEED_X;
 
					if (layer1.y < stage.stageHeight-(layer1.height/2))
					{
						layer1.y = stage.stageHeight-(layer1.height/2)
					}	
				}
			}
		}
	}
}
но объекты не останавливаются, когда срабатывает событие one


Последний раз редактировалось Dr_Bra; 09.07.2010 в 12:28.
Старый 09.07.2010, 15:01
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А когда checkker будет false?)))

Добавлено через 2 минуты
И откуда функция checkMouse знает, кто такой checkker?

Добавлено через 4 минуты
а... она вложенная... когда же вас отучат от вложенных функций...
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
удаление класса , удаление переменной

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

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


 


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


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