|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Несколько вопросов связанные с некоторыми моментами AS
Здрава всем.
Народ я новичок а AS 3 и у меня возникли несколько вопросов которые мешают идти дальше , просто появились некоторые недопонимания в ходе обучения , и если Вы не против то разрешите изложиться. 1. This, да банальное this, его я вижу часто но сам не использую. Как я понимаю this – это ссылка на объект и смотря где он пишется . Наверное я сам отвечу на вопрос ну или Вы меня поправите на примере: То есть: package { public class MyClass { private var Name:String = "hi"; public function MyClass() { this.x += 100; this.Name; addChild(this); } } } package { public class MyClass { private var Name:String = "hi"; public function MyClass() { MyClass.x += 100; MyClass.Name; addChild(MyClass); } } } это одно и тоже так ведь, если нет то поправьте меня. 2. Теперь о «super ()» . Как пишется в helpe инструкция super - вызывает суперклассовую или родительскую версию метода или конструктора, например: Super () // Вызывает родительскую версию конструктора; Super.method(“HI”) // Вызывает родительскую версию метода; Super.prop // Вызывает родительскую версию свойства или такого не бывает ? 3. Оператор “as” – он меня больше всех пугает. Как я понимаю интерпретатор проверяет нет ли у первого операнда (тип: Sprite) таких же свойств и методов как у и второго операнда (тип: MovieClip) и если таковой есть то Sprite может быть как и MovieClip так и Sprite то есть я могу использовать некоторые методы и свойства MovieClip для объекта Sprite(который уже movieclip) и наоборот. 4. Обращение к объектам и символам. Здесь я затрудняюсь разобраться , сейчас поясню на примере: Допустим имеется класс “B” в конструкторе которой будет для примера Кнопка и Мувик. package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.MouseEvent; import flash.display.SimpleButton; public class B extends Sprite { public var _btn:SimpleButton = Btn; // Кнопка и мувик уже перенесенные из библиотеки на сцену public var _star:MovieClip = Star; // в ручную , имена написал в свойствах не в свойтвах символа public function B() { _btn.x += 100; _btn.addEventListener(MouseEvent.CLICK,onBtn); } public function onBtn(e:MouseEvent) { trace("HI"); } } } package { import flash.display.MovieClip; import flash.display.Stage; import flash.display.Sprite; import flash.events.MouseEvent; public class A extends Sprite { private var _A:B; public function A(); { _A = new B(); addChild(_A); } } } Цитата:
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.MouseEvent; import flash.display.SimpleButton; public class A extends Sprite { public var _btn:SimpleButton = Btn; public var _star:MovieClip = Star; public function A() { _btn.x += 100; _btn.addEventListener(MouseEvent.CLICK,onBtn); } public function onBtn(e:MouseEvent) { trace("HI"); } } } Последний раз редактировалось zackscript; 18.01.2016 в 12:10. |
|
|||||
zackscript, всё не так. Класс - это не объект.
this - обращение к объекту(экземпляру класса). Экземпляр класса - это то, что создаётся через new. Каждый раз, когда вы создаёте экземпляр класса Tank - это будет новый танк, не тот, что был раньше. MyClass.smth - обращение к статическому свойству. as - приведение типа, проверяет, есть ли в цепочке наследования определённый тип, и если есть, возвращает объект с таким типом, он не проверяет свойства, а лишь цепочку наследования. this/super пишется лауэркейсом. 1) package { public class MyClass extends Sprite//у вас ошибка, нет у вашего класса свойства свойства x, а вот так всё ок { private var Name:String = "hi"; public function MyClass() { this.x += 100; this.Name; //addChild(this); - это непонятная фигня, добавление себя в себя (идентично this.addChild(this)) } } } package { public class MyClass extends Sprite { private var Name:String = "hi"; public function MyClass() { x += 100; Name; } } } 2) Неправильно. super всегда пишется лауэркейсом. Во-первых, так красиво, во-вторых, это работает. super () // Вызывает родительскую версию конструктора; super.method(“HI”) // Вызывает родительскую версию метода; super.prop // Вызывает родительскую версию свойства или такого не бывает ? MovieClip as Sprite работает потому, что MovieClip наследуется от Sprite. Sprite as MovieClip работать не будет. 4) Цитата:
Вот это - конструктор, не путайте его ни с чем другим. Цитата:
Цитата:
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 04.01.2016 в 16:48. |
|
|||||
ZackMercury, с this почти разобрался , то есть если он и в методе некоего класса то это звучит так "задать такие то координаты и зарегистрировать событие текущему методу "
с super тоже понятно. А вот если MovieClip as Sprite приведу в тип то он может быть как и Спрайт так и МувиКлип ? в 4-ой проблеме я сохранил кнопку и мувик в переменных что здесь не так то ? а в конструкторе я к переменной _btn повесил событие . Вопрос в том как мне обратится к ним как манипулировать ими непосредственно в классе "B". Или создать экземпляры кнопки и мувиклипа в конструкторе класса "B" и добaвить в список отображения но тогда придется программно задать им координаты и другие т.п. свойства а этого делать я не хочу. Последний раз редактировалось zackscript; 04.01.2016 в 22:22. |
|
|||||
Цитата:
Напишите trace(this); и узнайте, что именно в this находится. Не бойтесь экспериментировать.
__________________
тут я |
|
|||||
Цитата:
Добавлено через 1 минуту КорДум понятно. |
|
|||||
Цитата:
... Если не писать this вообще, то всё станет очевидным. this не имеет никакого отношения к методам, он ссылается на текущий экземпляр класса, в котором вызывается. this.x или super.x, или просто x - всё одинаково будет работать, так как обращение происходит к свойству экземпляра. this пишут либо те, кто привык писать this, либо там, где он действительно нужен(чтобы, например, передать ссылку на экземпляр текущего класса в другой класс). Давайте я вам пример напишу, чтобы более понятно было. class Main extends Sprite { public function Main() { var bucket:Bucket = new Bucket(); for(var i:int = 0; i < 10; i ++) var apple:Apple = new Apple(bucket); trace(bucket); // выведет 10 раз Apple через запятую } } class Bucket { private var content:Array; public function Bucket() { content = []; } override public function toString():String { var str:String = ""; for(var i:int = 0; i < content.length; i ++) str += content[i].toString() + ((i == content.length - 1)?".":", "); return str; } public function put(elem:*):void { content.push(elem); } } class Apple { public function Apple(bucket:Bucket) { bucket.put(this); } override public function toString():String { return "Apple"; } }
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 04.01.2016 в 18:13. |
|
|||||
Ну с 3-мя вопросами я разобрался а вот с 4-ой затруднения, серьёзно.
Главный класс "А" привязан к документу к Вашему сведению , на сцене же кнопка с именем "Btn" и мувик "Star". |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну так класс В-то ничего о них не знает, они же в экземпляре документ-класса А.
Добавлено через 10 минут То, что Вы называете "на сцене" — это экземпляр Документ-класса, в вашем случае — экземпляр А. При запуске флэшки он будет создан автоматически и добавлен на стейдж. Это главный класс приложения, обычно называемый Main. Все остальное содержимое является его детьми. В частности, экземпляр класса В, который Вы создаете в первом примере. Но дети ничего не знают друг о друге. Только Мейн знает, кого и зачем он породил. Кнопка и клип, нарисованные Вами на сцене, являются детьми А, создаваемыми "автоматически". Ссылки на них уже есть в А — это их Вы используете, создавая дополнительные переменные (по сути ненужные). Но в экземпляре класса В, конечно же, нет никаких данных о детях класса А, с чего бы. Добавлено через 25 минут ZackMercury Цитата:
__________________
Reality.getBounds(this); |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Почему-то здесь очень напрашивается .join
__________________
Тут мужик танцует и поёт про флэш |
Часовой пояс GMT +4, время: 23:25. |
|
« Предыдущая тема | Следующая тема » |
|
|