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

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

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

Регистрация: May 2009
Сообщений: 34
По умолчанию Не могу вызвать переменную из вспомогательного файла

Начал изучать AS3 по книге

ActionScript 3.0 для Flash
Подробное руководство
Колина Мука

Запнулся в самом начале, вот цитата с кодом:

"
Код AS3:
package zoo { 
    internal class VirtualPet { 
      var petName = "Unnamed Pet"; 
    } 
}
В результате использования приведенного кода переменная экземпляра petName
будет автоматически присоединена к каждому новому экземпляру класса VirtualPet.
Исходным значением переменной petName для всех экземпляров класса VirtualPet
будет являться фраза Unnamed Pet.
----------------------------------------------------------------------------------

Локальной переменной присвоим имя pet, а для связывания объекта VirtualPet с этой
переменной воспользуемся инициализатором. Привожу код:

Код AS3:
package zoo { 
  public class VirtualZoo { 
    public function VirtualZoo ( ) { 
      var pet = new VirtualPet; 
    } 
  } 
}
Теперь, когда локальная переменная pet связана с объектом VirtualPet, она
может быть использована для обращения к объекту и, следовательно, для управления
им.

"

Прочитав это я так понял, что переменная pet теперь имеет значение и это значение Unnamed Pet.

Я создал 2 файла mous01.as и zna.as в каталоге proba.
В корневом каталоге создал файл mous01.fla и связал его с классом proba.mous01

Листинг файла mous01.as создаёт круг, а цвет заливки круга я хочу получить из внешнего файла zna.as
того же пакета proba.

код mous01.as:
Код AS3:
package proba { 
     import flash.display.*; 
 
     public class mous01 extends MovieClip { 
 
           public function mous01() {  
                    var cvet = new zna;
      		        graphics.lineStyle(9, 500000); 
		        graphics.beginFill( cvet ); 
                        graphics.drawCircle( 100, 100, 70); 
 
	     } 
     } 
}
код zna.as
Код AS3:
package proba { 
 
     public class zna { 
	       var kolor = 111111;
    } 
}
То есть по сути я полностью повторил код Мука, но круг у меня рисуется с чёрной заливкой,
а компилятор о ошибках не сообщает.
То есть значение переменной kolor из файла zna.as не передаётся в переменную cvet файла mous01.as.

Помогите разобраться почему так происходит.

Старый 28.06.2009, 18:32
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 2  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
вы создаете обьект класса zna, а колор это поле этого обьекта.

Старый 28.06.2009, 18:46
MonkDead вне форума Посмотреть профиль Отправить личное сообщение для MonkDead Посетить домашнюю страницу MonkDead Найти все сообщения от MonkDead
  № 3  
Ответить с цитированием
MonkDead
 
Аватар для MonkDead

Регистрация: Dec 2007
Сообщений: 204
Код AS3:
var petName = "Unnamed Pet";
var pet = new VirtualPet; 
var cvet = new zna;
var kolor = 111111;
Это так в книге написано, странно? Переменные должны быть типизированны! Также название классов должны быть с большой буквы, например Zna а не zna.
Код AS3:
var petName:String = "Unnamed Pet";
var kolor:uint = 111111;
и т.д.

Код AS3:
package proba { 
     import flash.display.*; 
 
     public class Mous01 extends MovieClip { 
 
           public function Mous01() {  
                    var cvet:Zna = new Zna();
      		        graphics.lineStyle(9, 500000); 
		        graphics.beginFill( cvet.kolor); 
                        graphics.drawCircle( 100, 100, 70); 
 
	     } 
     } 
}


Последний раз редактировалось MonkDead; 28.06.2009 в 18:53.
Старый 28.06.2009, 19:09
p0okm вне форума Посмотреть профиль Отправить личное сообщение для p0okm Найти все сообщения от p0okm
  № 4  
Ответить с цитированием
p0okm

Регистрация: May 2009
Сообщений: 34
MonkDead - спасибо за помощь, заработало.

Ключевым было
Код AS3:
graphics.beginFill( cvet.kolor);
По поводу написания имён классов с большой буквы это Вас обманули

Работающий код теперь такой

Код AS3:
package proba { 
     import flash.display.*; 
 
     public class mous01 extends MovieClip { 
 
           public function mous01() {  
                    var cvet = new zna;
      		        graphics.lineStyle(9, 500000); 
		        graphics.beginFill( cvet.kolor); 
                        graphics.drawCircle( 100, 100, 70); 
 
	     } 
     } 
}
ramshteks - я благодарен за Ваш ответ, но мне как новичку без пояснения на примере он бесполезен, хотя сейчас я понимаю, что вы говорили о
Код AS3:
graphics.beginFill( cvet.kolor);
Не сочтите за наглость, но пожалуйста поясняйте свои ответы примерами.

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
ну каждый сам определяет глубину своего ответа. Я дал вам наводку. Вы же должны были лучше углубиться в ооп. тогда вам бы стало ясно и что такое класс и что такое обьект этого класса и что такое поля класса. А еще вы бы знали что в нашей с вами вселенной, насколько мне известно нет ооп языка где было бы принято называть классы с маленькой буквы.

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

Регистрация: Dec 2007
Сообщений: 204
p0okm, давайте представим что вы это объект во вселенной, у вас есть имя. Имя вы пишете свое с большой буквы, не так ли? Соответственно хотя бы из этой аналогии надо имя класса писать с большой буквы.
Код AS3:
graphics.beginFill( cvet.kolor);
Вы в классе Zna задаете свойство kolor, создаете экземпляр класса
Код AS3:
var cvet:Zna = new Zna();
что бы получить значение свойства вы должны вызвать его
Код AS3:
cvet.kolor
Еще один важный аспект не называйте свойства, методы, классы используя транслит. Вместо kolor надо писать color, иначе ваш код просто читать невозможно.

Старый 29.06.2009, 02:26
p0okm вне форума Посмотреть профиль Отправить личное сообщение для p0okm Найти все сообщения от p0okm
  № 7  
Ответить с цитированием
p0okm

Регистрация: May 2009
Сообщений: 34
Ещё раз благодарю за помощь, но по поводу заглавной литеры в имени класса позволю себе с вами не согласиться. В документации нигде не сказано про условие именно так начинать написание имени класса, компилятор так же не протестует по этому поводу поэтому написание имени класса с прописной литеры не может быть причиной неработоспособного кода.
Локально - kolor я не мог написать с "с" так как есть служебное слово "color"
поэтому и применил альтернативную литеру, которая не изменяла сути понимания переменной.
Ещё раз искренне благодарю за помощь.

Старый 29.06.2009, 07:47
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от p0okm Посмотреть сообщение
Ещё раз благодарю за помощь, но по поводу заглавной литеры в имени класса позволю себе с вами не согласиться. В документации нигде не сказано про условие именно так начинать написание имени класса, компилятор так же не протестует по этому поводу поэтому написание имени класса с прописной литеры не может быть причиной неработоспособного кода.
А дело не в неработоспособности кода. Дело в том, что есть общепринятые правила именования. Хорошая IDE (Flash IDE к ним не относится) либо вообще не даст создать класс с неправильным именованием, либо замучает предупреждениями. Компилятор же позволяет компилить любое имя в любом виде, хоть на русском. Исключительно в силу того, что ему эти названия полезной нагрузки не несут, это для людей.
Ни один класс флешевого фреймворка не даёт повода именовать классы со строчной буквы, однако называть свои собственные классы как попало в последнее время стало модно

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
если можно не значит хорошо.
Есть конвенции или как их там. Есть стиль. Есть правила. Но вы из тех кто считает что правила всегда нужно нарушать?
Ах да кстати, компилятор не будет ругаться так же если вы по русски будете называть переменные. Это так круто, среди нас никто еще не решился на такую дерзость... Может вы будете нашим героем?))

А насчет служебного слова... ну нет в этом языке служебных слов color есть поля color. Служебные слова это for if return к примеру, а color нет. Ну опять таки возможно в книжке не сказано что color не является служебным словом, так что зачем рисковать ))

Добавлено через 59 секунд
опоздал...)

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

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

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


 


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


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