Class AS3导入类不工作

Class AS3导入类不工作,class,actionscript-3,flash,Class,Actionscript 3,Flash,我迷路了。就我个人而言,我似乎无法创建和导入自己的类。我已经读了很多帖子,甚至还学习了一些教程(这些教程效果很好),但现在这些都是我的原创作品了,没问题 因此,我的.as文件名为GeoMath,其中包含我要导入的类,如下所示: package { public class GeoMath { public function GeoMath() { // Get Distance Between 2 points. public function dis

我迷路了。就我个人而言,我似乎无法创建和导入自己的类。我已经读了很多帖子,甚至还学习了一些教程(这些教程效果很好),但现在这些都是我的原创作品了,没问题

因此,我的.as文件名为GeoMath,其中包含我要导入的类,如下所示:

package {

public class GeoMath {

    public function GeoMath() {
        // Get Distance Between 2 points.
        public function distance(x1: Number, x2: Number, y1: Number, y2: Number): Number {
            var d: Number;
            d = Math.pow(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2), .5);
            return d;
        }... etc.
这个.as文件和我的.fla文件在同一个文件夹中。顺便说一句,它还有另外两个.as文件,它们具有我正在成功实例化的
Sprite
扩展名。好的,现在是主类:

package {

import flash.display.MovieClip;
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.*;

import GeoMath; // C:\Users\User\Desktop\oldProjects\oldProject_1
    ...
public class Document extends MovieClip {
    ...    
    mouseVel = distance(me.stageX, mouseLastX, me.stageY, mouseLastY); 
…Document.as,第174行,第17 1180列:调用可能未定义的方法距离。

我已尝试将名为“calculations”的文件夹与.fla放在同一文件夹中,然后将GeoMath.as放在该文件夹中,然后在GeoMath.as文件中执行此操作:

package calculations {
...
在主课堂上做这件事:

import calculations.GeoMath

但这也得到了同样的结果。我是瞎子还是笨蛋?谢谢你看。如果您想在不实例化GeoMath副本的情况下调用该函数,则需要将其设置为静态

公共静态函数距离(x1:Number,x2:Number,y1:Number,y2:Number):Number{

函数调用将更改为

mouseVel=GeoMath.distance(me.stageX,mouseLastX,me.stageY,mouseLastY);

但是,这还有其他影响。因此,请确保实例化该类并调用实例的方法

var myGeoMath:GeoMath = new GeoMath();
mouseVel = myGeoMath.distance(me.stageX, mouseLastX, me.stageY, mouseLastY);
对于类导入,您的想法是正确的,不过您可以通过在以下位置添加路径来更改类的位置:
Advanced ActionScript 3.0 Settings
Source path
。然后,点击加号并添加基本路径

您会注意到默认路径只是
,这确保了
.fla
在同一文件夹中搜索类。如果您想进入目录,可以像在web上一样使用
。/
的相对路径。在任何情况下,它都会从该位置搜索您的
命名空间.package.class

例如,
flash.display.MovieClip
实际上是两个文件夹和一个
.as
文件,格式如下:

SOURCE PATH
↪   flash/
    ↪   display/
        ↪   MovieClip.as
            Shape.as
            Sprite.as
            ...
明智的做法是将类保留在自己的命名空间中(因为它有助于防止冲突)。您的包可能看起来像
包nealdavis.calculations{
,而您的类将是
公共类GeoMath{
。然后您将需要类似的文件夹结构

SOURCE PATH
    document.fla
↪   nealdavis/
    ↪   calculations/
        ↪   GeoMath.as
            ...

如果希望在不实例化GeoMath副本的情况下调用该函数,则需要将其设置为静态

公共静态函数距离(x1:Number,x2:Number,y1:Number,y2:Number):Number{

函数调用将更改为

mouseVel=GeoMath.distance(me.stageX,mouseLastX,me.stageY,mouseLastY);

但是,这还有其他影响。因此,请确保实例化该类并调用实例的方法

var myGeoMath:GeoMath = new GeoMath();
mouseVel = myGeoMath.distance(me.stageX, mouseLastX, me.stageY, mouseLastY);
对于类导入,您的想法是正确的,不过您可以通过在以下位置添加路径来更改类的位置:
Advanced ActionScript 3.0 Settings
Source path
。然后,点击加号并添加基本路径

您会注意到默认路径只是
,这确保了
.fla
在同一文件夹中搜索类。如果您想进入目录,可以像在web上一样使用
。/
的相对路径。在任何情况下,它都会从该位置搜索您的
命名空间.package.class

例如,
flash.display.MovieClip
实际上是两个文件夹和一个
.as
文件,格式如下:

SOURCE PATH
↪   flash/
    ↪   display/
        ↪   MovieClip.as
            Shape.as
            Sprite.as
            ...
明智的做法是将类保留在自己的命名空间中(因为它有助于防止冲突)。您的包可能看起来像
包nealdavis.calculations{
,而您的类将是
公共类GeoMath{
。然后您将需要类似的文件夹结构

SOURCE PATH
    document.fla
↪   nealdavis/
    ↪   calculations/
        ↪   GeoMath.as
            ...

我刚刚添加了一个关于类路径的部分。您可以尝试一下吗?如果它不能解决问题,请用该问题更新您的原始问题?或者,如果问题明显不同,您可能希望打开一个新问题。如果此问题修复了原始问题,请不要忘记接受。:)非常感谢!我已经完成了此操作,但我得到了错误:
C:\Users\User\Desktop\oldProjects\oldProject\u 1\calculations\GeoMath.as,第1行,第1列5001:包“calculations”的名称不反映此文件的位置。请更改此文件中包定义的名称,或移动该文件。C:\Users\User\Desktop\oldProjects\oldProject\u 1\calculations\GeoMath.as
。我想发布一个新问题会更好。即使按照你的确切文件夹方案,我也会遇到同样的错误。因此我添加了一个新问题。也许你可以看看?谢谢。@NealDavis“即使按照你的确切文件夹方案”不,您不是。您正在将文件夹
nealdavis/
添加到源路径,但它实际上是包的一部分。使用类似
C:/as3/nealdavis/calculations/GeoMath的文件夹结构。因为
您的源路径应该是
C:/as3
而不是
C:/as3/nealdavis
。源路径的子文件夹是包。谢谢您elp,这让我朝着正确的方向开始了,所以我会把它标记为已解决,但这是拼图的最后一块(对于其他有同样问题的人),是为了确保我没有将试图在GeoMath类中使用的函数放入构造函数代码中。显然,它们必须与GeoMath构造函数位于同一个.as文件中,但不在构造函数中。此外,它们必须是
公共函数…
。我刚刚添加了一个关于类路径的部分。您可以尝试一下吗,如果可以的话如果不能解决问题,请用问题更新您的原始问题?或者,如果需要,您可能希望打开一个新问题