構文 Edit

class Edit

  • public,protected,privateは無し。
  • 継承もなし。
  • コンストラクタ,デストラクタは有り。
  • operatorは可能?(未確認)

import Edit

他のmoduleの関数(Typeは不可)を自分のmodule内で使うための機能。

なので,一工夫したほうがいいかも。
その一例。
実装クラス(L_MathVector3)はIObjectを必ず継承する。
外部に公開する関数(F_MathVector3_*)はクラス外に宣言し,引数の先頭に必ずIObjectをとる。
他のモジュールは,公開されたその関数を通してアクセスするか,そのラッパークラス(MathVector3)を使ってアクセスする。

C++コード
すべてを展開すべてを収束
  1
  2
 
 
// IObject型を追加。
engine->RegisterInterface("IObject");
Vector3_Local.as
こいつは,mathモジュールでのみコンパイルされる。
クラスの内部実装を記述している。
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 
-
|
|
|
|
|
|
-
|
!
|
|
-
|
!
!
 
-
|
|
!
 
 
-
|
!
 
-
|
!
 
// module math - local
class L_MathVector3 : IObject
{
  L_MathVector3(){ /* */ }
  float mX;
  float mY;
  float mZ;
 
  float& x()
  {
    return mX;
  }
 
  void normalize()
  {
    //...
  }
};
IObject@ F_MathVector3_Constructor()
{
  MathVector3 obj;
  return @obj;
}
 
float& F_MathVector3_x( const IObject@ in obj )
{
  return cast<L_Vector3>(obj).mX;
}
void F_MathVector3_normalize( IObject@ obj )
{
  cast<L_Vector3>(obj).normalize();
}
Vector3.as
こいつは,他のmoduleでコンパイルされる。
クラスの内部実装は書かず,内部実装が書かれている関数を呼ぶだけに留める。
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 
 
 
 
-
|
-
|
!
|
|
|
-
|
!
|
|
-
|
!
!
// module public
import IObject@ F_MathVector3_Constructor() from "math";
import float& F_MathVector3_x( const IObject& in ) from "math";
import void F_MathVector3_normalize( const IObject& in ) from "math";
class MathVector3
{
  MathVector3()
  {
    mObj = F_MathVector3_Constructor();
  }
  IObject@ mObj;
 
  float& x()
  {
    return F_MathVector3_x( mObj );
  }
 
  void normalize()
  {
    F_MathVector3_normalize( mObj );
  }
};

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Sat, 08 Nov 2008 16:54:06 JST (5641d)