「砂場ページ」の編集履歴(バックアップ)一覧はこちら
「砂場ページ」(2015/11/08 (日) 01:52:40) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
----
*ページ編集の練習・確認用ページ
-メモ帳などで書いたデータの確認とかに。
-大事なデータはここで保管しない。
//なるべくここ上はいじらない。ここから下は好きにいじる
----
//
戻る→[[SC-/Projectile]]・[[Helper技術]]
----
*■更新Proj型・Projectile更新方式
[[SC-/Projectile]]を1Fずつ更新する方式。
短い通称は無いがここでは''更新Proj''、もしくは''2FProj''と称する。
基本的には[[Helper>Helper技術]]から使う。
毎F更新するためProjectileの欠点である''更新できない''点は解消できる。
:基本的な原理|
''1.1Fだけ判定を持った2Fだけ残るProjを射出する。''(基本Helperから)
''2.そのProjが残っている場合、Projを再発射しつづける。''
以下詳しく
-攻撃判定開始のタイミングで最初の1Fだけ判定をもった[[SC-/Projectile]]を射出する。
--[[アニメ定義>File-/Airファイル]]では最初の1Fに攻撃判定があれば良い。
--その際''ProjRemovetime=1''とする。これにより次のフレームまで残る。
--PauseTimeの自分側は0とする?
--※ProjRemoveTimeでの消滅は''残り時間が無くなった次のフレームの最後''のため&br()ProjRemoveTime=1設定ならステート内換算で2F分残る。
--※攻撃の判定はProjRemoveTimeで指定した時間分のみ。
-次のフレームで射出したProjが残存している場合、''再度Projを発射する''。
--命中すると、命中フレーム時点で消滅するため更新も終わる。
-Projの消滅を確認後、親の動作を終了(Helperなら消滅させる)
攻撃判定のみならoffset=(vel X),(Vel Y)で速度分位置補正だけする。
独立飛び道具ならOffsetを更新ごとに調整し、飛んでいるように見せる。
-独立飛び道具型で表示をOwnPal=0にしたい場合は[[SC-/Explod]]を同じ座標へ重ねる。
--Explodを重ねると命中消滅は1F遅れるが、それは通常のHelper型飛び道具と同様。
:主な利用方法|
&b(){攻撃判定をProjにし、[[SC-/ReversalDef]]を無効化する。}
-アニメには最初のフレームに判定だけつけ画像は基本的につけない。
-基本的に[[SC-/Helper]]の飛び道具と組み合わせて使う。
--[[Target]]が本体管理になるためヒットカウントリセットバグが起きない。
--[[Juggle]]の管理も本体基準のためJuggle値での制限が可能になる。
-本体へPauseTimeが適応できないため、本体での使用は特殊な場合に限る。
-別々の相手への時間差の複数ヒットが管理できない。
--一段型の飛び道具なら問題ないが連続ヒットタイプでは若干挙動が違う。
&b(){[[SC-/Helper]]からProjの座標を管理し単一のHelperで大量の飛び道具を管理する。}
-アニメには判定と画像を付ける。画像をExplod化するなら画像は別アニメに。
-攻撃判定Proj化と同じメリットがある。
-Helperから管理することでProjのみではできない挙動を行わせる事が可能。
-[[SC-/Helper]]には固定の上限数があるがProjはいくらでも増やせる。
--これにより大量の特殊な挙動をする飛び道具を実現できる。
-特殊な管理にすれば常駐させたHelperを使い回すこともできる。
:注意点|
[[SC-/Projectile]]などの注意点も参照。
-Projectileの向きは''進行方向向き固定''なので向きの管理には注意
-Proj,Explodは[[SC-/AngleSet]]のように回転させることができない。
--回転させたいなら回転用のアニメを別途登録する必要がある。
-[[SC-/HitDef]]と[[SC-/Projectile]]では一部ヒットの管理が異なる。
--HitDefでは時間を置いても一回の指定で複数の相手へヒットするが、
--Projでは指定回数分しかヒットせず、&br()時間を置いてヒットしていない相手にヒットさせることは通常できない。
後なんだろ…
----
**■射出条件記述について
※記述については検証不足。ミスあるかも※
:ProjIDについて|
Projを再射出する際[[root,>リダイレクト]][[NumProjID(xxx)>T-//NumProjID()]]=1で判定を行うため、
他管理のProjとIDが重複してしまうと上手く処理を行うことができない。
-全て本体管理のため別々のHelperからでもProjIDが同じだと重複してしまう。
-ProjIDは重複することが無いよう(xx00+[[ID>T-/ID]])などで管理すること。
-単一Helperから複数Projを出す場合は、xx00のxx桁部分で区別する。
-なお[[T-/ID]]の値は上限が無いため+100や+200と言った数値になる可能性もある。
--そうした高い数値になっても重複しないように気をつけること
--本体などから''固定のProjID''で射出するProjのProjIDは&br()''IDを足して使うProjIDよりも低い数値に''すること。
:■Helperの攻撃判定差し替え用・HitDef→Projへの差し替え|
type=HitDefをtype=Projectileにするというタイプの例
※''画像はHelper側で表示し、Projのアニメは攻撃判定のみにすること''
※''PauseTimeの自分側は0に変えること''
ヒットポーズの動作停止を再現したい場合[[T-/ProjContactTime()]]の条件で
基本処理を止め、[[SC-/PosFreeze]]を実行するなど''自前で処理を停止させる''と良い。
#aa(){
;出来れば入れておいた方がいいパラメータ
ProjEdgeBound = 1000 ;画面外射程・基本親Helper側で管理するので大きい数値に
ProjHeightBound = -1000,1000 ;画面上下射程
ProjStageBound = 1000 ;ステージ外射程
}
なお[[SC-/HitDef]]を使わないため、[[T-/MoveType]]をAにする必要は無いが
慣例として攻撃Helperは[[T-/MoveType]]はAである方が望ましい。
:■単発・時間経過消滅タイプ|
#aa(){
Type = Projectile ; HitDef
Trigger1 = !Time ;射出開始
Trigger1 = Root,NumProjID(1200 + ID) = 0; 重複を防ぐ
Trigger2 = Time < 180 ;再射出終了タイミング
Trigger2 = Root,NumProjID(1200 + ID) = 1; 再射出
ProjID = 1200 + ID ;★ ProjID
PosType = P1 ;射出位置
Offset = (Vel X),(Vel Y) ;速度補正
ProjAnim = 1201 ;★攻撃判定表示用アニメ
ProjRemoveTime = 1 ;固定
; HitDef用のパラメーターも含めて記述する。
}
:■多段型・時間更新タイプ|
;PauseTimeを再現したい場合は他のステコンへ処理停止記述を入れる事。
#aa(){
Type = Projectile ; HitDef
Trigger1 = ( AnimElem = 2 ) || ( AnimElem = 7 ) || ( AnimElem = 12 );射出タイミング・再射出タイミング
Trigger1 = Root,NumProjID(1300 + ID) = 0; 重複を防ぐ
Trigger2 = Root,NumProjID(1300 + ID) = 1; 再射出
ProjID = 1300 + ID ;★ProjID
PosType = P1 ;射出位置
Offset = (Vel X),(Vel Y) ;速度補正
ProjAnim = 1301 ;★攻撃判定表示用アニメ
ProjRemoveTime = 1 ;固定
; HitDef用のパラメーターも含めて記述する。
}
:■多段型・ヒット数タイプ ※var必須|
;PauseTimeを再現したい場合は他のステコンへ処理停止記述を入れる事。
#aa(){
Type = Projectile ; HitDef
Trigger1 = !Time || Root,ProjContactTime(1400 + ID) > 15 && Var(50) < 3
Trigger1 = Root,NumProjID(1400 + ID) = 0; 重複を防ぐ
Trigger2 = Root,NumProjID(1400 + ID) = 1; 再射出
Trigger3 = Root,ProjContactTime(1400 + ID) = 1 ;命中直後
Trigger3 = var(50) := var(50) + 1 ;ヒットをカウント
trigger3 = 0 ;射出はしない。
ProjID = 1400 + ID ;★ ProjID
PosType = P1 ;射出位置
Offset = (Vel X),(Vel Y) ;速度補正
ProjAnim = 1401 ;★攻撃判定表示用アニメ
ProjRemoveTime = 1 ;固定
; HitDef用のパラメーターも含めて記述する。
}
----
***[[AI技術>AI技術の一覧]]関係について
:■HelperのHitDefをProjへ差し替えた場合の反応用条件記述について|
Helper+HitDefr型である場合[[Helper,>リダイレクト]][[MoveContact>T-/Movecontact]]などで管理できるが、
Projの場合は[[T-/ProjContact]],[[T-/ProjContactTime()]]で管理することになる。
ただし''HelperのIDが分からない場合、ProjIDを指定できない''ため、
-ProjContactime( Helper(xxx),ID+xxx ) = [0,15] ;リダイレクト入りProjID指定
ProjIDを指定したい場合はこうした工夫をすることになるが、
[[リダイレクト]]では''Helperが消えると使えない''ため[[Var]]で管理することになる。
-案.VarへHelperIDを入れておく方式
--発射時にHelperからIDを[[SC-/ParentVarSet]]しする。
--ProjContactime( var(xxx)+xxx ) = [0,15] ;VarでProjID指定
--ヒット情報を正確に認識できるが、''同種複数の飛び道具の管理が困難''となる。
-案.ヒットした情報をVarへ入れる方式
--Projの攻撃がヒットした時点で[[SC-/ParentVarSet]]で情報を伝達する。
--伝達する情報は「ヒットフラグ(要リセット)」が基本だが他にも
--硬直の持続時間を入れて、本体で毎F-1ずつ減らす猶予カウント型なども可能。
なお''細かいヒットを確認する必要がない''のであれば
[[ProjContactime(0)>T-/ProjContactTime()]]=[0,10]などで一括判定してしまうことも可能。
ただ例では16Fまでと指定しているが、実際の硬直時間は
[[T-/GetHitVar()]]で確認するほうが確実。
----
----
*ページ編集の練習・確認用ページ
-メモ帳などで書いたデータの確認とかに。
-大事なデータはここで保管しない。
//なるべくここ上はいじらない。ここから下は好きにいじる
----
//