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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.01.2011, 01:35
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 1  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
По умолчанию Вывод координат экземпляров классов

Возник вопрос в понимании ActionScript.

Создал два символа и подключил к ним классы. И так, есть два класса шаров-мячиков(Shar и SharZloi). Оба эти класса расширяются третьим классом(XYRandom), в котором указаны координаты возникновения экземпляров этих классов на сцене. И затем оба эти класса добавляются в главный класс Main.

Мне нужно видеть координаты каждого экземпляра класса в другом классе. Но почему-то выводятся одни нули.

Вот код:
Код AS3:
package  
{
	import flash.display.MovieClip;
	import flash.events.*;
 
	public class XYRandom extends MovieClip
	{
 
		public function XYRandom():void
		{
			this.addEventListener(Event.ADDED_TO_STAGE, added);
		}
 
		private function added(e:Event):void
		{
			this.x = Math.random() * stage.stageWidth;
			this.y = Math.random() * stage.stageHeight;
		}
	}
}
 
package  
{
	import flash.display.*;
	import flash.events.*;
	import com.greensock.*;
 
	public class Shar extends XYRandom
	{
 
		public function Shar():void 
		{
			this.addEventListener(Event.ADDED_TO_STAGE, added)
		}
 
		private function added(e:Event):void
		{
			addEventListener(Event.ENTER_FRAME, onFrame)
		}
 
		private function onFrame(e:Event):void
		{
			var dx:Number = this.x + mouseX;
			var dy:Number = this.y +mouseY;
			TweenLite.to(this, 0.5, {x:dx, y:dy})
		}
	}
}
 
package  
{
	import flash.events.Event;
	import flash.display.*;
	/**
	 * ...
	 * @author 
	 */
	public class SharZloi extends XYRandom
	{
 
		private var shar:Shar;
 
		public function SharZloi():void 
		{
			this.addEventListener(Event.ADDED_TO_STAGE, added);
		}
 
		private function added(e:Event):void
		{
			shar = new Shar();
			addEventListener(Event.ENTER_FRAME, onFrame)
		}
 
		private function onFrame(e:Event):void
		{
			trace(shar.x)//Выводит нули
		}
	}
}
 
package  
{
	import flash.display.*;
	import flash.events.*;
	import com.greensock.*;
	/**
	 * ...
	 * @author 
	 */
	public class Main extends Sprite
	{
 
		public function Main():void 
		{
			var shar:MovieClip = new Shar();
			addChild(shar);
 
			var zloi:MovieClip = new SharZloi();
			addChild(zloi);
 
		}
	}
}
Доступ к координатам экземпляров классов могу только получить в главном классе Main, но мне надо именно в двух вышеназванных классах.

Объясните пожалуйста мою ошибку.

Старый 04.01.2011, 01:45
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Шар у вас на сцену не добавляется.

Старый 04.01.2011, 01:51
MetSerp вне форума Посмотреть профиль Отправить личное сообщение для MetSerp Найти все сообщения от MetSerp
  № 3  
Ответить с цитированием
MetSerp
 
Аватар для MetSerp

Регистрация: Sep 2010
Адрес: Москва
Сообщений: 24
могу ошибаться но
Код AS3:
 var shar:MovieClip = new Shar();
			addChild(shar);
это свойство объекта Main, а
Код AS3:
trace(shar.x)
выводит значение
Код AS3:
private var shar:Shar;
так как он в более близкой области видимости и найдя его определение внутри класса SharZloi, дальше поиск не происходит.

Старый 04.01.2011, 01:53
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 4  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Да... щас добавил экземпляр класса Shar на сцену в классе SharZloi, все работает. Но у меня вопрос: Зачем тогда нужно событие Event.ADDED_TO_STAGE. Ведь по идее оно происходит, когда экземпляр добавлен на сцену. Или я не так понимаю?

Старый 04.01.2011, 01:57
MetSerp вне форума Посмотреть профиль Отправить личное сообщение для MetSerp Найти все сообщения от MetSerp
  № 5  
Ответить с цитированием
MetSerp
 
Аватар для MetSerp

Регистрация: Sep 2010
Адрес: Москва
Сообщений: 24
все верно оно происходит, но вы добавляете на сцену не тот объект за которым следите.

Старый 04.01.2011, 01:59
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 6  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Цитата:
Сообщение от udaaff Посмотреть сообщение
Шар у вас на сцену не добавляется.
Шар то добавляется, но в классе Main. Если добавляю в классе SharZloi, то все работает. Вопрос сформулировал выше про событие добавление объекта на сцену.

Старый 04.01.2011, 01:59
saikspaik вне форума Посмотреть профиль Отправить личное сообщение для saikspaik Найти все сообщения от saikspaik
  № 7  
Ответить с цитированием
saikspaik

Регистрация: Nov 2009
Сообщений: 300
В общем тебе не нужно в классе SharZloi, создавать экземпляр класса Shar, он у тебя уже создан в Main.
Тебе просто нужно просто передать в SharZloi ссылку на экземпляр класса Shar и потом использовать его свойства.

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

Регистрация: Sep 2010
Адрес: Москва
Сообщений: 24
собственно в вашем случае достаточно вывести
Код AS3:
var shar:MovieClip = new Shar();
var zloi:MovieClip = new SharZloi();
в свойства уровня класса, а не метода конструктора, эти свойства и будут содержать ссылки на данные объекты.

Старый 04.01.2011, 02:03
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 9  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
shar не добавлен на сцену, соответственно его added не вызвалось и координаты его 0. Зачем shar делается полем SharZloi, если SharZloi расширяет XYRandom?
Почему везде private function added(e:Event):void может, стоит их чуть по-рахному назвать?
Меня вот удивило, что оно не ругнулось насчёт override, что, если private, то метод уже не виртуальный во флэше выходит?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 04.01.2011, 02:16
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 10  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Понял главную ошибку: Объект еще не на сцене, а я вывожу его координаты.

Цитата:
Сообщение от MetSerp Посмотреть сообщение
собственно в вашем случае достаточно вывести
Код AS3:
var shar:MovieClip = new Shar();
var zloi:MovieClip = new SharZloi();
в свойства уровня класса, а не метода конструктора, эти свойства и будут содержать ссылки на данные объекты.
Честно говоря не понял, о чем ты. Думаю это ничего не исправит.
Цитата:
shar не добавлен на сцену, соответственно его added не вызвалось и координаты его 0.
Спасибо понял. хотя интересно. Если объект не добавлен, то и координата должна быть не определена, то есть даже не равна нулю.
Цитата:
Зачем shar делается полем SharZloi, если SharZloi расширяет XYRandom?
Про поле я не понял
Цитата:
Почему везде private function added(e:Event):void может, стоит их чуть по-рахному назвать?
Можно. Просто это для быстроты.
Цитата:
Меня вот удивило, что оно не ругнулось насчёт override, что, если private, то метод уже не виртуальный во флэше выходит?
Ты имеешь виду, эту строчку:
Код AS3:
private function added(e:Event):void
		{
			this.x = Math.random() * stage.stageWidth;
			this.y = Math.random() * stage.stageHeight;
		}
Или о чем ты?

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

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

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


 


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


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