Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   super method не хочет выводить текст (http://www.flasher.ru/forum/showthread.php?t=145599)

in4core 13.10.2010 21:09

super method не хочет выводить текст
 
Такая вот трабла

Есть библиотечный клип

Код AS3:

public class Clip {
public function Clip() {}
public function setText(t1) {
  tf.text = t1;
} }

Ну и сабкласс

Код AS3:

public class sub extends Clip {
public function sub() {
 super.setText('hello'); }
}

Ошибок нет, эффекта ноль. Что то не так делаю ?

Psycho Tiger 13.10.2010 21:23

Вы создаёте экземпляр sub? Попробуйте создать экземпляр Clip и вызвать setText - будет эффект?

in4core 13.10.2010 21:29

Хм. сделал 2 трейса
сдесь

Код AS3:

public function setText(t1) {
  trace(tf.text) // начальный текст
  tf.text = t1;
  trace(tf.text) // hello
}

Вроде бы все верно, а вот на сцене прежний текст ))) Не меняется, че за трабла то?

Добавлено через 57 секунд
Ах да, создаю экземпляр как и первого так и второго. Там надо

Добавлено через 2 минуты
Все кажись смысл я понял о чем ты, но как решить пока не пойму

Psycho Tiger 13.10.2010 21:32

Ну ээ... сложно понять что Вы хотите чтобы сказать как решить Вашу проблему.

in4core 13.10.2010 21:34

На данном этапе сделано так :

Класс Main в нем экземпляр класса Clip, и экземпляр класса sub. Где Clip это наш клип с графикой, а sub предназначен для настроек клипа из вне. Во как. Я так понимаю, что когда я включаю super метод, то он отрабатывает не для экземпляра класса созданного в Main. Ну а как же тогда обращаться?

cleptoman 13.10.2010 21:38

обращаться к методу экземпляра и не путать теплое с мягким )

iCluster 13.10.2010 21:40

нуууу... мне кажется тут надо сделать так:
Код AS3:

public class sub extends Clip {
public function sub() {
 super();
 setText('hello');
}
}


Psycho Tiger 13.10.2010 21:41

Ну ээ... создавая sub вы создаёте sub, который унаследовал поведение Clip. То есть Clip, по сути, кастрированная версия sub. Проще говоря создавая sub Вы создаёте по сути Clip, расширенный до функционала Clip.

@iCluster: компилятор сам вставит super в начале конструктора, если super не написан явно. setText или super.setText или this.setText - не имеет значения, если setText не переопределен. В абс-коде разница есть, но по логике работы - нет.

in4core 13.10.2010 21:42

iCluster/ Нет вариант не прокатывает.

cleptoman и как же онное сделать? я честно говоря запутался

Добавлено через 4 минуты
Вот так есть допустим:

Код AS3:

class Main() {
 var _class1 = new Class1(somevar);
 var _class2 = new Class2()
  public function Main() { addChild(_class1) }
}
 
 
class Class1() { function SetText(text) {} }
 
class Class2() extends Class1{  // тут нужно залезть в Class 1  и занести значение в метод SetText  }


Psycho Tiger 13.10.2010 21:51

Код AS3:

class Class2 extends Class1(){
public function Class2(){
super.setText("hello!");
}
}
 
class Class1{
protected function setText(value:String):void{
trace(value);
}
}
 
class Main extends Sprite{
public function Main(){
new Class1(); //ничего не произойдёт, потому что в Class1 не вызывается setText
new Class1(); //вторая попытка тоже ничего не даст
new Class2(); //вылезет трейс
}
}



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

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