#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;