PDA

Просмотр полной версии : можно ли рисовать прямо на сцене, без добавления в список отображения?


Ваисилй
29.11.2009, 14:29
то есть без создания шейпов или спрайтов

Dimax4d
29.11.2009, 14:33
можно рисовать в основном классе приложения, например:

super.graphics.beginFill(0xFFFFFF00);
super.graphics.lineStyle(1, 0xFF0000FF);
super.graphics.drawRect(0, 0, 100, 50);
super.graphics.endFill();

kackbip
29.11.2009, 14:51
А зачем нужно обращаться к супер классу?

Felicast
29.11.2009, 15:05
это хороший тон. на самом деле что

super.graphics.beginFill(0xFFFFFF00);

что

graphics.beginFill(0xFFFFFF00);

что

this.graphics.beginFill(0xFFFFFF00);

будет одно и тоже (если не оверрайдить)
а если оверрайдить, то тут уже надо понимать, что конкретно нужно (super или this)

kackbip
29.11.2009, 17:28
Правильно ли я понял:
Если я создал класс наследник MovieClip. То для работы с graphics я должен использовать обращение super.super.graphics?
Первый супер - обращение к MovieClip, второй - к Sprite, в котором появляется впервые свойство graphics.
В чем заключается красота тона в данном случае? На мой взгляд это кривое нагромождение.

MrPoma
29.11.2009, 17:33
Один нужен. Если для понимания трудно, наплюйте на хороший тон и не пишите. Только смотрите, чтобы на вас потом не наплевали :-)

kackbip
29.11.2009, 17:40
Да, тяжеловато для понимания, но хотелось бы все таки догнать.
Почему один? И зачем один? Как бы говорим, что данное свойство или метод определены в каком-то поколении?

Нужно ли, для поддержания хорошего тона, использовать такие обращения как:
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);
}

}

Почувствуйте разницу

kackbip
29.11.2009, 18:17
По поводу переопределения я в курсе. Меня интересует именно вопрос хорошего тона - что считать хорошим тоном и почему.

etc
29.11.2009, 18:24
Это нужно делать всегда, если вы хотите работать именно с теми свойствами, с которыми требуется.

kackbip
29.11.2009, 18:40
Это нужно делать всегда, если вы хотите работать именно с теми свойствами, с которыми требуется.
Пардон-пардон.
Вот я определяю класс:
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 или без этой приставки дасть обращение к одним и тем же свойствам. Разве не так?
Или вы говорите о каких-то конкретных случаях о которых вы умолчали?

etc
29.11.2009, 19:01
Всё так, ровно до момента, пока вы не начнете их переопределять. Если базовый класс не рассчитан на переопределение, то его функционал будет нарушен (при условии, что изменится поведение переопределенных свойств).

kackbip
29.11.2009, 19:10
Денис, подытожьте пожалуйста ваше мнение по поводу использования super. Стоит ли использовать обращение к свойствам через super всегда, когда они были определены в родительском классе или только тогда когда в иерархии наследования использовалось переопределение - чтобы добраться до нужного варианта свойства? И попрошу не упустить тему хорошего тона.

etc
29.11.2009, 19:15
Я предпочитаю использовать super всегда. Закрытие свойств и методов в наследниках при этом не повлияет на работоспособность базового класса.

kackbip
29.11.2009, 19:16
Ок, спасибо. Постараюсь осмыслить в полной мере.