Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не удается создать свойство в fl.text.TLFTextField. (http://www.flasher.ru/forum/showthread.php?t=174419)

dimetradim 25.01.2012 04:03

Не удается создать свойство в fl.text.TLFTextField.
 
Народ помогите разобраться почему не робит код. Задача чтоб при растягивании флешки текстовое поле тоже растягивалось и текст переформатировался. При добавлении текстового поля TLF (оно же далее по коду "ttt") появляются ошибки.
Где именно смотрите в коде. Пометил стрелками "<<<<".
Если можно свои версии излагайте кодом, я не прогер и поэтому помощь типа поюзай хелп по теме такой то и т.п. не помогут

Код AS3:

var normalWidth:Number = this.stage.stageWidth;
var normalHeight:Number = this.stage.stageHeight;
 
// Массив, в котором храним обьекты, которые изменяются при изменении окна
var objects:Array = new Array(panorama, logo, minsk, plashka, blok_txt, prodaja, ttt);
for (var i:uint = 0; i < objects.length; i++){
      objects[i].xRatio = objects[i].x / this.stage.stageWidth; // <<<<  в выводе выдаёт - ReferenceError: Error #1056: Не удается создать свойство xRatio в fl.text.TLFTextField.  at _55x100_fla::MainTimeline/frame1()
      objects[i].yRatio = objects[i].y / this.stage.stageHeight;
}
 
//Помечаем обьекты которые можно увеличивать
plashka.scalable = true;
// ttt.scalable = true;    <<<< и если тут раскоментить то при компиляции выдает - Монтажный кадр 1, слой "Action Script", кадр 1, строка 13        1119: Обращение возможного неопределенного свойства scalable через ссылку со статическим типом fl.text:TLFTextField .
 
 
 
this.stage.scaleMode = "noScale";
this.stage.align = "TL";
 
this.stage.addEventListener(Event.RESIZE, resizeHandler);
resizeHandler();
 
function resizeHandler(e:Event = null):void {
      if (this.stage.stageWidth > 800){
            for (var i:uint = 0; i < objects.length; i++){
                  objects[i].x = this.stage.stageWidth * objects[i].xRatio;
                  if(objects[i].scalable){
                        objects[i].scaleX = this.stage.stageWidth / this.normalWidth;
                  }
            }
      }
 
      if (this.stage.stageHeight > 55){
            for (var j:uint = 0; j < objects.length; j++){
                  objects[j].y = this.stage.stageHeight * objects[j].yRatio;
                  if(objects[j].scalable){
                        objects[j].scaleY = this.stage.stageHeight / this.normalHeight;
                  }
            }
      }
}


Genzo 25.01.2012 11:22

У TLFTextField нет таких свойств, поэтому вы и не можете их использовать!
http://help.adobe.com/en_US/FlashPla...TextField.html

dimetradim 25.01.2012 13:55

ну это я и так понял, как это поправить в данном случае?

Genzo 25.01.2012 14:00

Код AS3:

      objects[i].xRatio = objects[i].x / this.stage.stageWidth;
      objects[i].yRatio = objects[i].y / this.stage.stageHeight;

Что должно делать? И где потом пригодиться?
Код AS3:

scalable

вы во всех классах добавили этот параметр? (правильно будет scaleble)

nOobCrafter 25.01.2012 14:31

Genzo
Цитата:

(правильно будет scaleble)
да ну? lingvo:
Цитата:

scalable масштабируемый, наращиваемый scalability
dimetradim
самый простой вариант найдите какой нибудь лейаут маганер (layout manager) ну или напишите свой:

Код AS3:

            var normalWidth: Number = this.stage.stageWidth;
            var normalHeight: Number = this.stage.stageHeight;
 
            var objects: Array = [panorama, logo, minsk, plashka, blok_txt, prodaja, ttt];
            // иницитировать данные мы можетте как вам угодно, я использвоал цикл, просто так меньше писать.
            var data: Array = [];
            for (var i: uint = 0; i < objects.length; i++) {
                data[i] = {
                    target: objects[i],
                    xRatio: objects[i].x / this.stage.stageWidth,
                    yRatio: objects[i].y / this.stage.stageHeight,
                    scalable : objects[i] is TLFTextField // например
                }
            }
 
            plashka.scalable = true;
 
 
            this.stage.scaleMode = "noScale";
            this.stage.align = "TL";
 
            this.stage.addEventListener(Event.RESIZE, resizeHandler);
            resizeHandler();
 
            function resizeHandler(e: Event = null): void {
                if (this.stage.stageWidth > 800) {
                    for (var i: uint = 0; i < data.length; i++) {
                        data[i].target.x = this.stage.stageWidth * data[i].xRatio;
                        if (data[i].scalable) {
                            data[i].scaleX = this.stage.stageWidth / this.normalWidth;
                        }
                    }
                }
 
                if (this.stage.stageHeight > 55) {
                    for (var j: uint = 0; j < data.length; j++) {
                        data[j].target.y = this.stage.stageHeight * data[j].yRatio;
                        if (data[j].scalable) {
                            data[j].scaleY = this.stage.stageHeight / this.normalHeight;
                        }
                    }
                }
            }


dimetradim 25.01.2012 15:15

nOobCrafter Спасибо. Помогло. Только далее по коду где присваиваем scalable = true ошибка появляется. Ниже привёл.

Код AS3:

            var normalWidth: Number = this.stage.stageWidth;
            var normalHeight: Number = this.stage.stageHeight;
 
            var objects: Array = [panorama, logo, minsk, plashka, blok_txt, prodaja, ttt];
 
            var data: Array = [];
            for (var i: uint = 0; i < objects.length; i++) {
                data[i] = {
                    target: objects[i],
                    xRatio: objects[i].x / this.stage.stageWidth,
                    yRatio: objects[i].y / this.stage.stageHeight,
                    scalable : objects[i] is TLFTextField // например
                }
            }
 
            plashka.scalable = true;
            ttt.scalable = true;        //  <<< если тут присвоить тру, чтоб тянулся блок по ширине, то выдает ошибку Монтажный кадр 1, слой "Action Script", кадр 1, строка 17        1119: Обращение возможного неопределенного свойства scalable через ссылку со статическим типом fl.text:TLFTextField .
 
 
 
            this.stage.scaleMode = "noScale";
            this.stage.align = "TL";
 
            this.stage.addEventListener(Event.RESIZE, resizeHandler);
            resizeHandler();
 
            function resizeHandler(e: Event = null): void {
                if (this.stage.stageWidth > 800) {
                    for (var i: uint = 0; i < data.length; i++) {
                        data[i].target.x = this.stage.stageWidth * data[i].xRatio;
                        if (data[i].scalable) {
                            data[i].scaleX = this.stage.stageWidth / this.normalWidth;
                        }
                    }
                }
 
                if (this.stage.stageHeight > 55) {
                    for (var j: uint = 0; j < data.length; j++) {
                        data[j].target.y = this.stage.stageHeight * data[j].yRatio;
                        if (data[j].scalable) {
                            data[j].scaleY = this.stage.stageHeight / this.normalHeight;
                        }
                    }
                }
            }

Добавлено через 30 минут
Кстати та же ошибка появляется если пробовать тянуть экземпляр кнопки

nOobCrafter 25.01.2012 20:27

dimetradim прочтите советы данные вам в теме еще раз.
используемые вами классы TLFTextField, Sprite и т .д. не являются динамическими, то есть вы не можете просто так создать им св-во которое вам надо, или оборачивайте данные в нужную вам структуру или расширяйте штатные классы и уже с ними работайте.


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

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