我迷路了。对于我的生活,我似乎无法创建和导入我自己的课程。我已经阅读了很多帖子,甚至还有关于教程(已经工作正常),但现在这是我原创的作品,没有骰子!
因此,名为GeoMath的.as文件包含我要导入的类,如下所示:
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, Line 174, Column 17 1180: Call to a possibly undefined method distance.
我尝试将名为'computation'的文件夹放在与.fla相同的文件夹中,然后将GeoMath.as放在THAT文件夹中,然后在GeoMath.as文件中执行此操作:
package calculations {
...
在主要课堂上这样做:
import calculations.GeoMath
但这已经返回了相同的结果。我是盲人还是傻瓜?谢谢参观。我非常感激,因为我现在已经流出了眼睛。
答案 0 :(得分:4)
如果要在不实例化GeoMath副本的情况下调用该函数,则需要将其设置为静态。
$scope
并且函数调用将更改为...
public static function distance(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
的相对路径,就像在网络上一样。在任何情况下,都会从该位置搜索您的../
例如,namespace.package.class
实际上是2个文件夹和flash.display.MovieClip
文件格式:
.as
将类保存在自己的命名空间中是明智的(因为它有助于防止冲突)。您的软件包可能看起来像SOURCE PATH
↪ flash/
↪ display/
↪ MovieClip.as
Shape.as
Sprite.as
...
,而您的课程将是package nealdavis.calculations {
。然后你需要一个类似的文件夹结构...
public class GeoMath {