やってるゲームとかの雑記

とりあえず演出関連を大分詰めました。
スポンサーサイト
コメント
この記事へのコメント
このコメントは管理人のみ閲覧できます
2015/07/29(水) 16:38 | | #[ 編集]
このコメントは管理人のみ閲覧できます
2015/07/29(水) 18:16 | | #[ 編集]
>  解説を頼りに色々と弄ってみたのですがこれがどうにもうまくいきません。
>  そこで、もしお時間に余裕のある時で良いのでどう間違っているのか製作中のキャラのCNSを見てやってもらえませんでしょうか?


中身拝見させていただいたんですが一二三のCNSですと前提はあくまで「行きと帰りの枚数が同じ」ことなので、
そのまま書いてもおそらく正常に動作することはないと思います。
ややこしい記述をできるだけ省き、かつ行きと帰りの枚数を変えたい場合はこんな感じで書いてみてはいかがでしょう。


[State 2200]
・ロープ投擲の予備動作アニメ
・animtime=0で2201へ

[State 2201]
・ロープ投擲後、ロープが伸びていく間本体が投げたポーズで止まっているアニメ×ロープのコマ数
・全フレームにロープの先端部分が来るであろう場所に攻撃判定をつける
・ロープの先端のX座標をコマ毎に本体Varに格納します
・→ロープが空振り(animtime=0)のままだったら引き戻しの2202ステートへ
・→Hitdefでヒットしたら2203へ飛ばします

[State 10000]
・このヘルパーは完全に伸びていくロープの見た目だけ(エフェクト)を担当させます
・親(Parent)のステートが2201でなくなったら破壊
・同期が心配ならParent,var(ロープの先端のX座標)を見てchangeanimとelemで1コマ1コマ
 同期されるように設定してもOKです

[State 2202]
・ロープが戻ってくるまでのアニメーションです
・失敗して戻ってくるロープ(10001)とコマ数・時間を合わせます
・animtime=0でctrl=1に戻します

[State 11001]
・失敗した場合に戻ってくるロープのアニメです
・こちらは別に具体的な処理をしているわけではないのでこちらもエフェクト扱いのヘルパーでOKです
・ロープが最後まで当たらなかった=最大まで伸びているのでアニメは最初から再生でOKです

[State 2203]
・ロープが相手にヒットした場合の処理です
・こちらはヒットして引き戻すロープのアニメと同じ絵のコマを増やしてコマ数を合わせます
・ここからは相手を引っ張り寄せていきます
・上でロープ先端のX座標を変数に格納しているので、time=0でchangeanimとelemを使って
 相手がいるX座標に応じて自分のアニメを頭出しします(見た目は同じなので見た目にはわかりません)
・":="を使った代入処理で自分のコマ毎に相手がいるべき場所を本体変数(相手がいるべき場所)に格納します
・targetbindでpos = var(相手がいるべき場所),0とすることで本体変数(相手が居るべき場所)の位置に相手を移動させます
・敵を直近まで引き寄せたら自分は2204へ、相手は特殊なくらいステートへ移行させます

このステートではロープを投げる時と同じ要領でロープのヒット~戻りコマ数と合わせます。
枚数ではなく先端のX座標を使って一手間増やしているのは以前のコメントで仰っていた
行きと帰りのロープのアニメ枚数が違う事に対応するためです。

[State 10002]
・ヒットして戻ってくるステート用のロープ(縮む)のアニメです
・↑のステートとコマ数・時間を合わせるだけでも簡易的な実装としてはOKですが、
 ここでも同じく心配であればparent,var(相手がいるべき場所)を見ながらchangeanimのelemオプションを使って
 コマ数がずれた時でも同期するようにしておけば良いかと思います。

[State 2204]
・成功した後の予備動作
・短めの硬直アニメ、相手は特殊なくらい状態なので有利が取れる!
・Animtime=0で終了、Ctrl=1
2015/07/30(木) 23:53 | URL | くんしょうも #-[ 編集]
さらに詳しい解説ありがとうございます。
state11001まで解説のおかげでできあがりました。
でもstate2203で躓いてしまっています。
targetbindでpos = var(相手がいるべき場所),0に設定しているつもりなのですがどうしても自キャラとかさなってしまうのです。
おそらく・ロープの先端のX座標をコマ毎に本体Varに格納します の部分ができていないのだと思うのですが・・・
triggerにposなどを追記すればよいのでしょうか?
そしてstate2203の
・上でロープ先端のX座標を変数に格納しているので、time=0でchangeanimとelemを使って
 相手がいるX座標に応じて自分のアニメを頭出しします(見た目は同じなので見た目にはわかりません)
・":="を使った代入処理で自分のコマ毎に相手がいるべき場所を本体変数(相手がいるべき場所)に格納します という文は
[State 10002,指定の長さで固定]
type = changeanim
trigger1 = time = 0
trigger1 = var(0) = 1
trigger1 = var(2) := 34
value = 2204
elem = 34

・targetbindでpos = var(相手がいるべき場所),0とする は
[State 2205, TargetBind]
type = TargetBind
trigger1 = 1
time = 1
pos = var(2),0
という記述でよいのでしょうか?
うまくいかないので何かが間違っているのはわかるのですが・・・
2015/07/31(金) 19:48 | URL | K #-[ 編集]
[State 2203]
type = varset
trigger1 = animelem = 1
trigger1 = var(相手がいるべき場所):= ロープの最初のX座標
trigger2 = animelem = 2
trigger2 = var(相手がいるべき場所):= ロープの2枚めのX座標
      …
triggerN = Var(相手がいるべき場所):= ロープの再到達点のX座標

ちょっと不細工な記述ですが座標を手打ちして試してみてください。
(ロープの伸びていく長さがきっちり同じなら計算式を使うこともできます)

↑の方法を使うと常に変数にロープ先端の座標が入るので、
 このステートからHitdefで移動した時にはヒットした場所のX座標が入るはずです。


次に、戻りのステートですが枚数が違っても「同じ長さのロープ」のコマがあるはずです。
そのコマから戻していけばOK…なのですが、ここでもヘルパーに処理を依存すると面倒が生じるので
戻るロープのヘルパーと同じ枚数のアニメを本体に用意しておきます。

[State 2203,戻しアニメの開始位置をずらす]
type = changeanim
trigger1 = var(相手がいるべき場所) = 一番伸びた時のX座標
anim = 2203
elem = 1
(中略)
[State 2203,戻しアニメの開始位置をずらす]
type = changeanim
trigger1 = var(相手がいるべき場所) = ロープの全到達距離の真ん中ぐらい
anim = 2203
elem = 真ん中あたりの枚数
(中略)
[State 2203,戻しアニメの開始位置をずらす]
type = changeanim
trigger1 = var(相手がいるべき場所) = ロープがヒットする最短距離
anim = 2203
elem = 最後

上で取得した座標を元に手打ちで戻しアニメの開始位置を割り出します。
これで2203の指定した枚数からアニメが始まり、擬似的に相手にヒットしたところから
戻しアニメを始める処理を作ることができます。

ここに更に相手を「見た目上ヒットした位置で拘束されはじめ、引っ張られてもらう」必要があります。
何回もTargetbind書くと修正がめんどくさいので変数をもう一個使って処理します。

[State 2205,引っ張られる相手の座標用変数代入]
type = varset
trigger1 = animelem = 1
trigger1 = var(相手の位置固定用) := 再到達点
 …
triggerN = var(相手の位置固定用):= 真ん中ぐらい
 …
triggerN = var(相手の位置固定用) := 最短距離

[State 2205, TargetBind]
type = TargetBind
trigger1 = 1
time = 1
pos = var(相手の位置固定用),0

最後のTargetbindのトリガーはベースになる変数が常に変動するようにしたので1(常時)でOKです。
とまあ、こんな感じで出来るのではないかと思うのですが…どうでしょう?
2015/08/01(土) 22:24 | URL | くんしょうも #-[ 編集]
このコメントは管理人のみ閲覧できます
2015/08/02(日) 00:52 | | #[ 編集]
すいません、前回の説明で根本的なミスがありました(汗
変数代入用のステコンはvarsetにしてしまうとパラメータが設定されていない(正しい格好になっていない)ので
エラーで弾かれてしまうと思います

:=を使って座標を変数に代入したりしていたステートの
type = varset のところを type = nullにしてみてください(何もしないというステコンです)
これでもトリガーの部分は読み込まれますが、パラメータを持たない空のステコンなので
パラメータ未設定のエラーは消えると思います!
2015/08/04(火) 22:36 | URL | くんしょうも #-[ 編集]
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://midorinobiotop.blog.fc2.com/tb.php/2099-a60ca626
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック