Aqualead逆引きリファレンス


目次

1. グループノードの操作
1. グループ内の全ノードに対する操作をするには
2. ノード内の特定のクラスを検索するには
2. 表示関連
1. 画像を表示するには
2. ノードが実際に表示されているか調べるには
3. ラインや矩形を表示するには
4. 各種ノードを生成したときの表示状態について
3. ウィジェット
1. ウィジェットに所属するウィジェットを取得するには
2. スクロールバーを使用するには
3. スキンを使用するには
4. 文字列
1. 使用できる文字コードは
2. 文字列クラスを使用するには
3. 文字数を数えるには
4. 関数から返った文字列の解放は
5. テーブル
1. テーブルをソートするには

第1章 グループノードの操作

1. グループ内の全ノードに対する操作をするには

グループ内のノードの個数はGetNodeCount関数で取得出来ます。 ノードはGetNode関数で取得出来るため、forループを使用して操作をします。

  for( Sint32 i=group->GetNodeCount()-1; i>=1; --i ){
    ALNode *n = group->GetNode(i);
    //何かしらの処理
  }

なお、GetNode(0)は常にグループ自身を指すので0は除外してループを実行します。 グループ自体にも処理を行う場合は、0も含めたループを実行します。

2. ノード内の特定のクラスを検索するには

FindNodeByType関数を使用します。引数には、ノードのクラスに対応するオブジェクトタイプを指定します。 オブジェクトタイプは32ビットの整数で、各クラスの公開static定数、NODE_TYPEとして定義されています。 例えば、ALSpriteのオブジェクトタイプはALSprite::NODE_TYPEです。 取得したノードは、各クラスのCast関数を用いてキャストします。

  ALSprite *sp = ALSprite::Cast( group->FindNodeByType( ALSprite::NODE_TYPE ) );

なお、同一クラスがグループ内に複数ある場合、FindNodeByTypeを使用して二つ目以降のノードを取得することはできません。

第2章 表示関連

1. 画像を表示するには

画像を表示するには、ALSpriteクラスを使用します。 ALSpriteのCreate関数か、LoadTexture関数に画像のファイル名を指定し、Show関数を実行することで表示を行います。

  ALSprite *sp = ALSprite::Create("Image.bmp");
  sp->Show();

2. ノードが実際に表示されているか調べるには

ノードにはIsDisp関数が有り、Show関数を実行すればtrueが、Hide関数を実行すればfalseを取得出来ます。 しかし、ノードには非表示にする方法がShow,Hide以外に、以下の5つの方法があります。

・SetEnable関数を使用する

・SetParentDispLinkをtrueに設定し、親ノードの表示状態を設定する

・SetParentEnableLinkをtrueに設定し、親ノードのEnable状態を設定する

・ALScreenのShow関数、Hide関数を使用する

・ALScreenのSetDrawFamilyBits関数を使用する

これら全ての設定を考慮して、実際に表示されているかどうかを取得するには、IsTotalDisp関数を使用します。 この関数がfalseを返す場合、前述のどれかの理由でこのノードは非表示になっています。

3. ラインや矩形を表示するには

ALPrimを使用します。 ALPrimは2Dで、ライン、三角形、矩形等のプリミティブを表示するのに使います。 3D空間に出す場合は、ALPrim3Dを使います。 使い方は以下のようになります。

  ALPrim *pr = ALPrim::Create();
  pr->BeginAdd();
  pr->AddLine( ALVector2( 0, 0 ), ALVector2( 1, 2 ) );
  pr->AddFillRect( ALFRect( 10, 10, 15, 20 ) );
  pr->EndAdd();
  pr->Show();

なお、サンプルのように複数の種別のプリミティブを混在して使用することも可能です。

4. 各種ノードを生成したときの表示状態について

Aqualeadでの各種ノードは、原則生成時は非表示なので表示するためにはShow関数を実行する必要があります。 ただし、元から表示物がないALNode,ALGroupNodeのみ初期状態は表示です。

Assemble関数で生成したときは、ルートとなるノードに関しては非表示になりますが、それ以外のグループに含まれるノードは表示状態です。そのため、ルートノードでShow関数を実行することで全てのノードが表示されます。

AssembleMember関数で生成するときは、呼び出し元のノードの表示状態は変化しません。生成するノードは表示状態になります。

第3章 ウィジェット

1. ウィジェットに所属するウィジェットを取得するには

ALContainerWidget等、一部のウィジェットは別のウィジェットやノードを所有することが出来ます。 ウィジェットはグループノードのサブクラスなので、所属しているウィジェットやノードはグループノードと同じようにGetNodeCount関数やGetNode関数で取得が出来ます。 その中でウィジェットのみを取得したい場合は、GetWidgetCount関数やGetWidget関数を使用すると所属ノードのウィジェットのみを取得することが出来ます。

なお、GetNode関数と違い、GetWidget関数は自身以外のウィジェットを返します。 そのため、所属ウィジェットがない場合はGetWidgetCount関数は0を返します。

2. スクロールバーを使用するには

Aqualeadではデバッグ用以外には見た目つきのスクロールバーは無いので、 ALWidgetScrollBarを継承するかALFuncWidgetScrollBarを使用してスクロールバーの見た目を定義します。

作成したスクロールバーは、スキンIDを設定しスキンと共にシステムに登録して使用します。 システムに登録するには、ALWidget::EntryReleaseSkin関数かALWidget::EntrySkin関数を使用します。

同時に、スクロールバーのつまみも用意する必要があります。 これは、ALWidgetScrollThumbを継承するか、ALFuncWidgetScrollThumbを使用します。

つまみは、スクロールバーの初期化関数内で生成し、スクロールバーにSetThumb関数でセットします。

3. スキンを使用するには

スキンとはウィジェットの見た目や各種挙動を設定するクラスで、 ALWidgetSkinを継承するか、ALFuncWidgetSkinを使用します。

スキンはあらかじめシステムに登録して使用します。 ALFuncWidgetSkinを使う場合、以下のようになります。

  static const SKIN_ID_SAMPLE = 1;
  ALWidgetSkin* skin = ALFuncWidgetSkin::Create( SkinInitFunc, SkinChangeFunc );
  ALWidget::EntryReleaseSkin( SKIN_ID_SAMPLE, skin );

これを、実際にウィジェットで使用する前に一度だけ実行します。

この例の場合、スキンIDは1なので、スキンIDを1に設定したウィジェットが生成されるとこのスキンが生成され、 登録した初期化関数が呼び出されます。 その初期化関数内で見た目や、各種フラグのセットなどを行います。

なお、EntryReleaseSkin関数にはスキンだけでなく、スクロールバーやカーソルも同時に設定が出来ます。

第4章 文字列

1. 使用できる文字コードは

Aqualeadで使用できる文字コードはUTF8です。 日本語を使用するときは常にUTF8を使用する必要があります。 シフトJISやその他のエンコードはサポートされていません。

VisualStudioの場合、ソースコード中の文字列はシフトJISで扱われるため、 utf8マクロを使用して文字コードを変換するか、以下のプラグマを使用します。

  #pragma execution_character_set("utf-8")

なお、テキストを描画するALTextのみUTF16、UTF32も使用可能です。

2. 文字列クラスを使用するには

Aqualeadでは専用の文字列クラスは用意されていません。 そのため、文字列クラスが必要な場合はstd::stringを使用してください。

3. 文字数を数えるには

Aqualeadでは文字列はUTF8で管理するため、そのまま文字数を求めることは出来ません。 ALUTF8ToUTF32関数を使用することで、32ビット固定長に変換することが出来るので、 その後forループを使い、終端記号の0が来るまでループを回して文字数を数えます。

4. 関数から返った文字列の解放は

AqualeadではALToLower関数など文字列格納バッファを渡さずに、返り値がcharポインタの関数があります。 これらの関数が返す文字列はAqualead内部のワークエリアを使い回すため、解放の必要はありません。

その代わり、そのポインタを保持し続けると別の関数が上書きする可能性があるので、 1フレームを超えて保持する場合は必ずコピーをとる必要があります。

第5章 テーブル

1. テーブルをソートするには

テーブルはソートすることが可能です。 ソートを行うには、SortRecord関数を使用します。 引数は、対象とするフィールドが必須項目です。 フィールドはFindField関数で取得します。 ALMakeRecordツールでincファイルを生成している場合は、Get~~Field関数で取得することができ、 FindField関数を使うより高速でフィールド名指定ミスを防ぐことが出来ます。

第2引数はtrueを指定することで降順ソートが出来ます。 第3引数には比較関数を指定することができ、ソート内容をカスタマイズする事が可能です。

なお、ソートには安定ソート関数を使用しているため、比較内容が一致している場合の順序はそのまま保持されます。 そのため、2項目以上のソートが必要な場合は、続けてソートを行うことで実現することが可能です。