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

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

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

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

В главном классе создаю переменные, с возможностью доступа к ним из дополнительных классов. Правильно ли я написал? Подскажите, как называются такие переменные, константы?

Код AS3:
package
{
	import flash.display.*;
	import flash.events.Event;
 
	public class WebSite extends Sprite
	{
		protected  var _layer1_mc:Sprite;
		protected  var _layer2_mc:Sprite;
		protected  var _layer3_mc:Sprite;
 
		public function WebSite():void
		{
			if(stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		private function init(evt:Event = null):void
		{
 
			trace(stage.stageHeight)
 
			var _layer3_mc:Cloud_2=new Cloud_2();
			stage.addChild(_layer3_mc);
			_layer3_mc.x=stage.stageWidth/1.5;
			_layer3_mc.y=stage.stageHeight/2;
 
			var _layer2_mc:Bush=new Bush();
			stage.addChild(_layer2_mc);
			_layer2_mc.x=stage.stageWidth/2;
			_layer2_mc.y=stage.stageHeight+200;
 
			var _layer1_mc:Full_tree=new Full_tree();
			stage.addChild(_layer1_mc);
			_layer1_mc.x=stage.stageWidth/2;
			_layer1_mc.y=stage.stageHeight;
 
		}
	}
}

Старый 01.07.2010, 15:42
easy.proger вне форума Посмотреть профиль Отправить личное сообщение для easy.proger Найти все сообщения от easy.proger
  № 2  
Ответить с цитированием
easy.proger

Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
Вы о - protected var _layer1_mc:Sprite; ? так вы наоборот создали защищенные переменные …, а нада было public var _layer1_mc:Sprite; или public static var _layer1_mc:Sprite;
В случае
public var доступ осуществляется через экземпляр класса
Код AS3:
var myObject:MyObject 
myObject.myPublicVar
где в классе MyObject переменная объявлена, как public var myPublicVar:…
В случае с public static var
доступ осуществляется через класс, то есть
Код AS3:
MyObject.publicStaticVar
где в классе MyObject переменная объявлена, как public static var publicStaticVar

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

Регистрация: Dec 2009
Сообщений: 428
1. у Вас дублируются переменные, уберите в функции init() все упоминания "var", иначе получается что у Вас объявлены три переменные, видимые из классов пакета, и три в локальной области видимости функции, и они не равны друг другу
2. Если вы оканчиваете название переменной на _mc, то она должна быть мувиклипом
3. Эти переменные не называются константами
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

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

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
Цитата:
Сообщение от leofit Посмотреть сообщение
уберите в функции init() все упоминания "var", иначе получается что у Вас объявлены три переменные, видимые из классов пакета, и три в локальной области видимости функции, и они не равны друг другу
Код AS3:
package
{
	import flash.display.*;
	import flash.events.Event;
 
	public class WebSite extends Sprite
	{
		public static var _layer1_mc:Full_tree;
		public static var _layer2_mc:Bush;
		public static var _layer3_mc:Cloud;
		public static var _move:MoveObj;
 
		public function WebSite():void
		{
			if(stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		private function init(evt:Event = null):void
		{
			trace(stage.stageHeight)
 
			_layer3_mc:Cloud=new Cloud();
			stage.addChild(_layer3_mc);
			_layer3_mc.x=stage.stageWidth/1.5;
			_layer3_mc.y=stage.stageHeight/2;
 
			_layer2_mc:Bush=new Bush();
			stage.addChild(_layer2_mc);
			_layer2_mc.x=stage.stageWidth/2;
			_layer2_mc.y=stage.stageHeight+200;
 
			_layer1_mc:Full_tree=new Full_tree();
			stage.addChild(_layer1_mc);
			_layer1_mc.x=stage.stageWidth/2;
			_layer1_mc.y=stage.stageHeight;
 
			_move:MoveObj=new MoveObj(_layer1_mc, _layer2_mc, _layer3_mc);
		}
	}
}
выдает ошибки:
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 146
Размер:	25.2 Кб
ID:	24728  

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

Регистрация: Dec 2009
Сообщений: 428
Код AS3:
_layer3_mc=new Cloud();
stage.addChild(_layer3_mc);
Добавлено через 1 минуту
Отбой, зачем static? Оставляйте протектед или просто паблик
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Нельзя сделать _layer3_mc статическим так как он требует создания в констукторе или т.п.

Код AS3:
 
		public var _layer1_mc:Sprite;
		public var _layer2_mc:Sprite;
		public var _layer3_mc:Sprite;
 
                private function init(evt:Event = null):void
		{
			trace(stage.stageHeight)
 
			_layer3_mc =Sprite(new Cloud());
 
			stage.addChild(_layer3_mc);
			_layer3_mc.x=stage.stageWidth/1.5;
			_layer3_mc.y=stage.stageHeight/2;
 
			_layer2_mc=Sprite(new Bush());
			stage.addChild(_layer2_mc);
			_layer2_mc.x=stage.stageWidth/2;
			_layer2_mc.y=stage.stageHeight+200;
 
			_layer1_mc=Sprite(new Full_tree());
			stage.addChild(_layer1_mc);
			_layer1_mc.x=stage.stageWidth/2;
			_layer1_mc.y=stage.stageHeight;
		}

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

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
Есть замечания по коду:

1. Прежде всего, перейдите на вербльюжью нотацию - она используется в AS3 и многие редакторы ориентированы именно на нее. Не используйте подчеркивания вначале имени переменной - это делается лишь изредка и, как правило, применяется при создании get/set методов.
Код AS1/AS2:
protected  var layer1:Sprite;
2. Объявление публичной переменной - дело тонкое. Далеко не всегда это рекомендуется делать, а в вашем случае лучшим выбором возможно будет организация статического get метода (set явно не пригодится).
Второй вариант, рекомендуемый в общем случае - передать ссылки на экземпляры layer в нужные классы.

3. Про объявление локальных переменных уже сказали.

4. Часто инициализацию объектов можно смело вынести в объявление:
Код AS1/AS2:
private var layer:FullTree = new FullTree;
(не используйте венгерскую нотацию!!!)
К тому-же, если вы используете типизацию Sprite, то не сможете корректно достучаться до методов и свойств, FullTree.
Я использовал private, потому, что крайне маловероятно, что у рутового класса WebSite (если я правильно понял) будут потомки.

5. Ошибка логики вызова init. Мне сложно объяснить, но я поступил бы иначе.
В итоге, код вывглядел бы примерно так:

Код AS1/AS2:
package com.site {
	import flash.display.Sprite;	
	import com.site.layers.*;	
 
	public class WebSite extends Sprite {
 
		private static var _instance : WebSite;
		public function getInstance() : WebSite {
			return _instance;
		}
 
		private var darkCloudLayer : DarkCloud = new DarkCloud();
		private var bushLayer : Bush = new Bush();
		private var fullTreeLayer : FullTree = new FullTree();
 
		public function WebSite() {
			super();
			initInstance();
		}
 
		private function initInstance() : void {
			if (_instance) {
				throw new Error("Class WebSite is singleton");
				return;
			}
			_instance = this;
			initiView();
 
			// code here
		}
 
		private function initiView() : void {
			addChild(darkCloudLayer);
			// code here
			addChild(bushLayer);
			// code here
			addChild(fullTreeLayer);
			// code here
		}
	}
}
разумеется, всё это построено на некоторых предположениях относительно структуры проекта, в частности, что класс WebSite является рутовым.

Добавлено через 2 минуты
Цитата:
Сообщение от Dr_Bra Посмотреть сообщение
выдает ошибки
- еще бы он их не выдавал при отсутствии нескольких классов.

Добавлено через 4 минуты
Цитата:
Сообщение от Genzo Посмотреть сообщение
Нельзя сделать _layer3_mc статическим так как он требует создания в констукторе или т.п.
- это можно сделать без проблем, только придется делать класс синглетоном. Что в данном случае вполне возможно.
__________________
http://realaxy.com


Последний раз редактировалось Iv; 01.07.2010 в 16:27.
Старый 01.07.2010, 18:47
alexberkut вне форума Посмотреть профиль Отправить личное сообщение для alexberkut Найти все сообщения от alexberkut
  № 8  
Ответить с цитированием
alexberkut

Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
Код:
_layer3_mc:Cloud=new Cloud();
убери двоеточие и классю Вот так:
Код:
_layer3_mc=new Cloud();

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

Теги
переменная , публичная

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

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


 


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


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