Ошибка неявного принуждения на TextField - PullRequest
0 голосов
/ 02 ноября 2011

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

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

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

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;

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

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

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.
}
1 голос
/ 02 ноября 2011

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

// 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...