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