0

我试图用这个这个来弄清楚如何设置一些数学类(我用于自上而下的任何东西的 sin/cos 函数。)但我将它设置为 import package.class (当然是名称。)但是它说“定义包:找不到类”。这让我很困惑,我假设我必须对文件夹做一些事情。但是,我不确定将其放入哪些文件夹/如何在文件夹中专门输入内容。

//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;
        }
    }

}
4

1 回答 1

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;
        }
    }
}

静态访问修饰符意味着对象(在本例中为函数)仅在应用程序的任何实例中存在一次,而标准访问修饰符(public, private, protected, internal, mx_internal, )为final的每个实例创建一个对象。使用访问修饰符允许您访问对象,因为对象属于类,而不是父对象。要获取这些对象,您永远不必实例化(您会在上面的代码中注意到我删除了您的构造函数,因为在这种情况下它是不必要的)。staticClassName.objectName

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

这篇博客文章对标准访问修饰符进行了相当好的概述。它与啤酒相关的比较非常好,对于对修饰符知识有限的人来说,理解起来非常容易。

我还建议阅读这篇关于“静态变量”的Wikipedia 文章,以帮助您了解什么是静态对象以及在何处以及如何使用它。

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

于 2013-08-26T18:01:33.417 回答