Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как у TextFieldа сделать buttonMode = true без добавления его в контейнер (http://www.flasher.ru/forum/showthread.php?t=211605)

nelco 29.09.2015 21:44

как у TextFieldа сделать buttonMode = true без добавления его в контейнер
 
есть текстовое поле, нужно, чтобы у него появилось свойство buttonMode, пытаюсь сделать Sprite(textFieldName) - не работает... можно ли как-то его сделать со свойством buttonMode без добавления в спрайт?

и как вы узнаёте к каким типам можно приводить TextField? есть какая-то таблица совместимости при приведении типов?

undefined 29.09.2015 21:54

TextField не является потомком Sprite,поэтому привести его к спрайту не выйдет.Приводить текстфилды можно к любому типу, который является наследником текстфилда.Как вариант можно рисовать поверх поля прозрачный спрайт размером с поле и назначать ему buttonMode, но имхо лучше тогда уж поместить и текстфилд в него.А с чем связан запрет на помещение поля в спрайт?

nelco 29.09.2015 21:55

понял, спасибо... нет, запрета нет, думал просто, что может можно как-нибудь без этого, чтобы меньше кода было и меньше объектов

Tails 29.09.2015 21:59

Цитата:

Сообщение от nelco (Сообщение 1187459)
есть текстовое поле, нужно, чтобы у него появилось свойство buttonMode, пытаюсь сделать Sprite(textFieldName) - не работает... можно ли как-то его сделать со свойством buttonMode без добавления в спрайт?

Есть только 2 способа:
1. Создать собственный класс на основе TextField и дописать ему свойство buttonMode. Понадобиться самостоятельно запрограммировать работу buttonMode, например, слушая события RollOver, RollOut и соответствующим образом изменять курсор.
2. Либо поместить текстовое поле в спрайт контейнер.

Цитата:

Сообщение от nelco (Сообщение 1187459)
как вы узнаёте к каким типам можно приводить TextField? есть какая-то таблица совместимости при приведении типов?

Это называется наследованием. Это один из фундаментальных и самых базовых принципов в ооп программировании.
Текстовое поле можно привести к любому типу, от которого оно наследуется. Цепочка наследования указана в справке для любого класса. Текст филд имеет такую:
Цитата:

TextField -> InteractiveObject -> DisplayObject -> EventDispatcher -> Object

nelco 29.09.2015 22:17

с наследованием вроде разбираюсь, но думал, что приведение типов может быть и вверх по цепочке наследования в каких-то случаях особых, точнее я вообще не знал, что от цепочки наследования зависит... теперь понял - только вниз по цепочке наследования... спасибо

undefined 29.09.2015 23:15

Цитата:

теперь понял - только вниз
Скорее только вверх Object - самый базовый тип(от него все наследуются).На диаграммах его обычно рисуют в самом верху.

neonoviiwolf 30.09.2015 00:10

Цитата:

Сообщение от undefined (Сообщение 1187469)
Скорее только вверх Object - самый базовый тип(от него все наследуются).На диаграммах его обычно рисуют в самом верху.

вот что интерсно, если текстфилд привести к object, то класс класс станет одним из расширений object. Так же мувик/спрайт можно привести к object, так вот, если тексфилд привести к родителю обжект, получится ли в итоге его расширить после до мувика к примеру (возможно слова привести и расширение не к месту, путаюсь)

Wolsh 30.09.2015 00:37

"Привести к ..." значит "рассматривать, как ..."
Это не значит "изменить". С самим объектом при этом ничего не происходит абсолютно. Вы просто рассматриваете "СинийМяч" как "Мяч", потому что в синем есть все свойства просто мяча + еще что-то. Но вы говорите: "я не хочу ничего знать про еще что-то, мне достаточно того, что это Мяч". Вот что такое приведение. И хотя Мяч может быть расширяет класс Игрушка, это не значит что СинийМяч можно превратить в Солдатика.

caseyryan 30.09.2015 06:48

Цитата:

Сообщение от nelco (Сообщение 1187466)
теперь понял - только вниз по цепочке наследования... спасибо

Можно в обе стороны, если есть уверенность в том, что объект действительно принадлежит к такому типу
Рассмотрим например такой вариант:

Код AS3:

// есть класс наследник спрайта
package {
    public class SomeClass extends Sprite {
 
    }
}
 
// и есть метод принимающий спрайт как параметр
private function takeSprite(value:Sprite):void {
      if (value is SomeClass) {
          trace("Да, все ок, этот спрайт действительно SomeClass");
      }
}


undefined 01.10.2015 21:33

Цитата:

Можно в обе стороны
Дык при вызове takeSprite аргумент приведется к спрайту т.е. вверх по иерархии, а is к приведению отношения не имеет.

Добавлено через 4 минуты
или имелась в виду такая конструкция:
Код AS3:

private function takeSprite(value:Sprite):void {
      if (value is SomeClass) {
            var someClassRef:SomeClass=value as SomeClass;
      }
}

?


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

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