Вызов статического метода As3 Внутренний метод - PullRequest
0 голосов
/ 29 марта 2011

Я скачал скрипт из интернета и он отлично работает.Я начал адаптировать код в нем для нового приложения.Но я получаю следующую ошибку 1061: вызов возможно неопределенного метода drawShape через ссылку со статическим типом Class.

При просмотре кода я вижу, что метод, вызывающий 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 ]

1 голос
/ 29 марта 2011

Вы определяете drawShape следующим образом:

internal function drawShape(...)

И вы должны определить это так:

static internal function drawShape(...)

Это решит вашу проблему, ключевое слово internal не 't (потому что оба класса находятся в одном пакете)

0 голосов
/ 29 марта 2011

Читайте о модификаторах доступа . Они имеют решающее значение для шаблонов проектирования ОО в AS3 (и других языках ОО), и неправильное их понимание вызовет проблемы;)

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

Объявление этого метода как Public, скорее всего, исправит вашу ошибку ... Cheers!

0 голосов
/ 29 марта 2011

Внутреннее ключевое слово предотвратит вызов этой функции вне пакета. Попробуйте сделать его публичным и посмотрите, исправит ли это.

...