Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 as3中的自定义导入/非本地类_Actionscript 3_Flash - Fatal编程技术网

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

Actionscript 3 as3中的自定义导入/非本地类,actionscript-3,flash,Actionscript 3,Flash,我试图使用并弄清楚如何设置一些数学类(我使用自上而下的sin/cos函数),但我将其设置为import package.class(当然是名称),但它说“definition package:class not found”。这让我很困惑,我想我必须对文件夹做些什么。但是,我不确定该放在什么文件夹中/该怎么做才能在文件夹中专门输入内容 //import sthreets.CustomFuncs; private function Movement() {

我试图使用并弄清楚如何设置一些数学类(我使用自上而下的sin/cos函数),但我将其设置为import package.class(当然是名称),但它说“definition 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;
        }
    }

}

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

所以。。。假设文件夹中有此结构:

src
->my
  ->package
    ->name
      ->ClassName
课程设置如下:

package my.package.name { 
    public class ClassName {
        public function ClassName(){
            //construct
        }
    }
}
您可以使用以下方式导入它:

import my.package.name.ClassName;

希望这有助于解释包和导入

我还注意到,您正在使用
CustomFuncs
类中的函数,就好像它们是静态的一样(就像使用
Math.cos()
或类似的函数一样)。你们班不是这样工作的。要做到这一点,您需要使用这个
static
access修饰符

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;
        }
    }
}
静态访问修饰符意味着对象(在本例中,函数)在应用程序的任何实例中只存在一次,而标准访问修饰符(
public
private
protected
internal
mx_internal
final
)为类的每个实例创建一个对象。使用
static
access修饰符可以通过
ClassName.objectName
访问对象,因为对象属于类,而不是父对象。要访问这些对象,您永远不必实例化(您会在上面的代码中注意到,我删除了您的构造函数,因为在这种情况下它是不必要的)

注意:以下内容不一定是针对您的,但我将其包括在内,以供将来可能访问此问题的读者使用

这提供了标准访问修饰符的一个相当好的概述。它与啤酒的对比令人难以置信地好,而且对于那些对修饰语了解有限的人来说,理解起来非常容易

我还建议阅读关于“静态变量”的文章,以帮助您理解静态对象是什么,在哪里以及如何使用它


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

您能帮我们看一下您的代码吗?将其编辑进来,第一个注释掉的部分是导致我出错的原因,第二个是CustomFuncs as文件,位于名为“streets”的文件夹中。谢谢,但是如果我的fla/as文件位于桌面上的文件夹中,我该如何设置它,但是我的自定义类也在桌面上的文件夹中?另外,我计划稍后调试Math中的sin/cos内容,但我打算使用Math.sin和Math.cos。如果它们位于src文件夹中(在本例中为桌面上的文件夹),则包与文档类相同。因此,不需要导入它,类应该创建为
package{public class{
,没有任何包名。(不是100%确定,但是,因为我从来没有使用Flash Pro构建过基于类的项目,只有Flash Builder和Flash Develop。但是Pro只是一个功能更加丰富的IDE,所以它应该工作相同)它们位于不同的文件夹中,但我不知道要做什么,我尝试了用户。\u street.Desktop和所有这些,尝试了几种方法,但我不知道文件路径是什么。文件夹路径是什么?FLA和类的完整内容。如果文件不在应用程序目录中,则必须手动包含文件。File>ActionScript设置。添加您的文件夹。Flash不知道要包含和不包含哪些文件夹,因此它只适用于src目录的子目录。此时的包可能无关紧要,但您应该使用正确的命名约定(com.yourdomain.project.category.subcategory.Class)
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;
        }
    }
}