Ошибка неявного принуждения к текстовому полю

#flash #actionscript-3 #textfield

#flash #actionscript-3 #текстовое поле

Вопрос:

Я думаю, что у меня самая распространенная ошибка actionscript.В приведенном ниже коде у меня есть видеоролик с некоторыми текстовыми полями внутри, и я хочу их анимировать.Когда я назначаю класс MovieClip, я получаю эту ошибку 1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.text:TextField. . Когда я trace получаю дочерние [Object TextField] элементы, и код работает нормально, если я помещаю его в первый кадр и применяю его к динамическому тексту, так почему я получаю эту ошибку, когда пытаюсь применить этот код к дочерним элементам видеоролика?

Есть ли шанс забыть import какую-либо необходимую библиотеку?

Я сделал текстовые поля динамическими, вставил символы и установил сглаживание для анимации.

 package AScripts
{

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import com.greensock.*;
import com.greensock.easing.*;
import flupie.textanim.*;

public class TextFade extends MovieClip {
    private var child : Object;

    public function TextFade( )     
    {
        /*    for (var i : int = 0; i < numChildren; i    )  {
              child = getChildAt( i );
              trace( child );  
        */
            child = getChildAt( 0 );
            var txtanim:TextAnim = new TextAnim( child ); // <-- Error
                            /* TextAnim expects a TextField as argument */
            txtanim.mode = TextAnimMode.RANDOM;
            txtanim.split = TextAnimSplit.WORDS;
            txtanim.effects = myEffect;
            txtanim.start();
    }
    function myEffect( block:TextAnimBlock ) : void
    {
        TweenLite.to( block , .5 , {alpha : 0 , delay : Math.random( ) * 1 } );
    }   
  }
}
  

ОБНОВЛЕНИЕ: я внес изменения в предложения и работал.

 import flash.text.*;
private var child : TextField;
child = getChildAt( i ) as TextField;
  

Комментарии:

1. у вас есть дочерний элемент, приведенный как объект. Если TextAnim ожидает текстовое поле, приведите его как текстовое поле. посмотрите, работает ли это

2. Если я изменяю private var child : Object; на private var child : TextField; , я получаю Type was not found or was not a compile-time constant: TextField. ошибку.

3. вам нужно сделать import flash.text.*;

Ответ №1:

Попробуйте это:

 try 
{
    // Need to explicitly cast the child to TextField otherwise
    // we are making an implicit cast and will get an error.
    var textField:TextField = child as TextField; 
    var txtanim:TextAnim = new TextAnim( textField); 
} 
catch (error) 
{
    // unable to cast to a textfield, handle this error if necessary.
}
  

Ответ №2:

Вы можете просто использовать дочерний элемент в качестве объекта при получении объекта или изменить объявление дочернего параметра:

 // cast as TextField
public function TextFade( )     
{
    child = getChildAt( 0 ) as Object;
    // ... rest of method


// change declaration of child
public class TextFade extends MovieClip {
    private var child : TextField;