Почему текст основной области содержимого не обновляется? Я неправильно понял ссылку? - PullRequest
0 голосов
/ 11 марта 2011

Я не являюсь разработчиком Flash, но я отлаживаю проблему, из-за которой копия / текст назначена неправильно.

В файле .as заголовки и подзаголовки назначены и работают:

195                         body.heading.htmlText = heading;
196                         body.sectionheading.htmlText = nav_name;
197                         body.subheading.htmlText = subheading;
198                         body.subheading.htmlText = 'testtt';

Тем не менее, основная копия не:

180                         body.textholder.myText.htmlText = 'mederTest';

Есть ли какой-нибудь способ, которым я мог бы найти все текстовые области (все, что имеет присваиваемое htmlText) программно? В самой Flash я не могу выбрать объекты заголовка / подзаголовка сами, так как они не отображаются на холсте? Они кажутся скрытыми.




Редактировать: у меня 24-ый SWF отладки. Я наконец нашел фактический текст, который необходимо обновить.

428                 var bodyClip:MovieClip = eval("bodyparts.bodycontent_"+tmpclipname.id+"_0");
429                 ExternalInterface.call( "console.log" , bodyClip )
430                 for ( var p in bodyClip ) {
431                     ExternalInterface.call( "console.log" , p )
432                     ExternalInterface.call( "console.log" , bodyClip[p] )
433                     ExternalInterface.call( "console.log" , bodyClip[p] )
434                     for ( var thing in bodyClip[p] ) {
435                         if ( thing === 'htmlText' ) {
436                             ExternalInterface.call( "console.log" , 'OMG' );
437                             ExternalInterface.call( "console.log" , bodyClip[p][thing] )
438                         }
439                         
440                         if ( thing === 'myText' ) {
441                             ExternalInterface.call( "console.log" , 'SUPEROMG' );
442                             ExternalInterface.call( "console.log" , bodyClip[p][thing]['htmlText'] )
443                         }
444                         ExternalInterface.call( "console.log" , thing )
445                     }
446                 }

Он детализируется, и когда bodyClip имеет экземпляр со свойством 'myText', ЭТО вещь, которую я хочу обновить.

Почему эта строка не обновляет его?

body.textholder.myText.htmlText = 'mederTest';

Программно говоря, это может быть только потому, что я, возможно, ссылаюсь на неправильный объект / экземпляр, не так ли? Файл .as не содержит ссылку на body.

Я могу только предположить, что он был определен в первом файле .as или его глобальном объекте. Кто-нибудь может мне помочь?

Ответы [ 3 ]

1 голос
/ 11 марта 2011

Вы можете просматривать список отображения, ища объекты типа TextField:

function findTextFields(container:DisplayObjectContainer):Array
{
    var result:Array = [];

    // Examine each child of the container
    for(var i:int = 0; i < container.numChildren; i++)
    {
        var obj:DisplayObject = container.getChildAt(i);

        // If the child is a TextField, add it to the result array
        if(obj is TextField)
            result.push(obj);

        // If the child is a DisplayObjectContainer, recurse on it
        var c:DisplayObjectContainer = obj as DisplayObjectContainer;
        if(c !== null)
            result.concat(findTextFields(c));
    }
    return result;
}
0 голосов
/ 11 марта 2011

Пытаетесь ли вы изменить текст из своего заявления if, когда обнаружите его? Или где-то еще?

if ( thing === 'myText' ) {
  bodyClip[p][thing]['htmlText'] = "mederTest"
}

.. потому что возможно, что TextField не существует, когда вы пытаетесь его изменить. Если точка воспроизведения находится не во фрейме, содержащем TextField, TextField не существует.

Еще одно предложение - изменить _альфу текстового поля, чтобы убедиться, что вы работаете с правильным текстовым полем?

0 голосов
/ 11 марта 2011

Помимо TextFields, есть также StaticText, который является объектом, который экспортируется, если мы помещаем обычный FlashField в Flash, и он не является динамическим.

Возможно, что текстовое поле, которое вы ищете, этовведите, и в этом случае вы не сможете установить текст.

Для по-настоящему хакерского ответа, если вы не можете повторно отредактировать этот TextField и сделать его динамическим, тогда одно решениебудет динамически создавать новый TextField.Скопируйте ширину, высоту, шрифт, цвет и т. Д. Старого.Либо установите для свойства background значение true, либо установите для свойства visible старого TextField значение false.Теперь добавьте ваш новый TextField как дочерний элемент родителя старого TextField, прямо над ним.Отредактируйте текст как вам угодно: D

...