ページ 11

モーションの再描画

Posted: 2011年12月18日(日) 18:04
by コレジャナイ
再び失礼致します。
前回同様SLGでの質問なのですが、モーションの再描画についてです。

現在の描画方法はY軸を0から始め、for文によって順々にマップの値によって描画していっております。
その座標にキャラが居れば、キャラ描画関数へ座標を送り描画といった形です。

この状態で移動モーションに取り掛かっていたのですが、現在↑の作業を終えた後に移動モーションを描画してしまってます。
そのため移動しているキャラだけ他の何よりも手前に表示されてしまい、段差など色々とおかしな表示となってしまいました。

これの対策として移動中のキャラよりも座標として下に位置しているものをモーション中に再描画していくという形で対応しました。
これによりわずかな違和感はあるものの、何とかなっていました。


しかし現在攻撃モーション実装に伴って、この方法ではやはり不味いなと思い至りました。

というのも攻撃の際、攻撃側、被弾側、投擲物(無い場合もありますが)の三種のモーションを取り入れなくてはならないため、上記の再描画方式ではいささか無理があるような気がしています。

それでも三種の座標一番上の物から再描画 二番目のモーションを描画後、その座標位置から再描画 ry と力技でごり押すことも出来そうではありますが・・・、今後を考えるとやはりこの描画方法はソースコードの無駄に他ならないと思います。


そこで一般的にSLGのモーション描画の仕組みはどのようになっているのかご存知の方いらっしゃれば教えて頂けると助かりますm(_ _)m

Re: モーションの再描画

Posted: 2011年12月18日(日) 18:16
by softya(ソフト屋)
モーション・移動・当たり判定などの処理は描画と分離して先に処理して下さい。
最後にまとめてマップ・キャラ・エフェクトを奥から順番に描画するのが定番です。

[追記]
定番の書き方については
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/
で色々と説明されています。

d.1 メイン関数の作り方
d.2 複数のファイルにわけてコンパイルする
d.3 ゲームの設計と分割コンパイル(1)
d.4 ゲームの設計と分割コンパイル(2)
d.5 ゲームの設計と分割コンパイル(3)

Re: モーションの再描画

Posted: 2011年12月19日(月) 01:30
by コレジャナイ
>>ソフト屋さん
失礼致しました。
こちら側の説明不足です。

関数自体はMapとDrawで分けております。
もう覚えてらっしゃらないかもしれませんが、かなり前に分割の重要性を教えて頂いたので感謝しております。


奥から描画という事はやはり移動の際はキャラ描画の段階で座標をずらしていかないと不味いという事ですね・・・。
これは完全に最初の設計を失敗してしまいました・・・。


これ以上教えて頂く事は難しそうなので、一旦これで解決とさせて頂きます。

Re: モーションの再描画

Posted: 2011年12月19日(月) 09:12
by softya(ソフト屋)
>奥から描画という事はやはり移動の際はキャラ描画の段階で座標をずらしていかないと不味いという事ですね・・・。

と言うより計算の段階でモーションや座標や描画順番まで決めてしまうべきです。
描画は描画順番に描画するだけという鉄則を守っていれば問題は起きないはずです。

Re: モーションの再描画

Posted: 2011年12月20日(火) 03:28
by コレジャナイ
あぁなるほど、描画関数で計算しとりました。
これ以上進める前にここで質問して良かった・・・。
助かりました!