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

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

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

Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
Question Как обратиться с экземпляру главного класса?

Main.as
Код AS1/AS2:
package 
{
	public class Main 
	{
		public static var mainObj:Main;
		public var numberOfUsers:int;
		public function Main():void 
		{
			mainObj = this;
			new User();
		}
 
 
	}
}
User.as
Код AS1/AS2:
package 
{
	public class User
	{
		public function User()
		{
			Main.mainObj.numberOfUsers++;
		}
	}
}
Как положено делать такие вещи?

Старый 17.03.2010, 23:11
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 2  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
а как вы потом будуте обращаться к экземпляру класса User()?
чтобы обратиться к главному классу, импортируйте его.

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

Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
Цитата:
Сообщение от AlexDesinger Посмотреть сообщение
а как вы потом будуте обращаться к экземпляру класса User()?
Это пример. В примере никак) А на практике- естественно "user= new User();"
Цитата:
Сообщение от AlexDesinger Посмотреть сообщение
чтобы обратиться к главному классу, импортируйте его.
Мне нужно обратиться не к главному классу(Main) а к экземпляру этого класса, который создается в конструкторе. Точнее к его свойствам, в примере это numberOfUsers. Это так и надо делать как сделал я? Или есть способ проще, что-нибудь типа main.numberOfUsers?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
"Па, где Ма? ... Ма, а где Па? ... Па, а где Ма?"
Нормальный родитель, посылая ребенка в магазин, дает ему список, пакетик и деньги.
Ненормальный - ключ, чтоб он мог вернуться и задавать идиотские вопросы типа "а где деньги?"
Что это за странная архитектура, когда дети докучают родителям? У вас дети управляют ситуацией или исполняют наказы родителя? Если вашему ребенку user действительно НАДО что-то знать, так потрудитесь сказать ему об этом CРАЗУ, для этого и существуют параметры, передаваемые в его конструктор)))
__________________
Reality.getBounds(this);

Старый 18.03.2010, 11:51
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 5  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
еще по идее есть такой вариант, хотя Wolsh прав, конечно, можно либо попробовать сделать переменную к которой нужно обратиться статической, либо в user добавить слушателя присоединения к stage, а потом уже обращаться к главному и его свойствам)))

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

Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Нормальный родитель, посылая ребенка в магазин, дает ему список, пакетик и деньги.
Ненормальный - ключ, чтоб он мог вернуться и задавать идиотские вопросы типа "а где деньги?"
Продолжая вашу аналогию - нормальный родитель дает ребёнку ключь, чтоб тот мог вернуться и положить покупки на нужные полки =) У меня в игре которую я пишу класс User запрашивает и получает характеристики игрового персонажа. Очевидно он должен их как-то вернуть в основную часть, причём передавать в User ссылки на все 11 характерстик неудобно, слишком громоздкая конструкция, которую к томуже неудобно изменять. Остается вроде два варианта - передавать "ключь" - ссылку на главный объект, или использовать события. Если передавать ссылку - это должно выглядеть примерно так?
Код AS3:
package 
{
	public class Main 
	{
		public var numberOfUsers:int;
		public var userAge:int;
		public var userSex:String;
		public function Main():void 
		{
			new UserQuestionary(this);
		}
	}
 
}
Код AS3:
package  
{
	public class UserQuestionary
	{
		public function UserQuestionary(mainLink:Main)
		{
			mainLink.numberOfUsers++;
			mainLink.userAge = 21;//в реальной программе тут естественно будут какие-то сложные вычисления, а не просто цифры.
			mainLink.userSex = "man";
		}
	}
}

Старый 18.03.2010, 13:39
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 7  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
Цитата:
класс User запрашивает и получает характеристики игрового персонажа
Мне кажется неправильная логика хранить всю информацию о каждом user-е в главном классе, думаю достаточно хранить ссылку в главном классе на каждого юзера, чтобы через эти ссылки обращаться к характеристикам каждого юзера, а сами характеристики юзера хранить в экземпляре юзера.

И действительно, если при создании юзера какие-либо характеристики определяются исключительно в главном классе, то их разумно передавать в конструктор юзера для создания, и соответственно хранить их там.

А вообще ваша программа это точная копия программы К.Мука про виртуальный зоопарк, там отлично рассказано, как правильно снабдить животное нужными характеристиками, и если это требуется запросить их.


Последний раз редактировалось AlexDesinger; 18.03.2010 в 13:44.
Старый 18.03.2010, 14:47
mickfallout вне форума Посмотреть профиль Отправить личное сообщение для mickfallout Найти все сообщения от mickfallout
  № 8  
Ответить с цитированием
mickfallout
 
Аватар для mickfallout

Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
У меня юзер - это игрок, он один. его характеристики логично хранить в главном классе. Отличие от зоопарка в том что у меня класс UserQuestionary получает много данных которые надо передать в основной класс.
Вобщем всем спасибо, я понял что вариант из первого поста допустим, другие варианты мне менее удобны.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Из первого поста? Это где экземпляр класса Юзер, созданный в экземпляре класса Мейн, идет обратно в Мейн, чтобы - внимание - сказать Мейну, что тот создал еще одного Юзера? О_о
В нормальной семье ребенка дожидаются из магазина и просят отчитаться.
- Где колбаса?
- Вот!
- Где сдача?
- Вот сдача!
Это нормальная событийная модель. Ребенок что-то сделал и сообщил родителю, что задание выполнено. Родитель забрал то что его интересует (купленное на сдачу мороженое отнимать необязательно) От того, что ребенок прокрадется на кухню и втихаря сунет колбасу в холодильник, родители так и не узнают, что можно уже приглашать гостей. Подумайте об этом.
Более чем странно выглядит класс Мейн, который - при наличии класса Юзер - хранит у себя СВОИ приватные переменные юзерПол и юзерВозраст. По-моему, более логично смотрится юзер.пол и юзер.возраст - не согласны?

Впрочем, если Юзер вообще один (а зачем счетчик юзеров?) - то в нем просто нет смысла. Классы нужны прежде всего при повторяемости однотипных данных (ну или для инкапсуляции логики). Если Вы создаете тип данных "Юзер", то вообще непонятно, почему данные о Юзере хранятся в другом месте)) (но я и не знаю что Вы там задумали, да и имя класса изменили)) - так что не буду больше разглагольствовать))) Удачи.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 18.03.2010 в 17:51.
Старый 19.03.2010, 12:54
mickfallout вне форума Посмотреть профиль Отправить личное сообщение для mickfallout Найти все сообщения от mickfallout
  № 10  
Ответить с цитированием
mickfallout
 
Аватар для mickfallout

Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
Код AS3:
package {
  import flash.display.*;
  import flash.events.*;
 
  public class Main extends Sprite {
	private var userQuestionary:UserQuestionary = new UserQuestionary();
	private var userAge:int;
	private var userSex:String;
	private var userState:String;
 
	public function Main () {
	  userQuestionary.addEventListener(MyEvent.MY, questionaryCompleteHandler);
	  userQuestionary.init();
    }
 
    private function questionaryCompleteHandler (e:MyEvent):void {
      trace("Character created: age -"+e.age+", "+e.sex+", state - "+e.state);//выводит Character created: age -21, man, state - RF
    }
  }
}
Код AS3:
package {
  import flash.events.*;
  public class UserQuestionary extends EventDispatcher {
    public static const GAME_OVER:String = "gameOver";
    public function UserQuestionary () {
    }
	public function init():void {
	  dispatchEvent(new MyEvent(MyEvent.MY,false,false,21,"man","RF"));//в реальной программе тут конечно будет что-то типа new MyEvent( MyEvent.MY, false, false, defineAge(), defineSex(),defineState())
	}
  }
}
Код AS3:
package {
  import flash.events.*;
  public class MyEvent extends Event {
    public static const MY:String = "myEvent";
	public var age:int;
	public var sex:String;
	public var state:String;
    public function MyEvent (type:String,
			bubbles:Boolean = false,
			cancelable:Boolean = false,
			age:int = 18,
			sex:String = "man",
			state:String = "USA") {
      super(type, bubbles, cancelable);
	  this.age = age;
	  this.sex = sex;
	  this.state = state;
    }
  }
}
Так чтоли надо делать?
P.S. Wolsh, спасибо за советы =)


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

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

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


 


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


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