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

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

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

Регистрация: Jan 2010
Сообщений: 187
Question добавление на сцену в другом классе

Не могу понять в чём дело.
В классе Main добавляю на сцену пару объектов.
Потом вызываю функцию из другого класса, которая должна добавить ещё один объект на сцену.

Код AS3:
package 
{
	import flash.display.*;
	import flash.events.*;
 
	public class Main extends Sprite 
	{
	        public var obj1:MovieClip;
		public var obj2:MovieClip;
 
		public function Main()
		{
			this.addEventListener( Event.ADDED_TO_STAGE, Function1 );
		}
 
 
		public function Function1(event:Event = null):void 
		{
			obj1 = new Object1();
			addChild(obj1);
			obj2 = new Object2();
			addChild(obj2);
			Class2.Function2();
		}	
                .....
и вторая функция
Код AS3:
package  
{
	import flash.display.*;
	import flash.events.*;
 
	public class Class2 extends MovieClip
	{
		public static var obj3:MovieClip;
 
		public function Class2() 
		{
 
		}
 
 
		public static function Function2():void
		{
			trace("111");
			obj3 = new Object3(); 
			addChild(obj3);	
		}		
               ....
Строка trace работает, а дальше вываливается ошибка.
Error: Call to a possibly undefined method addChild. addChild(obj3);

Подскажите, Что я забыл или делаю неправильно?

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

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Function2 функция статическая, на кого вы собрались добавлять? Передавайте в нее stage или другой контейнер. Например так:
Код AS3:
public static function Function2(container: DisplayObjectContainer):void
{
	trace("111");
	obj3 = new Object3(); 
	container.addChild(obj3);	
}	
//и вызов
Class2.Function2(this);
P.S. методы нужно называть с маленькой буквы. И желательно давать осмысленные имена, а не Function1 и Function2, это относится к именам классов и всего остального.
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 27.02.2012 в 13:07.
Старый 27.02.2012, 13:05
Deimos747 вне форума Посмотреть профиль Отправить личное сообщение для Deimos747 Найти все сообщения от Deimos747
  № 3  
Ответить с цитированием
Deimos747
 
Аватар для Deimos747

Регистрация: Mar 2011
Сообщений: 243
В static функции можно использовать только статические методы, поэтому он у вам и не видит addChild.

Старый 27.02.2012, 13:09
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 4  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Спасибо за синтаксис. Учту. Названия такие - это для тестового примера просто. Для реального примера - согласен - названия будут другие.
А тогда вопрос. Можно обойтись без использования статической функции в этом деле?
Я с классами только начал разбираться, и когда пробовал создать просто
Код AS3:
public function Function2():void
оно ругалось так:
Error: Call to a possibly undefined method Function2 through a reference with static type Class.

Добавлено через 1 минуту
Или как передавать stage или другой контейнер?
В общем, как обычно решают такую ситуацию?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
"Обычно" дети делают внуков, а не братьев и сестренок.
Мейн основной класс, папа всем и вся. Только он решает, кого добавлять в свой список детей, а кого нет.
Например, ваша Function2 могла бы возвращать дисплейный объект по запросу из Мейна, и Мейн этот объект добавлял бы в свой дисплейлист.
Код AS3:
// Мейн:
public function Function1(event:Event = null):void 
{
	obj1 = new Object1();
	addChild(obj1);
	obj2 = Class2.getObject3();
	addChild(obj2);
}
 
// Class2
public static function getObject3():DisplayObject
{
	trace("111");
	return new Object3();	
}
__________________
Reality.getBounds(this);

Старый 27.02.2012, 16:16
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 6  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Спасибо. С контейнером - получилось.
А вот ещё вопрос тогда.
В главном классе я хочу прослушать тычок мышей и вызвать метод из другого класса.
Вот так не работает.
Код AS1/AS2:
menu2.button2.addEventListener(MouseEvent.MOUSE_DOWN, Class2.functionFromClass2);
Функция-приёмник во втором классе выглядит так:
Код AS3:
public function functionFromClass2(e:MouseEvent):void 
{
trace("!!!!!!!!!!");
}
Пришлось сделать так:
Код AS3:
	menu2.button2.addEventListener(MouseEvent.MOUSE_DOWN, CC);
		}	
 
		private function CC(e:MouseEvent):void 
		{
			Class2.functionFromClass2();
		}
Ну и функцию-приёмник, конечно, тоже изменил:
Код AS3:
public function functionFromClass2():void 
{
trace("!!!!!!!!!!");
}
Заработало, но получилось немного сложнее. Неужели нельзя никак первым вариантом сделать?

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

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

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


 


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


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