As3静态方法调用内部方法

时间:2011-03-29 14:16:16

标签: flash actionscript-3 static undefined

我从互联网上下载了一个脚本,它完美无缺。我开始调整其中的代码以用于新的应用程序。但是我得到以下错误 1061:通过带有静态类型Class的引用调用可能未定义的方法drawShape。

在查看代码时,我看到调用drawShape的方法是一个静态方法,它调用它: ShapeDrawer.drawShape(); 请注意,ShapeDrawer类没有被导入到所有。

然后drawShape方法是这样的:内部函数drawShape()任何人都可以向我解释为什么它可能在我下载的应用程序中工作而不是我的。他是为闪存播放器9使用而构建的,而我的可能是其中的一部分。

这就是它的样子:

package puzzle
{
    import flash.geom.Point;    
    import utils.MyMath;

    public class PuzzleCaculater
    {
        public static function combineTwoPieces(pieceA:PuzzlePiece , pieceB:PuzzlePiece):void
        {
            for each(var drawingPiece in pieceB.unionPieces)
            {
                ShapeDrawer.drawShape(pieceA.graphicLayer , drawingPiece.shapeData , true);
                drawingPiece.disactive();
                drawingPiece.myGroup = pieceA.myGroup;
                drawingPiece.graphicLayer = pieceA.graphicLayer;
                pieceA.unionPieces.push(drawingPiece);
                drawingPiece.unionPieces = pieceA.unionPieces;
            }
        }
    }
}

package puzzle
{
    public class ShapeDrawer
    {
        internal function drawShape(target:Shape , drawingShapedata:Object , useBitmap:Boolean = true):void
        {
            var leftShape:Array= drawingShapedata.leftShape;
            var topShape:Array= drawingShapedata.topShape;
            var rightShape:Array= drawingShapedata.rightShape;
            var bottomShape:Array= drawingShapedata.bottomShape;
            var shapes:Array= [];
            shapes.push(leftShape);
            shapes.push(topShape);
            shapes.push(rightShape);
            shapes.push(bottomShape);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您可以像这样定义drawShape

internal function drawShape(...)

你必须这样定义:

static internal function drawShape(...)

Thath将解决您的问题,internal关键字不是问题(因为这两个类都在同一个包中)

答案 1 :(得分:0)

internal关键字将阻止在包外调用此函数。尝试将其公开,看看是否能解决问题。

答案 2 :(得分:0)

阅读access modifiers。它们对AS3(以及其他OO语言)中的OO设计模式至关重要,对它们的误解将导致麻烦;)

  

内部:内部方法或   构建属性以进行共享   穿过一个共同的包。你不需要   扩展或继承到类   有内部成员(我们在哪里   继承在受保护的情况下)   访问它们。内置的   成员/方法就像是公开的   那些在同一个包中的类

将此方法声明为公开将极有可能解决您的问题......干杯!