ActionScript 3.0和';TypeError:Error#1034:类型强制失败';

ActionScript 3.0和';TypeError:Error#1034:类型强制失败';,actionscript,adobe,Actionscript,Adobe,我目前正在学习一个教程,我看了6-7遍,但出于某种原因,我一直得到: TypeError:错误#1034:类型强制失败 我正在尝试为学校作业制作一个匹配游戏,目前我有: package { import flash.display.MovieClip; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.Event; import flash.even

我目前正在学习一个教程,我看了6-7遍,但出于某种原因,我一直得到:

TypeError:错误#1034:类型强制失败

我正在尝试为学校作业制作一个匹配游戏,目前我有:

package {

    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.Event;
    import flash.events.MouseEvent;


    public class MatchingGame extends MovieClip {

        var fClip:Logo
        var sClip:Logo
        var myTimer:Timer
        var frames:Array = new Array(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10);

        public function MatchingGame() {
            // Constructor code

            for(var i:Number=1; i<=5; i++) {
                for(var j:Number=1; j<=4; j++) {
                    var myLogo:Logo = new Logo();
                    var index = Math.floor(Math.random() * frames.length)

                    myLogo.frameNo = frames[index];
                    frames.splice(index, 1);

                    addChild(myLogo);
                    myLogo.x = j*100;
                    myLogo.y = i*100;

                    myLogo.gotoAndStop(11);
                    myLogo.addEventListener(MouseEvent.CLICK, openLogo);
                }
            }
        }

        private function openLogo(e:MouseEvent) {
            var clickObj:Logo = Logo(e.target);

            if(fClip == null) {
                    fClip = clickObj;
                    fClip.gotoAndStop(fClip.frameNo);
            }
            else if(sClip == null && fClip != clickObj) {

                sClip = clickObj;
                sClip.gotoAndStop(sClip.frameNo);

                if(fClip.frameNo == sClip.frameNo) {
                    myTimer = new Timer(1000, 1);
                    myTimer.start();
                    myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, removeLogos);
                }
                else {
                    myTimer = new Timer(1000, 1);
                    myTimer.start();
                    myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, resetLogos);
                }
            }
        }

        private function removeLogos(e:TimerEvent) {
            removeChild(fClip);
            removeChild(sClip);
            myTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, removeLogos);
            fClip = null;
            sClip = null;
        }

        private function resetLogos(e:TimerEvent) {
            fClip.gotoAndStop(11);
            sClip.gotoAndStop(11);
            myTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, resetLogos);
            fClip = null;
            sClip = null;
        }
    }
}
包{
导入flash.display.MovieClip;
导入flash.utils.Timer;
导入flash.events.TimerEvent;
导入flash.events.Event;
导入flash.events.MouseEvent;
公共类配对游戏扩展MovieClip{
标志
var sClip:徽标
var myTimer:Timer
变量帧:数组=新数组(1,1,2,2,3,3,4,4,5,5,6,6,7,8,8,9,9,10);
公共功能匹配游戏(){
//构造代码

对于(变量i:Number=1;i,从
MovieClip
Logo
的演员阵容似乎不起作用。 在该行之前放置一个跟踪,以查看
event.target
是什么

根据具体情况,您可能会得到与预期不同的元素

尝试
var clickObj:Logo=Logo(e.currentTarget);
作为快速测试。 一定要通读特雷弗·麦考利的文章,以便更好地理解事件冒泡


除了这个回答之外:还有一种
安全的
方法可以使用
作为
操作符进行类型转换。它不会引发异常,相反,如果类型转换失败,您将得到
null
作为结果。例如:
const nonValidCast=someInteger as Array;
。您可以将结果与null进行比较,以确保铸造成功。