Warcraft3のMOD総合案内
- Jass Script/ユニットグループ の編集
[
ファイルを添付する
] [
このページの名前を変更する
] [
このページを編集する
]
サイトメニュー
ページ一覧
最近の更新ページ
使い方
トップへ戻る
Jass講座
[[トップ>FrontPage]] > [[MAP作成]] > [[トリガーエディタ]] > [[Jass Script]] > [[Jass講座]] > ユニットグループ ~ ~ ユニットグループ/group は、ユニットの集まりを指す変数のこと。ユニットにまとめて命令を出したり、範囲内のユニットを選ぶ等、MAP作りに欠かせない要素だ。 しかし、トリガーエディタで使った場合がそうであるように、ユニットグループはその性質上、&color(red){''メモリリークの温床''};になりうる。正しい使い方を必ずマスターしたい。 &color(red){''Jass NewGenの導入が前提''};です。導入せずとも利用できる内容も一部ありますが、あったほうが断然有利です。 ---- #contents ---- *宣言 [#r28f21fe] ユニットグループを使うには、まず変数に対し、ユニットグループを作成する。 -作成 local group SampleGroup = CreateGroup() ユニットグループを宣言して、空のユニットグループを作成。 この空のグループにユニットを追加して使う。最後には、&color(red){''メモリリークの原因''};になるので必ず破棄すること。 -破棄 //ユニットグループの破棄 call DestroyGroup(group whichGroup) //ユニットグループ変数のnull化も忘れずに。 set SampleGroup = null *ユニットの追加 [#a6b45c0a] ユニットを追加する方法はいくつかある。 -ユニット一体を追加 call GroupAddUnit(group whichGroup, unit whichUnit) -特定のプレイヤーの全ユニットを設定 call GroupEnumUnitsOfPlayer(group whichGroup, player whichPlayer, boolexpr filter returns nothing) -指定した範囲(rect)内の全ユニットを設定 call GroupEnumUnitsInRect(group whichGroup, rect r, boolexpr filter) -地点から、一定距離以内の全ユニットを設定 call GroupEnumUnitsInRange(group whichGroup, real x, real y, real radius, boolexpr filter) ほかにもいろいろ。 *ユニットの削除 [#z4360569] ユニットグループから除外する方法について。あくまでグループから取り除くだけで、ユニットそのものが消えるわけではない。 -ユニット一体を削除 call GroupRemoveUnit(group whichGroup, unit whichUnit) -グループ内の全ユニットを削除 call GroupClear(group whichGroup) ユニットグループを空の状態に戻すだけで、再利用可能。 これらでユニットグループを空にしても、''DestroyGroup'' を呼ぶのを忘れないように。 *使用例 [#qc4caba8] **範囲内のユニットについて処理したい [#s08dbb01] 『範囲内のユニットを選んで○○する』を実装するとき、下の方法がおすすめ。 [[サンプル集>Jass Script/サンプル集]]より、ノックバックからソースを一部転載。 function CastThunderClap takes unit Caster returns nothing local real AOE = 200+I2R(GetUnitAbilityLevel(Caster,'AHtc')*50)+16 //まず、ユニットグループを作成 local group UnitsAround = CreateGroup() local real X = GetUnitX(Caster) local real Y = GetUnitY(Caster) local unit PickedUnit = null //地点X,Yから、距離AOE以内の全ユニットを、UnitsAround に格納する。 call GroupEnumUnitsInRange(UnitsAround,X,Y,AOE,null) //※ここが重要 loop //UnitsAround内の、一番はじめに登録されてあるユニットを PickedUnit へ格納 set PickedUnit = FirstOfGroup(UnitsAround) //PickedUnit が存在しない、すなわち UnitsAround が空の場合、ループを抜ける exitwhen PickedUnit == null //UnitsAround から、PickedUnit を取り除く。 call GroupRemoveUnit(UnitsAround,PickedUnit) //ここで、Picked Unit について処理を行う。 endloop //グループを解放 call DestroyGroup(UnitsAround) //変数を開放 set UnitsAround = null set PickedUnit = null endfunction 他にも、 call ForGroup(group whichGroup, code callback) を使うという手もあるが、この方法だと引数を渡すことができないので、なにかと不便。 *おまけ [#la9a617e] **関数一覧 [#hb7624c8] ユニットグループに直接関係する、関数の一覧 native CreateGroup takes nothing returns group native DestroyGroup takes group whichGroup returns nothing native GroupAddUnit takes group whichGroup, unit whichUnit returns nothing native GroupRemoveUnit takes group whichGroup, unit whichUnit returns nothing native GroupClear takes group whichGroup returns nothing native GroupEnumUnitsOfType takes group whichGroup, string unitname, boolexpr filter returns nothing native GroupEnumUnitsOfPlayer takes group whichGroup, player whichPlayer, boolexpr filter returns nothing native GroupEnumUnitsOfTypeCounted takes group whichGroup, string unitname, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsInRect takes group whichGroup, rect r, boolexpr filter returns nothing native GroupEnumUnitsInRectCounted takes group whichGroup, rect r, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsInRange takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing native GroupEnumUnitsInRangeOfLoc takes group whichGroup, location whichLocation, real radius, boolexpr filter returns nothing native GroupEnumUnitsInRangeCounted takes group whichGroup, real x, real y, real radius, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsInRangeOfLocCounted takes group whichGroup, location whichLocation, real radius, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsSelected takes group whichGroup, player whichPlayer, boolexpr filter returns nothing native GroupImmediateOrder takes group whichGroup, string order returns boolean native GroupImmediateOrderById takes group whichGroup, integer order returns boolean native GroupPointOrder takes group whichGroup, string order, real x, real y returns boolean native GroupPointOrderLoc takes group whichGroup, string order, location whichLocation returns boolean native GroupPointOrderById takes group whichGroup, integer order, real x, real y returns boolean native GroupPointOrderByIdLoc takes group whichGroup, integer order, location whichLocation returns boolean native GroupTargetOrder takes group whichGroup, string order, widget targetWidget returns boolean native GroupTargetOrderById takes group whichGroup, integer order, widget targetWidget returns boolean native ForGroup takes group whichGroup, code callback returns nothing native FirstOfGroup takes group whichGroup returns unit
タイムスタンプを変更しない
[[トップ>FrontPage]] > [[MAP作成]] > [[トリガーエディタ]] > [[Jass Script]] > [[Jass講座]] > ユニットグループ ~ ~ ユニットグループ/group は、ユニットの集まりを指す変数のこと。ユニットにまとめて命令を出したり、範囲内のユニットを選ぶ等、MAP作りに欠かせない要素だ。 しかし、トリガーエディタで使った場合がそうであるように、ユニットグループはその性質上、&color(red){''メモリリークの温床''};になりうる。正しい使い方を必ずマスターしたい。 &color(red){''Jass NewGenの導入が前提''};です。導入せずとも利用できる内容も一部ありますが、あったほうが断然有利です。 ---- #contents ---- *宣言 [#r28f21fe] ユニットグループを使うには、まず変数に対し、ユニットグループを作成する。 -作成 local group SampleGroup = CreateGroup() ユニットグループを宣言して、空のユニットグループを作成。 この空のグループにユニットを追加して使う。最後には、&color(red){''メモリリークの原因''};になるので必ず破棄すること。 -破棄 //ユニットグループの破棄 call DestroyGroup(group whichGroup) //ユニットグループ変数のnull化も忘れずに。 set SampleGroup = null *ユニットの追加 [#a6b45c0a] ユニットを追加する方法はいくつかある。 -ユニット一体を追加 call GroupAddUnit(group whichGroup, unit whichUnit) -特定のプレイヤーの全ユニットを設定 call GroupEnumUnitsOfPlayer(group whichGroup, player whichPlayer, boolexpr filter returns nothing) -指定した範囲(rect)内の全ユニットを設定 call GroupEnumUnitsInRect(group whichGroup, rect r, boolexpr filter) -地点から、一定距離以内の全ユニットを設定 call GroupEnumUnitsInRange(group whichGroup, real x, real y, real radius, boolexpr filter) ほかにもいろいろ。 *ユニットの削除 [#z4360569] ユニットグループから除外する方法について。あくまでグループから取り除くだけで、ユニットそのものが消えるわけではない。 -ユニット一体を削除 call GroupRemoveUnit(group whichGroup, unit whichUnit) -グループ内の全ユニットを削除 call GroupClear(group whichGroup) ユニットグループを空の状態に戻すだけで、再利用可能。 これらでユニットグループを空にしても、''DestroyGroup'' を呼ぶのを忘れないように。 *使用例 [#qc4caba8] **範囲内のユニットについて処理したい [#s08dbb01] 『範囲内のユニットを選んで○○する』を実装するとき、下の方法がおすすめ。 [[サンプル集>Jass Script/サンプル集]]より、ノックバックからソースを一部転載。 function CastThunderClap takes unit Caster returns nothing local real AOE = 200+I2R(GetUnitAbilityLevel(Caster,'AHtc')*50)+16 //まず、ユニットグループを作成 local group UnitsAround = CreateGroup() local real X = GetUnitX(Caster) local real Y = GetUnitY(Caster) local unit PickedUnit = null //地点X,Yから、距離AOE以内の全ユニットを、UnitsAround に格納する。 call GroupEnumUnitsInRange(UnitsAround,X,Y,AOE,null) //※ここが重要 loop //UnitsAround内の、一番はじめに登録されてあるユニットを PickedUnit へ格納 set PickedUnit = FirstOfGroup(UnitsAround) //PickedUnit が存在しない、すなわち UnitsAround が空の場合、ループを抜ける exitwhen PickedUnit == null //UnitsAround から、PickedUnit を取り除く。 call GroupRemoveUnit(UnitsAround,PickedUnit) //ここで、Picked Unit について処理を行う。 endloop //グループを解放 call DestroyGroup(UnitsAround) //変数を開放 set UnitsAround = null set PickedUnit = null endfunction 他にも、 call ForGroup(group whichGroup, code callback) を使うという手もあるが、この方法だと引数を渡すことができないので、なにかと不便。 *おまけ [#la9a617e] **関数一覧 [#hb7624c8] ユニットグループに直接関係する、関数の一覧 native CreateGroup takes nothing returns group native DestroyGroup takes group whichGroup returns nothing native GroupAddUnit takes group whichGroup, unit whichUnit returns nothing native GroupRemoveUnit takes group whichGroup, unit whichUnit returns nothing native GroupClear takes group whichGroup returns nothing native GroupEnumUnitsOfType takes group whichGroup, string unitname, boolexpr filter returns nothing native GroupEnumUnitsOfPlayer takes group whichGroup, player whichPlayer, boolexpr filter returns nothing native GroupEnumUnitsOfTypeCounted takes group whichGroup, string unitname, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsInRect takes group whichGroup, rect r, boolexpr filter returns nothing native GroupEnumUnitsInRectCounted takes group whichGroup, rect r, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsInRange takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing native GroupEnumUnitsInRangeOfLoc takes group whichGroup, location whichLocation, real radius, boolexpr filter returns nothing native GroupEnumUnitsInRangeCounted takes group whichGroup, real x, real y, real radius, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsInRangeOfLocCounted takes group whichGroup, location whichLocation, real radius, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsSelected takes group whichGroup, player whichPlayer, boolexpr filter returns nothing native GroupImmediateOrder takes group whichGroup, string order returns boolean native GroupImmediateOrderById takes group whichGroup, integer order returns boolean native GroupPointOrder takes group whichGroup, string order, real x, real y returns boolean native GroupPointOrderLoc takes group whichGroup, string order, location whichLocation returns boolean native GroupPointOrderById takes group whichGroup, integer order, real x, real y returns boolean native GroupPointOrderByIdLoc takes group whichGroup, integer order, location whichLocation returns boolean native GroupTargetOrder takes group whichGroup, string order, widget targetWidget returns boolean native GroupTargetOrderById takes group whichGroup, integer order, widget targetWidget returns boolean native ForGroup takes group whichGroup, code callback returns nothing native FirstOfGroup takes group whichGroup returns unit
テキスト整形のルールを表示する