- 追加された行はこの色です。
- 削除された行はこの色です。
* 虎の巻 - Effective AngelScript [#pc67815b]
#contents
Last-modified: &lastmod();
** このページについて [#jf5661b7]
AngelScript(以下AS)を使うにあたって知っておいたほうがお得な情報を紹介していきます。
** オブジェクトを引数にとるときはオブジェクトハンドルではなく参照を使おう [#o68b05e7]
下記のような2つの関数があった場合,funcHandleのほうが処理が重くなります。
#code(c,){{
class Class {};
void funcRef( Class& obj )
{
}
void funcHandle( Class@ obj )
{
}
}}
これは,funcHandleはオブジェクトハンドルで受け取っていることが原因で参照カウント処理が挿入されるためです。
オブジェクトハンドルを引数に使わないといけないケースはないはずなので
関数の引数には参照のみを使うようにしましょう。
** よく使うコードはASではなくC++で書こう [#v42f5614]
ASコード上で定義したクラスの動作はあまり速くありません。
遅い原因として
・ASコード上で定義したクラスはアクセス時に参照カウント処理が必ず入る
・仮想マシン上でコードが実行されるためネイティブなC++コードと比べて処理が重い
といったことが挙げられます。
このようなところから,よく使うコードはC++で書いてバインドするようにしましょう。
筆者はVector3やMatrix34などよく使う数学クラスなどをC++で書いてバインドしています。
** ASコードでしか登録できないもの・C++コードでしか登録できないものを把握しよう [#kdda777a]
ASコードで登録できるもの全てがC++コードで登録できるわけではありません。
また逆に,C++コードで登録できるもの全てがASコードで登録できるわけではありません。
ASコード,C++コード,それぞれが登録できるものは把握しておきましょう。
下記の表がそれのまとめになります。
|項目|AS|C++|h
|クラスを継承したクラスの宣言|o|x|
|インターフェースを継承したクラスの宣言|o|x|
|POD型のクラスの宣言|x|o|
|値型のクラスの宣言|x|o|
** C++のPOD型のクラスはasOBJ_PODフラグを付けよう [#ga23854d]
C++コード上のPOD型のクラスをASにバインドするときはasOBJ_PODをつけるようにしましょう。
ここでいうPOD型とは,メンバ変数にポインタやオブジェクトハンドルを持たない型のことです。
asOBJ_PODをつけるとデフォルトコンストラクタ・代入演算子の定義が必要なくなると共に代入演算関数が自動生成されます。