|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
1) import это не include, он не добавляет код импортируемого, смешивая его с текущим кодом. В AS3 используется концепция Объектно-ориентированного программирования, базирующаяся на понятии Объект. То есть код разделен на модули-объекты, каждый из которых имеет свою собственную Ответственность, определяемую кодом, который оформлен в Класс. То есть Класс — это код, который может быть выделен (абстрагирован) в отдельный набор свойств и методов, связанных по смыслу и прямо взаимодействующих для решения неких конкретных задач. Так вот импорт импортирует такие Классы, законченные осмысленные оформленные по правилам модули, а не просто строки кода или отдельные команды.Сама по себе директива import всего-лишь указывает компилятору, где найти текстовый файл с описанием конкретного Класса, который программа собирается использовать. Чтобы использовать Класс, программа должна создать его Экземпляр с помощью команды new. То есть Вы заявляете компилятору: "я буду здесь использовать класс животные.млекопитающие.ЧеловекРазумный". Если далее в коде компилятор встречает что-то типа var Петя:ЧеловекРазумный = new ЧеловекРазумный(); то он знает, где найти класс для создания этого экземпляра — в пакете "животные" есть пакет "млекопитающие", а в нем нужный Класс ЧеловекРазумный. Но если, просмотрев код программы перед компиляцией, компилятор ни разу не встретит использование класса, заявленного в импорте, он даже не станет включать его код в конечныйй файл swf — зачем, если класс не используется? В Вашем случае такой класс — SampleCode. Он нигде в коде не используется.
2) Вероятно, часть действий скрыта от меня, так как Вы используете код в кадрах (что вообще-то в AS3 не принято, хотя и допустимо для простых вещей вроде банера), и, возможно, добавляете экземпляр SampleCode "руками" на таймлайн. Однако, что дальше? Из своего menu Вы пытаетесь обращаться к root.nameB, но ведь у root, то есть класса основной флэшки, нет такого свойства — оно есть у класса SampleCode, а его экземпляр — не root. 3) При оформлении Класса требуется указывать модификатор доступа перед объявлением метода и тип возвращаемого методом значения, то есть в Вашем случае не "function functionBat1()", а " public function functionBat1():void". Если модификатор не указан, он автоматически считается как internal, а не public, и тогда методы "видны" только для классов из этого же пакета.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 04.11.2014 в 00:07. |
|
|||||
Регистрация: Nov 2014
Сообщений: 10
|
Ага, с первым понятно, спасибо. Просто где-то нашла, что так нужно свой созданный класс добавлять в файл. А так я вписала в поле на панели Свойства/ Опубликовать/ Класс: SampleCode - у обоих файлов.
На счет того, где писать код - наша "система образования" учит нас писать в кадрах, про создание классов речи и не шло, поэтому вот и пытаюсь информацию по кусочкам собрать.. Так вот, возвращаясь к проблеме: public function functionBat1():void - я исправила и осознала, спасибо. Какая должна быть система происходящего? Как я понимала: файл main прослушивает событие щелчка мышью по кнопке, к примеру, but1. Как только событие наступает, файл обращается к добавленному к нему классу SampleCode и вызывает функцию functionBat1()(запоминает значение выбранной кнопки) и подгружает файл menu. А далее, в соответствии с моей плохой логикой, поскольку к файлу menu добавлен тот же самый класс SampleCode, он может считать уже новое значение переменной nameB. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну вот, поскольку Вам про Классы не давали, будет непросто объяснить...))
Есть Класс, и есть его экземпляр. Петя — экземпляр класса ЧеловекРазумный. То есть класс — нечто более общее, можно сказать Шаблон, или Чертеж, по которому штампуются одинаковые детали - экземпляры. У экземпляров есть все признаки общего класса, и никаких других нет. Однако значения этих признаков (свойств) могут быть индивидуальны — например экземпляры класса Прямоугольник имеют высоту и ширину, но у разных экземпляров значения высоты и ширины могут быть разные. У самого Класса Прямоугольник нет высоты и ширины. Неважно, на каком формате бумаги напечатан чертеж. Чертеж не обладает свойствами детали, которую он описывает. Однако у чертежа как объекта тоже есть свои свойства — есть они и у классов (не у всех). Такие свойства называются статические. Например, MouseEvent.CLICK это статическое свойство CLICK класса MouseEvent. Не экземпляров класса, а именно самого класса. Цитата:
Так вот, если у вас "в кадре" основной флэшки не объявлена переменная var nameB, то такого свойства у root просто нет. Оно есть у экземпляра SampleCode. А зачем Вы создавали этот класс, если Вас такому не учат? )) Почему не поместили обработчики нажатия кнопок просто в первый кадр? И теперь вынуждены читать весь этот выходящий за рамки школьной программы ..текст.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2014
Сообщений: 10
|
просто по моей задумке курсового проекта есть определенный момент:
на форме имеется 12 кнопок, обозначающих разделы рецептов выпечки: пироги, кексы, булочки, пирожки и т.д. Соответственно, имеется прослушиватель клика для каждой кнопки. При нажатии на кнопку переменная vibrRazdel присваивает значение имени выбранной кнопки и в компонент ScrollPane загружается одноименный swf-файл со списком рецептов и того, у меня имеется файл с кнопками и 12 подгружаемых swf, которые, по сути, выполняют одни и те же функции - подгружают из xml-документа текст рецептов для выбранного раздела и картинки. К примеру, выбираем кнопку пирожки - в scroll подгружаются рецепты пирожков с картинками и прочей ерундой. Т.е. в идеале было бы сделать файл с кнопками и один подгружаемый файл, в который передается значение переменной vibrRazdel и уже в зависимости от значения переменной будут подгружаться те или иные рецепты. Добавлено через 7 минут просто после сообщения от КорДум про интерфейсы я начала изучать этот вопрос и в итоге в конец запуталась что можно сделать в подобной ситуации Добавлено через 12 минут И, опять же, вы мне написали про то, что переменная должна быть public, а public может быть ведь только внутри пакета...так у меня каша и смешалась между классами и кодом в кадрах =D Спасибо за приведенную доходчивую информацию о классах, теперь более-менее представление имею Последний раз редактировалось Маргарита62; 07.11.2014 в 21:55. |
|
|||||
Как-то так
package { import flash.display.MovieClip; import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; public class Main extends MovieClip { private var _source:IBridge; public function Main(){ startLoading('LoadMain.swf'); } private function startLoading(url:String):void { trace('start'); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler); loader.load(new URLRequest(url)); } private function loadHandler(e:Event):void { e.target.removeEventListener(Event.COMPLETE, loadHandler); _source = e.target.content as IBridge; _source.addEventListener( VARS_EVENT.TRANSMITTER_REPORT, dataRecievedHandler ); testCall() } private function testCall():void { _source.functionBat1(); _source.functionBat1(); _source.dataTransmitter('var1'); } private function dataRecievedHandler(e:Event):void{ trace('Загруженный ролик получил данные'); } } } package { import flash.events.IEventDispatcher; public interface IBridge extends IEventDispatcher{ // Interface methods: function functionBat1():void function functionBat2():void function dataTransmitter(sendData:*=null):void } } package { import flash.display.MovieClip; import flash.events.Event; public class LoadMain extends MovieClip implements IBridge{ public var nameB:String; public function LoadMain() { // constructor code } public function functionBat1():void { nameB = "but1"; trace(nameB ); transmitterReport(); } public function dataTransmitter(sendData:*=null):void{ transmitterReport(); } private function transmitterReport():void { dispatchEvent( new Event(VARS_EVENT.TRANSMITTER_REPORT)); } public function functionBat2():void { nameB = "but2"; trace(nameB ); transmitterReport(); } } }
__________________
return this... |
|
|||||
если нужно получать данные в ролике родители, диспачте DataEvent передавая объекты через свойство data, обработав их JSON'оном.
__________________
return this... |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2014
Сообщений: 10
|
Wolsh, там же не просто текст, но и кнопочки, картинки. а рецептов может быть много, поэтому нужна полоса прокрутки, поэтому грузится в ScrollBar
Добавлено через 20 минут AlexCooper, спасибо большое! осталось только разобраться не думала, что в AS3 будет так сложно осуществить подобное действие. |
|
|||||
Цитата:
пример главного package { import flash.display.*; import flash.events.*; import flash.system.*; import flash.ui.*; import flash.utils.*; import flash.sampler.*; import flash.net.*; import flash.media.*; import flash.net.*; import flash.external.*; import flash.text.*; import flash.geom.*; /** * ... * @author Lexcuk */ public class DadDoc extends Sprite { public var htmStr:String = ''; public var childrenObject:Object; public var hrefTxt:TextField; public var loader:Loader; public var request:URLRequest; public function DadDoc() { addChild(hrefTxt = new TextField()); hrefTxt.scaleX = hrefTxt.scaleY = 1.4; hrefTxt.autoSize = TextFieldAutoSize.LEFT; htmStr = 'DAD\n'; htmStr += addStrHref('Load Masha'); htmStr += addStrHref('Load Sasha'); hrefTxt.htmlText = htmStr; hrefTxt.addEventListener("link", txtNavHandler); } private function txtNavHandler(e:TextEvent):void { if (e.text == 'Load Masha') { loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler); loader.load(request = new URLRequest('Masha.swf')) } if (e.text == 'Load Sasha') { loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler); loader.load(request = new URLRequest('Sasha.swf')) } } public function loaderCompleteHandler(e:Event):void { hrefTxt.htmlText = htmStr + '\n загрузилось ' + request.url; if (childrenObject != null) removeChild(childrenObject as DisplayObject); childrenObject = loader.content; addChild(loader.content); loader.content.y = 100; childrenObject['dadCall'] = dadCall; } public function dadCall(childStr:String):void { hrefTxt.htmlText = htmStr + '\n' + childStr; } public function addStrHref(str:String, delimStr:String = ' | '):String { return "<a href='event:" + str + "'><u>" + str + "</u>"+delimStr; } } } package { import flash.display.*; import flash.events.*; import flash.system.*; import flash.ui.*; import flash.utils.*; import flash.sampler.*; import flash.net.*; import flash.media.*; import flash.net.*; import flash.external.*; import flash.text.*; import flash.geom.*; /** * ... * @author Lexcuk */ public class ChildrenDoc extends Sprite { public var htmStr:String = ''; public var childrenObject:Object; public var dad:Object; public var dadCall:Function; public var hrefTxt:TextField; public function ChildrenDoc() { addChild(hrefTxt = new TextField()); hrefTxt.scaleX = hrefTxt.scaleY = 1.4; hrefTxt.autoSize = TextFieldAutoSize.LEFT; htmStr = '<FONT FACE="Times New Roman" SIZE="12" COLOR="#FF0080" >I am Sasha!!! '; htmStr += addStrHref('Hello DAD'); hrefTxt.htmlText = htmStr; hrefTxt.addEventListener("link", txtNavHandler); } private function txtNavHandler(e:TextEvent):void { if (e.text == 'Hello DAD') { if (dadCall != null) dadCall("Sasha hi, Dad says nice to see you again!!!"); } } public function addStrHref(str:String, delimStr:String = ' | '):String { return "<a href='event:" + str + "'><u>" + str + "</u>"+delimStr; } } }
__________________
Гоночка |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
"Проще можно сделать", если делать в соответствии с ООП, для которого AS3 и заточен, а не через аномальное отверстие. Что мешает после загрузки плагина передать ему привет от "папы" или вызвать его, подгруженного ребенка, метод? Зачем ребенку воровать у папы [деньги], если папа может сам ему дать всё, что необходимо?
Мда.. "Папе", конечно, для этого нужно знать, что этот подброшенный ребенок — его. Тут хорошо бы ввести Интерфейс... Только Интерфейс не папы, а ребенка.
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 21:55. |
|
« Предыдущая тема | Следующая тема » |
|
|