このページは、EaaSの3.7.0を対象としています。
更新履歴
このページでは、Scaleform CLIKのInventorySlotコンポーネントについてまとめます。 InventorySlotはRPGのアイテムスロットのようなコンポーネントです。 CRYENGINE\Tools\Scaleform\CLIK\demos\InventoryDemo.flaにサンプルがあります。 InventorySlot←DragTarget←UIComponentのように継承しています。 またDragManagerも使用しています。 InventorySlotのアイテムはslot0.data={type:"armor",asset:2,quantity:1};のように設定します。 typeはアイテムがドラッグ&ドロップできるスロットの種類を表します。 コンポーネントプロパティのdragAcceptTypesと一致するスロットだけにドラッグ&ドロップできます。 assetはアイテムのアイコンを表します。 iconsシンボルでのフレーム数を指定します。 quantityはアイテムの数を表します。
ドラッグ&ドロップの基本的な流れは以下の通りです。
ユーザーがスロットをクリック。 ↓ InventorySlotのonPress関数が呼び出される。 内部でDragManagerのstartDrag関数が呼び出す。 第三引数にドラッグ元のアイテムデータであるdataが渡され、このスロットのdataはnullになる。 第四引数にドラッグ元のInventorySlotオブジェクトであるthisが渡される。 ↓ DragManagerのstartDrag関数が呼び出される。 内部でinitiateDrag関数を呼び出す。 第一引数にdataが渡される。 第二引数にrelatedObjectが渡される。 また_root.onMouseMoveにdoDragが、_root.onMouseUpにstopDragが登録される。 ↓ DragMagagerのinitiateDrag関数が呼び出される。 内部でdragBeginイベントが発行される。 イベントでdataが渡される。 ↓ 全てのInventorySlotでdragBegin関数が実行される。 このdragBegin関数はDragTargetを継承している。 dragBegin関数の内部でallowDrop関数を呼び出す。 引数にevent.dataが渡される。 ↓ InventorySlotでallowDrop関数が呼び出される。 allowDrop関数は渡されたdataのtypeがそのスロットのdataのtypeと等しければtrueを返し、等しくなければfalseを返す。 ↓ DragTargetのdragBegin関数に戻り、返却値がfalseならそのまま終了し、trueならハイライト表示つまりドロップ可能なスロットになる。 ユーザーがドロップ。 ↓ DragManagerのstopDrag関数が呼び出される。 内部でfinishDrag関数を呼び出す。 ↓ finishDrag関数が呼び出される。 finishDrag関数の内部でdragEndイベントが発行される。 イベントでドラッグ中のアイテムデータである_dataと、ドロップ先のオブジェクトであるdropTargetが渡される。 ↓ 全てのInventorySlotでdragEnd関数が実行される。 このdragEnd関数はDragTargetをオーバーライドしている。 内部でevent.dropTargetがそのInventorySlotならacceptDrop関数を呼び出す。 引数にevent.dataを渡す。 ↓ InventorySlotでacceptDrop関数が呼び出される。 内部では次のような処理が行われる。 まず_data(ドロップ先のスロット)があればDragManager.instance.relatedObject.data(ドラッグ元のスロット)に代入する。 次に引数のdata(ドラッグ中のアイテムデータ)をthis.data(ドラッグ先のスロット)に代入する。