トップページ > 記事閲覧
書籍のサンプルの改良途中で…
名前:ちょび 日時: 2019/09/18 00:38

こんばんは。自分はただいま14歳からはじめるc言語わくわくゲームプログラミング教室 visual studio 2013編 の5章の横スクロールのサンプルの項を進めているのですが P222〜P223間の天井の判定を記述すると、「移動キーを押しながら壁に触れている状態でジャンプしようとすると、天井判定が反応してしまい上に飛び上がれない(移動キーを押さなければジャンプ可能)」、 「ジャンプ途中、または落下中に移動キーを押しながら壁に触れていると、非常にゆっくりと落下しだす(NEWスーパーマリオで壁に触れながらずり落ちてる時の様な感じ、これも移動キーを離せばストンと落ちるのですが…)」 という問題が発生しています。天井判定をコメントアウトすると上記の問題は消えるのですが、P220の補正が働いて天井をすり抜けてしまうようになります。 やはり横スクロールというもののジャンル上、このような挙動は操作してて気持ちが悪いので何とか改良したくて試行錯誤していたのですが、いかんせんうまくいかずに困っています。 何とか天井判定を残しながら上記の問題を解決する条件式や処理などの案はありませんか?良ければお力添えをお願いしたいです。よろしくお願いいたします。
メンテ

Page: 1 |

Re: 書籍のサンプルの改良途中で… ( No.1 )
名前:管理人 日時:2019/09/18 23:56

書籍のプログラムでは、キッチリと 『キャラ画像の左上端にブロックがあるか』 『キャラ画像の右上端にブロックがあるか』 で、頭を天井にぶつけているかを判定しているので、 『壁にぴったりくっついた状態で右移動しつつジャンプ』をすると 1フレーム後は右に3ピクセル移動(60fps換算)した状態( 壁にめり込んだ状態 )での判定が行われ、 『壁に当たっていると同時に頭も天井にぶつけている』と判定されてしまいます 簡単な解決方法は gamemain.cpp の CheckBlock 関数の以下の部分 result.UL = _CheckBlockSub(x, y); result.UR = _CheckBlockSub(x + IMG_CHIPSIZE - 1, y); を result.UL = _CheckBlockSub(x + 8, y); result.UR = _CheckBlockSub(x + IMG_CHIPSIZE - 1 - 8, y); このように、キッチリ左上端・右上端を調べるのではなく、キャラが1フレームに 移動する距離より内側の位置で天井の判定を行う方法です これだけで1フレームで3ピクセルぶんプレイヤーキャラが左右に移動した状態で天井判定しても 『天井に頭をぶつけている』という判定にはなりません よろしければお試しください
メンテ
Re: 書籍のサンプルの改良途中で… ( No.2 )
名前:ちょび 日時:2019/09/19 11:35

>>管理人様 素早い対応ありがとうございます! 早速試してみます!
メンテ
Re: 書籍のサンプルの改良途中で… ( No.3 )
名前:ちょび(解決) 日時:2019/10/23 22:02

返信が遅くなってしまいすみません。 上記のアドバイス通り書き換えたところ壁、天井判定がきれいに動作するようになりました! また何かあれば質問させていただこうと思います。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存