as3中的自定义导入/非本地类

时间:2013-08-26 15:31:15

标签: actionscript-3 flash

我试图使用thisthis来弄清楚如何设置一些数学类(我用于自上而下的sin / cos函数。)但是我已将它设置为导入package.class(当然是名字。)但它说“defintion package:Class not found”。这让我感到困惑,我将假设我必须对文件夹做些什么。但是我不确定在文件夹中专门输入内容的文件夹是什么。

//import sthreets.CustomFuncs;

private function Movement()
        {
            if(LEFT==true)
            {
                rotation=rotation-6;
            }
            if(RIGHT==true)
            {
                rotation=rotation+6;
            }
            if(UP==true)
            {
                //x=x+CustomFuncs.TopDownMove("x", rotation, 0);
                //y=y+CustomFuncs.TopDownMove("y", rotation, 0);
            }
            if(DOWN==true)
            {
                //x=x-CustomFuncs.TopDownMove("x", rotation, 0);
                //y=y-CustomFuncs.TopDownMove("y", rotation, 0);
            }
        }

注释掉的东西给了我错误,这是CustomFuncs代码。

package sthreets 
{

    public class CustomFuncs 
    {

        public function CustomFuncs() 
        {

        }

        public function TopDownMove(xy:String, rot:Number, offSet:Number):Number
        {
            if(xy=="x")
            {
                return cos(DegreesToRadions(rot)+offSet)
            }
            if(xy=="y")
            {
                return sin(DegreesToRadions(rot)+offSet)
            }
        }

        public function DegreesToRadions(rot:Number):Number
        {
            return rot*Math.PI/180;
        }
    }

}

1 个答案:

答案 0 :(得分:1)

包名称由src中的位置决定。 src/my/package/namemy.package.name。您在任何类顶部导入的包必须与实际包匹配,否则编译器将找不到该类。

所以...说你的文件夹中有这个结构:

src
->my
  ->package
    ->name
      ->ClassName

该课程将如下设置:

package my.package.name { 
    public class ClassName {
        public function ClassName(){
            //construct
        }
    }
}

您可以使用以下方式导入它:

import my.package.name.ClassName;

import my.package.name.*; //only use the wildcard if every class in that package is being used, otherwise you will include code you may or may not need to in your project

希望这有助于解释包装和进口。

我还注意到您正在使用CustomFuncs类中的函数,就像它们是静态的一样(就像使用Math.cos()或类似函数一样)。您的课程没有设置为以这种方式工作。为此,您需要使用此static访问修饰符。

package sthreets 
{
    public class CustomFuncs 
    {
        public static function TopDownMove(xy:String, rot:Number, offSet:Number):Number
        {
            if(xy=="x")
            {
                return cos(DegreesToRadions(rot)+offSet)
            }
            if(xy=="y")
            {
                return sin(DegreesToRadions(rot)+offSet)
            }
        }

        public static function DegreesToRadions(rot:Number):Number
        {
            return rot*Math.PI/180;
        }
    }
}

静态访问修饰符意味着对象(在本例中为函数)仅在应用程序的任何实例中存在一次,而标准访问修饰符(publicprivate,{{1 }},protectedinternalmx_internal)为的每个实例创建一个对象。使用final访问修饰符允许您通过static访问对象,因为对象属于类,而不是父对象。要获得这些对象,您永远不必实例化(您将在上面的代码中注意到我删除了您的构造函数,因为在这种情况下它是不必要的。)

注意:以下内容并不一定针对您,但我会将其包含在未来可能会访问此问题的读者中

这个blog post给出了标准访问修饰符的相当好的概述。它与啤酒的比较非常好,对于对修饰语知之甚少的人来说非常容易理解。

我还建议在“静态变量”上阅读此Wikipedia article,以帮助您了解静态对象是什么以及在何处以及如何使用它。

AS3严格遵循OOP(面向对象编程)和ECMAScript策略,其语法主要基于Java。由于这些原因,其他OOP或ECMA语言使用的几乎所有原则也适用于AS3。这意味着您可以通过阅读这些原则来提高您的AS3技能,即使它们不是专门针对AS3的(AS3 OOP教程在数量和质量上都相当有限,因此对于第一次学习AS3的人来说可能很难OOP语言学习这些原理)。