最速の中のBlog

saisoku.exblog.jp
ブログトップ
2009年 08月 13日

優しくされると泣く~Helperの基本設定~

アラド系mugenキャラ作成の有名な人たちから多大なコールを頂いてしまいましたので、
よりいっそう頑張ろうと思います(`・ω・´)あざあーす!

ところで帰ってきたらでっけーハチが部屋を飛び回ってるんですが(´・ω・`)こえー


さてヘルパーですが、お一方からは具体的な(そして完全な)例とその内容について、
もうお一方からは細かい補足と注意点についていただきました。
これから自分の書いたヘルパーと見比べて、何がおかしいのか詰めて行きたいと思います。


手本、本体ステート
[StateDef 2000] ; ステート頭の定義分
type = S ;いつもの物理状態定義
movetype = A ;いつもの行動状態定義
physics = S ;いつもの重力・摩擦状態定義
anim = 2000 ;アニメ番号
ctrl = 0 ;操作できない

自分の本体ステート
[Statedef 2300]
type = S←立ち状態
movetype = A←攻撃状態
physics = A←重力と摩擦の影響を加味する。N=どちらもなしの方が良い?
juggle = 0←コンボ補正(Hit数)
velset = 0, 0←移動量
ctrl = 0←操作可否。コマンド入力を受け付けてキャンセルさせる場合は違う方法を使ったほうが良いらしい?
anim = 3003←アニメーション番号

飛び道具のPhysicsをAにしていると、強制的に着地ステートに移行してしまうため分身発生するという話があったのでメモ。

別段、おかしな点は見当たらない。


手本、ヘルパー呼び出しのステート
[State 2000, 1]; 飛び道具ヘルパー呼び出し
type = Helper ;ステコン定義分
trigger1 = AnimElem = 2,1 ;トリガー(アニメが2枚目の1フレーム目になったら有効)
name = "CrossMore" ;ヘルパーのデバッグ表示上の名前
stateno = 2050 ;ヘルパーのステート番号
ID = 2050 ;ヘルパーのID番号
size.xscale = 1 ;ヘルパーの横方向の表示倍率
size.yscale = 1 ;ヘルパーの縦方向の表示倍率
postype = p1 ;ヘルパーを表示する位置
ownpal = 1 ;独自パレット持ちますよ
pos = 0,0 ;表示位置を基準にした、登場する座標


自分のヘルパー呼び出しステート
[State 2300,1 ●ヘルパー呼び出し●]←記述ミス [State 2300,1]; ●ヘルパー呼び出し●
#この場合ステート2300番でありながら、2300番を全部実行してから2300,1番を実行?
type = Helper
trigger1 = AnimElem = 1
id = 3005
name = "Razing"
pos = 0,0
postype = p2←動作確認のためp1ではなくp2に設定中
stateno = 3005;指定ステート←ヘルパーのステートNo
helpertype = normal
ownpal = 0 ←独自パレット利用だから1に修正
keyctrl = 0 ←操作不可


ヘルパーの呼び出しステート1文目に重要な文法ミス。コメントアウトされてない。
とりあえずここだけ変えて起動
→特に変わらなかった。このくらいの記述ミスは自動的に解釈しなおしてくれるのかな?
とにかく次。問題ないはずなのに問題だよ\(^o^)/おあた

手本の動作終了ステート
[State 2000, 3]; 動作終了←コンマ3で同じステートでも別に作られてる
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1

[state 2300,;本体動作終了]←コンマの後がないなあ、同じように2300,3を記入してみよう
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1

他は特に修正なし。

こっから手本なヘルパーのターン
[Statedef 2050] ; いつもの
type = A ;いつもの2
movetype = A ;いつもの3
physics = N ;S(地上)だと摩擦がかかる、A(空中)だとPosY>0の時に着地してしまうのでNが都合いい
velset = 0,0 ;速度指定
ctrl = 0 ;操作できませんってば
anim = 7220 ;アニメ番号。今回の場合はエフェクトの登録Air番ですかね
sprpriority = 3 ;表示優先度

[State 2050, 0]; 影を消す/ProjやExplodと違い、Helperは影有がデフォルトなので常時非表示にする
type = AssertSpecial
trigger1 = 1
flag = NoShadow

[State 2050, 1]; ヒット定義
type = Hitdef
trigger1 = Time = 0


うーん、おかしいところはないなあ
Hitdefについてはもう消滅とかそういう部分の話じゃないし・・・

手本の消滅処理
[State 2050, 3]; 消滅処理
type = DestroySelf
trigger1 = AnimTime = 0 ;アニメが1週したら消去
trigger2 = Parent,StateNo != 2000 ;親(キャラ本体)がステ番2000以外に移ったら消去

自分の消滅処理
[State 2300, ステート変更]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1


おかしいなあ
消滅処理についても同じだなあ・・・
本体のアニメーションが変わったときに変更というtrigger2の記述は必要ないし・・・



・・・


[State 2300, ステート変更]←おまえかああああああああ
あすらさんのProj血柱のステート指定してた('A`;)

まあ違ったんですが。
Blogでリアルタイムで比較メモ取るのが面倒くさくなって直接テキストエディタ2つ並べてあちこちいじったら
とりあえずエフェクトは一回りで終了するようになりました。あとはおっぱいおっぱいだけです。

でもどうして終了するようになったか判りません\(^o^)/ばーか


そして比較用にバックアップを作ろうとしたら
間違えて昨日時点のバックアップを本ファイルに保存してしまったのでやり直し。

ぶぁあああああああああか\(゚∀゚)/


[Statedef 3006,3;●ヘルパー終了]←犯人
type = DestroySelf
trigger1 = AnimTime = 0

どうやらこいつを2300に書き直したりしてたみたいですね!

さてあとは本体のおっぱい動作が終了してくれない件についてですが・・・
でついでにアニメーションのタイミングをちょびっといじってポくしてみて気がついたんですが、
どうやらモーションだけでなく、ステートそのものを繰り返しているようです。

つまり延々と血柱を召喚しまくってると。それなんて血柱戦記

なぜかエフェクト再生のタイミングを再度変えようとしたらエラーを吐くようになりましたが、
まあとりあえずヘルパーさんが無事に終了してくれてることだけは判ったので
あとは本体の終了だけとなりました。

・・・ヘルパー召喚と同時にProjectile射出してるからとか・・・?
血柱の土台→Projectile
血柱本体→Helper


#動画見直して気がついたけど、血柱の土台って普通にスクリーン透過でよかったみたいだね!/(^o^)\わざわざイチから描きなおしたのに!


偉い人の消滅補足
で、消滅処理のトリガーですが、AnimTime = 0でも消えない場合は最後のアニメのAir表示時間が
-1だったりすると有効にならない場合があります。体験談ですが。
その場合は-1以外の数値を入れるか、別のトリガー(AnimElemで何枚目の
何フレーム目以降とか)で有効なやつを使うといいかも。

-1を設定した覚えはないけど一応確認してみるか→設定してないみたい
設定してないけどAnimElem指定してみるか→変わらないみたい
↑これを書いてるときに「AnimElmって書いてるじゃんばーかばーか」って思ったけど修正しても変わらなかった


おかしいのうおかしいのう(´・ω・`)

苦し紛れに本体の動作終了について、自分のを削除してお手本をコピペしてみた

→動いた

・・・('A`)ェェエエエエエ工工工工工工工工



Undoして2つを並べてみる

手本
[State 2000, 3]; 動作終了
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1

自分
[state 2300,3;本体動作終了]!?
type = ChangeState
trigger1 = AnimElem = 12 , 5
value = 0
ctrl = 1


最初に気づいて修正したとこじゃん/(^o^)\ばーやばーや


ず、随分てこずらされたものですが・・・これでようやく血柱を完全実装できます。
ついでにヘルパーについてもちょっとわかってきました。
考え方は間違えてなかった。うん、考え方は間違ってなかった。

ただちょっとばかり、これがプログラムなのだということを失念していたのが敗因だったんです。


おまけ:設定する前に、「HelperからProjectileを射出」についてやってみようと思ったんですが
単純に突っ込むだけじゃ動いてくれませんでした。あらら。
別に今は必要ないからいいんですが。
さてここを簡略化というか、私好みに整形してあげないと気がすみません。

Projectileの土台発生を削除して、
ヘルパーが「本体のモーションが0になった瞬間表示」から
「時間経過によって描画濃度が増す」土台を表示、その後「土台のアニメーションがある点を過ぎた時点で血柱を(土台を消さずに)表示」。
これいってみましょう。

ChangeAnimを使ってみる
予想→アニメーションが変更されるので、土台が残らない。

[State 3005,1]
type = ChangeAnim
trigger1 = AnimElem = 4 , 30
value = 3001

結果→アニメーションが変更されるので、土台が残らない。
けいかくどおりてきな。
ていうかまた血柱がループしおったwwwwwwwwwwww


Explodを入れてみる。
予想→表示されるタイミングが血柱本体を呼び出した瞬間になる。血柱本体と土台がきっちり表示される。
[state 3005,1]
type = Explod
trigger1 = Animelem = 1,0
anim = 3000
id = 3000
pos = 0,0
postype = p2
sprpriority = 5
bindtime = 0

結果↓
d0050070_9303738.jpg
d0050070_9341115.gif
どうしてこうなった!どうしてこうなった!
というかまあこれは成功した後にいじってなったのだけれど。
bindtime = -1にしたら正しく表示されるのだけれど、
-1は「ずっとその場に表示する」ということで・・・これアニメーションが終了しても内部的には残ってるのかなあ。


Versetとか使って、[土台のアニメーションがここまで再生されたら本体表示]みたいなのやろうと思ったけどうまくいかない。
また今度考えるとして、とりあえずダミーで固定時間、非表示にしておいてみた。

今日はそんなところで。

お盆忙しい('A`;)   10:07、記。


忘れないうちにメモ。
無敵についてはVarを使ったスイッチでなんとかなるんじゃないのかな。
無敵状態Var(A)を作って、VarAが1以上の時に無敵である、と。
んで1フレームごとに値が減るようにして、0になったらスイッチオフ、みたいな。

これでいけるならレイジ後の無敵持続とかも楽に再現できますよね、きっと。
まあ引数(気を抜くといんすうって読んでしまう)についてはさっぱりだからまた今度なんですが。
[PR]

by goukasoshina | 2009-08-13 06:52 | 最速のmugen


<< シフト      全然よく判りませんねえええええ... >>