ActionScript 3.0 и «Ошибка типа: ошибка № 1034: сбой приведения типа» - PullRequest
0 голосов
/ 29 мая 2018

В настоящее время я следую учебному пособию, и я смотрел его как 6-7 раз, но по какой-то причине я продолжаю получать:

Ошибка типа: Ошибка # 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;
        }
    }
}

Ошибка появляется в строке 38, и когда я пытаюсь ее отладитьскажите мне, что clickObj не определен.Как я могу решить эту проблему?

Это полное сообщение об ошибке:

Ошибка ввода: Ошибка # 1034: Ошибка приведения типа: невозможно преобразовать flash.display :: MovieClip @ a3e4a61 вЛоготип.в MatchingGame / openLogo () [H: \ Informatica \ Matching game \ MatchingGame.as: 39]

1 Ответ

0 голосов
/ 29 мая 2018

Похоже, что приведение от MovieClip до Logo не работает.поместите трассировку перед этой строкой, чтобы увидеть, что такое event.target.

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

Попробуйте var clickObj:Logo = Logo(e.currentTarget); в качестве быстрого теста.Обязательно ознакомьтесь со статьей Тревора МакКоули, чтобы лучше понять пузыри событий.

as3 event phase

...