Просмотр полной версии : можно ли рисовать прямо на сцене, без добавления в список отображения?
то есть без создания шейпов или спрайтов
можно рисовать в основном классе приложения, например:
super.graphics.beginFill(0xFFFFFF00);
super.graphics.lineStyle(1, 0xFF0000FF);
super.graphics.drawRect(0, 0, 100, 50);
super.graphics.endFill();
А зачем нужно обращаться к супер классу?
Felicast
29.11.2009, 15:05
это хороший тон. на самом деле что
super.graphics.beginFill(0xFFFFFF00);
что
graphics.beginFill(0xFFFFFF00);
что
this.graphics.beginFill(0xFFFFFF00);
будет одно и тоже (если не оверрайдить)
а если оверрайдить, то тут уже надо понимать, что конкретно нужно (super или this)
Правильно ли я понял:
Если я создал класс наследник MovieClip. То для работы с graphics я должен использовать обращение super.super.graphics?
Первый супер - обращение к MovieClip, второй - к Sprite, в котором появляется впервые свойство graphics.
В чем заключается красота тона в данном случае? На мой взгляд это кривое нагромождение.
Один нужен. Если для понимания трудно, наплюйте на хороший тон и не пишите. Только смотрите, чтобы на вас потом не наплевали :-)
Да, тяжеловато для понимания, но хотелось бы все таки догнать.
Почему один? И зачем один? Как бы говорим, что данное свойство или метод определены в каком-то поколении?
Нужно ли, для поддержания хорошего тона, использовать такие обращения как:
super.x
super.alpha
super.gotoAndPlay
?
Или это больше относится к "неродным" классам, о свойствах и методах, которых мало известно посторонним людям, заглянувшим в наш класс?
gloomyBrain
29.11.2009, 17:58
super.x
super.alpha
super.gotoAndPlay
Это только в том случае, если Вы хотите, чтобы при задании x классу-наследнику выполнялись действия как в классе-родителе И еще какие-то, вот Вам пример:
public class MyMovie extends MovieClip {
public function MyMovie():void {
super();
this.x = 11;
super.x = 50;
trace(this.x)
}
override public function set x(value:Number):void {
super.x = value;
trace("x: "+value);
}
}
Почувствуйте разницу
По поводу переопределения я в курсе. Меня интересует именно вопрос хорошего тона - что считать хорошим тоном и почему.
Это нужно делать всегда, если вы хотите работать именно с теми свойствами, с которыми требуется.
Это нужно делать всегда, если вы хотите работать именно с теми свойствами, с которыми требуется.
Пардон-пардон.
Вот я определяю класс:
package model {
import flash.display.MovieClip;
public class MyClass extends MovieClip{
public function MyClass(){
}
public function someMethod():void{
//some code
}
}
}
Я не переопределял свойства x, y, scaleX, scaleY и т.д. и обращение к ним с приставкой super или без этой приставки дасть обращение к одним и тем же свойствам. Разве не так?
Или вы говорите о каких-то конкретных случаях о которых вы умолчали?
Всё так, ровно до момента, пока вы не начнете их переопределять. Если базовый класс не рассчитан на переопределение, то его функционал будет нарушен (при условии, что изменится поведение переопределенных свойств).
Денис, подытожьте пожалуйста ваше мнение по поводу использования super. Стоит ли использовать обращение к свойствам через super всегда, когда они были определены в родительском классе или только тогда когда в иерархии наследования использовалось переопределение - чтобы добраться до нужного варианта свойства? И попрошу не упустить тему хорошего тона.
Я предпочитаю использовать super всегда. Закрытие свойств и методов в наследниках при этом не повлияет на работоспособность базового класса.
Ок, спасибо. Постараюсь осмыслить в полной мере.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.