0

これこれを使用して、いくつかの数学クラス (トップダウンで使用する sin/cos 関数) を設定する方法を見つけようとしましたが、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/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;

また

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

static アクセス修飾子は、オブジェクト (この場合は関数) がアプリのインスタンスに 1 回しか存在しないことを意味しますが、標準のアクセス修飾子 ( publicprivateprotectedinternalmx_internal)はクラスfinalのインスタンスごとに 1 つのオブジェクトを作成します。オブジェクトは親オブジェクトではなくクラスに属しているため、アクセス修飾子を使用するとオブジェクトにアクセスできます。これらのオブジェクトを取得するために、インスタンス化する必要はありません (上記のコードでは、この場合不要であるため、コンストラクターを削除したことに気付くでしょう)。staticClassName.objectName

注:以下は必ずしもあなたに向けられたものではありませんが、この質問にアクセスする可能性のある将来の読者のために含めています

このブログ投稿では、標準のアクセス修飾子のかなり良い概要を説明しています。ビールとの比較は信じられないほど優れており、修飾子についての知識が限られている人にとっては信じられないほど簡単に理解できます.

また、「静的変数」に関するウィキペディアの記事を読んで、静的オブジェクトとは何か、どこでどのように使用するかを理解することをお勧めします。

AS3 は OOP (オブジェクト指向プログラミング) と ECMAScript ポリシーに厳密に従い、その構文は Java に大きく基づいています。これらの理由から、他の OOP または ECMA 言語で使用されるほぼすべての原則が AS3 にも適用されます。これは、AS3 専用でなくても、これらの原則を読むことで AS3 スキルを向上させることができることを意味します (AS3 OOP チュートリアルは量と質の両方でかなり制限されているため、AS3 を初めて学習する人にとっては難しい場合があります)。これらの原則を学ぶための OOP 言語)。

于 2013-08-26T18:01:33.417 に答える