InventorySlotコンポーネント

このページは、EaaSの3.7.0を対象としています。

更新履歴

参考URL

概要

このページでは、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(ドラッグ先のスロット)に代入する。

戻る

inserted by FC2 system