0

我正在通过 Lynda tut 创建一个拖放游戏。我创建的游戏不断出现错误,因为我注意到(经过数周审查代码并让其他人查看代码以找出问题所在)我遵循的教程在第一帧完成了所有操作,但我正在制作我的游戏从第 3 帧开始。因此,如果我在第 1 帧开始游戏,它可以完美运行,并且不会出现以下错误:

当我测试电影时会发生这种情况,一旦我点击继续,我就可以看到电影 -

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at simpleSpring()[simpleSpring.as:21]

当我拖动我的对象时会发生这种情况 -

TypeError: Error #2007: Parameter hitTestObject must be non-null.
    at flash.display::DisplayObject/_hitTest()
    at flash.display::DisplayObject/hitTestObject()
    at DragDrop/drop()[DragDrop.as:33]

因为我知道除非我在第一帧开始游戏,否则这些错误不会出现,我想知道我可以放置什么代码,以便我可以在超过第一帧的帧开始游戏。

以下是 DragDrop.as 的代码

    package 
{
    import flash.display.*;
    import flash.events.*;

    public class DragDrop extends Sprite
    {
        var origX:Number;
        var origY:Number;
        var target:DisplayObject;

        public function DragDrop()
        {
            // constructor code
            origX = x;
            origY = y;
            addEventListener(MouseEvent.MOUSE_DOWN, drag);
            buttonMode = true;
        }

        function drag(evt:MouseEvent):void
        {
            stage.addEventListener(MouseEvent.MOUSE_UP, drop);
            startDrag();
            parent.addChild(this);
        }

        function drop(evt:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_UP, drop);
            stopDrag();

            if(hitTestObject(target))
            {
                visible = false;
                target.alpha = 1;
                Object(parent).match();
            }

            x = origX;
            y = origY;
        }

    }

}

这是 simpleSpring.as

package 
{

    import flash.display.*;
    import flash.events.*;


    public class simpleSpring extends MovieClip
    {
         var dragdrops:Array;


        public function simpleSpring()
        {
            // constructor code
            dragdrops = [ladyone,ladytwo,ladythree,ladyfour,ladyfive,ladysix];
            var currentObject:DragDrop;
            for(var i:uint = 0; i < dragdrops.length; i++)
            {
                currentObject = dragdrops[i];
                currentObject.target = getChildByName(currentObject.name + "_target");


            }
        }

        public function match():void
        {

        }
    }

}

我尝试将代码添加到游戏文档中的操作层,但这似乎也无法正常工作。

4

1 回答 1

0

在出版方面,我是个新手。我注意到我在为 android 发布时可以添加多个 swf 文件。这解决了我无法在开始帧编码的问题。如果我有这个游戏在一个单独的 Flash 文件中保存在同一个文件夹中,标题电影使用 actionscript 调用它,代码将起作用,我可以将整个内容作为一个文件发布。再次感谢那些试图帮助我解决这个问题的人!

于 2013-08-08T15:37:21.417 回答