|
|
|||||
создание открытых переменных
В главном классе создаю переменные, с возможностью доступа к ним из дополнительных классов. Правильно ли я написал? Подскажите, как называются такие переменные, константы?
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; } } } |
|
|||||
Регистрация: 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 доступ осуществляется через экземпляр класса где в классе MyObject переменная объявлена, как public var myPublicVar:… В случае с public static var доступ осуществляется через класс, то есть где в классе MyObject переменная объявлена, как public static var publicStaticVar |
|
|||||
Регистрация: Dec 2009
Сообщений: 428
|
1. у Вас дублируются переменные, уберите в функции init() все упоминания "var", иначе получается что у Вас объявлены три переменные, видимые из классов пакета, и три в локальной области видимости функции, и они не равны друг другу
2. Если вы оканчиваете название переменной на _mc, то она должна быть мувиклипом 3. Эти переменные не называются константами
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг |
|
|||||
Цитата:
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); } } } |
|
|||||
Регистрация: Dec 2009
Сообщений: 428
|
Добавлено через 1 минуту
Отбой, зачем static? Оставляйте протектед или просто паблик
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг |
|
|||||
Нельзя сделать _layer3_mc статическим так как он требует создания в констукторе или т.п.
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; } |
|
|||||
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
Есть замечания по коду:
1. Прежде всего, перейдите на вербльюжью нотацию - она используется в AS3 и многие редакторы ориентированы именно на нее. Не используйте подчеркивания вначале имени переменной - это делается лишь изредка и, как правило, применяется при создании get/set методов. 2. Объявление публичной переменной - дело тонкое. Далеко не всегда это рекомендуется делать, а в вашем случае лучшим выбором возможно будет организация статического get метода (set явно не пригодится). Второй вариант, рекомендуемый в общем случае - передать ссылки на экземпляры layer в нужные классы. 3. Про объявление локальных переменных уже сказали. 4. Часто инициализацию объектов можно смело вынести в объявление: (не используйте венгерскую нотацию!!!) К тому-же, если вы используете типизацию Sprite, то не сможете корректно достучаться до методов и свойств, FullTree. Я использовал private, потому, что крайне маловероятно, что у рутового класса WebSite (если я правильно понял) будут потомки. 5. Ошибка логики вызова init. Мне сложно объяснить, но я поступил бы иначе. В итоге, код вывглядел бы примерно так: 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 } } } Добавлено через 2 минуты - еще бы он их не выдавал при отсутствии нескольких классов. Добавлено через 4 минуты - это можно сделать без проблем, только придется делать класс синглетоном. Что в данном случае вполне возможно.
__________________
http://realaxy.com Последний раз редактировалось Iv; 01.07.2010 в 16:27. |
|
|||||
Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
|
|
Часовой пояс GMT +4, время: 10:42. |
|
« Предыдущая тема | Следующая тема » |
Теги |
переменная , публичная |
|
|