坂道の当たり判定を作っています。坂道の当たり判定を作っています。場所はCCollision::CheckMapで合ってると書いたのに。前提から外れたことを同じやり方でやろうとしたらどうなりますかね。そりゃ、バグが発生するわけですね...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。“坂道を実装するには邪魔になりそうな前提条件”は、たぶんkeito94さんが完璧だと思っているところ、にありますよ。坂道の当たり判定を作っています。坂道の当たり判定を作っています。分かっているなら、どこがどうして問題なのか、説明して見せてください。その問題というのは、CheckMapや、マップチップを確認する部分にあります。ブロックを左から何個目にあるかを判定する都合上、動いているブロックやキャラのX座標の位置がずれることが前提の上下の当たり判定で、(今のコードでは)左へ上へ行ってしまうバグが起きてしまうことです。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道を実装するには邪魔になりそうな前提条件は排除していきたいが。坂道の当たり判定を作っています。坂道の当たり判定を作っています。ブロックの座標で当たり判定を実装しようとしています。現在考えているのは、衝突したら一ブロックずらした座標で判定するということです。(キャラの座標が中央基準なので...。)ですが、地上に着地せずにめり込んで左に移動してしまいます。左右の判定は一応完成しました。坂道の当たり判定を作っています。坂道の当たり判定を作っています。ISLeさんのご指摘を受けて、ブロックの単位ではなく、座標で判定して見るようにしてみました。新たなバグが発生してしまいました...。実行すると、着地せずに画面外に落下します。坂道の当たり判定を作っています。坂道の当たり判定を作っています。すいませんでした...。正確には当たり判定のコード自体は完成していたのですが、なかなか理想通りの動きになりません...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。舌の根の乾かぬうちにってやつですね。CPlayer::Moveから除けたいのは、あたり判定(を直接呼び出している)部分。現状、座標補正によって、当たり判定の範囲外に移動するため、フレームごとにCPlayer::GroundFlagのオン/オフが繰り返される状況。キャラの足元にブロックがあるあいだ、CPlayer::GroundFlagがオンのまま維持されて欲しい。たしかにそれは言えている...。たしかにそうなんですよね...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。タイルのサイズは16ピクセルであるのに、-8~8という範囲(=17ピクセル)を使って重要な判定をしている。今の発言を受けて、当たり判定のサイズを変更してみました。坂道の当たり判定を作っています。坂道の当たり判定を作っています。上下の当たり判定で、めり込んで左の壁まで行ってしまいます。後、重力の部分を分割してみました。坂道の当たり判定を作っています。坂道の当たり判定を作っています。No.81で言われた方法にしてみました。着地すると、キャラがぴょんぴょん跳ねる。左の壁に衝突すると、キャラが上に上がる。壁に当たった時、キャラをずらすアルゴリズムの例を上げてくれますか。坂道の当たり判定を作っています。坂道の当たり判定を作っています。キャラが地面にめり込むと地面に触れないぎりぎりの位置に座標補正されます。次のフレームで、それは地上に立っていることになるのでしょうか。なん...だと...。地上にいるというのは振る舞いだけだったのか...。前に一度CCollision::GetMoveからも取り除かれたのに、今は復活してますね。坂道の当たり判定を作っています。坂道の当たり判定を作っています。ちなみに、これが現在のコードです。現在は移動量に依存していた部分を取り除いたところです。実行しても、落下状態にあるので、めり込んでしまいます。CPlayer::GroundFlagはそれが真になっていると、地上にいるかのように振る舞うフラグです。(混乱を招く回答すいません...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。移動量撤廃の方針を続けるならこのトピで続ければよいのでは。ごめんなさい、解決を撤回させてください。この方針を続けようと思います。坂道の当たり判定を作っています。坂道の当たり判定を作っています。オフトピックとんでもない勘違いをしてしまった...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。解決させたのは撤回させてください。移動量撤廃を続けたいと思います。坂道の当たり判定を作っています。坂道の当たり判定を作っています。http://dixq.net/forum/viewtopic.php?f=3&t=19267一からトピックをやり直してみました。これ以降のめり込みなどに関する質問はここに書き込んでください。この件は一応解決とさせていただきます。坂道の当たり判定を作っています。坂道の当たり判定を作っています。コードを上から下になぞるだけでなく、実際に動いているときの流れを意識してください。はーい、わかりました。移動量を使わないめり込み防止について。439移動量を使わないめり込み防止について。お騒がせしてすいません。このトピックでやりたいと思います。Collision.cppの移動量に依存していた部分を排除したまでは良かったのですが、めり込み防止の部分は未完成なので、移動できずに右へキャラが言ってしまいます。そこで、移動量を使わないめり込み防止の方法を教えて下さい。コードについてですが、サンプルコード.zipをプロジェクトに加えるだけでOKです。坂道の当たり判定を作っています。坂道の当たり判定を作っています。#むしろ無限ループを楽しんでください。移動量を使わないでどうやって判定するのか?といういちばんのキモを質問しないのですね。ここまで問題点をピンポイントであぶり出せたのに。ごめんなさい、その質問をしようと思っていたところでした...。間違った理解でコードをいじるからおかしなことになるのと違いますか。ごめんなさい、ちゃんとソースコードをしっかり読んでからやりたいと思います...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。新たなバグを発見しました。地上にいる時は、Y座標の移動量を0にしようとしているつもりなのですが、ブレークポイント無しで実行するとソースコードに書いてあるバグが発生して、地面にめり込んだ状態になります。坂道の当たり判定を作っています。坂道の当たり判定を作っています。CCollisionと言うのは当たり判定の処理を行うクラスです。CPlayer::GroundFlagと言うのは、キャラが地上に居るかどうかを管理する変数です。CPlayerで移動処理をして、CCollisionで当たり判定をチェックします。ジャンプした、もしくは空中にいる時はGroundFlagが偽になります。地上にいる時はGroundFlagが真になります。GroundFlagが真になっている時は落下を行わないはずです。あと、質問用のソースコードをリポジトリに上げてみました。坂道の当たり判定を作っています。坂道の当たり判定を作っています。(プレイヤーキャラ自身が)落下する状態でないから落下しないそれを自分なりに実装してみたのですが、今度はキャラが落下しません。ジャンプすらできません。何か落下する状態を管理する部分にバグが有るようなのですがそれはどこなのでしょうか?オフトピックやっぱりプログラムって大変...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。オフトピックやっぱり自分でプログラムするのっていいもんなんだな...。WinMainのことで訪ねたいことがあります。WinMainのことで訪ねたいことがあります。坂道の当たり判定を作っています。坂道の当たり判定を作っています。僕の頭の中のコードでは、どう頑張っても、めり込み補正の部分とY座標の部分で移動量に頼ってしまいます。移動量に頼らないめり込み防止のサンプルコードをください。今上げたコードでは、常に落下しているので、最終的にはキャラが画面外に移動します。坂道の当たり判定を作っています。坂道の当たり判定を作っています。ISLeさんが考えている当たり判定のアルゴリズムに変えてみました。addxとaddyを0にしないとまともに動作しません。(このステージでは関係ないんですが...。)オフトピックなるほど、こうゆうことだったのか...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。オフトピック今の修正で、坂道の壁としての当たり判定も楽にできるかなって...。今思うとはじめのコードは汚い上に、なんか変な要素満載だったな...。早くに気づいていれば、良かったなと思うこの頃。坂道の当たり判定を作っています。坂道の当たり判定を作っています。ISLeさん、ご指摘ありがとうございます。出力する引数は、ポインタをつけろというわけですね...。あと、入れ子化していた部分を修正しました。坂道の当たり判定を作っています。坂道の当たり判定を作っています。ISLeさんが指摘した、移動先座標での判定の部分を、移動量を足した判定に変更してみました。CheckMapの部分は、addxかaddyのどちらかが、0でなければ正しく動作しない仕様となってます。坂道の当たり判定を作っています。坂道の当たり判定を作っています。して、こうではないのでしょうか?CheckSlopeの部分で座標と移動量を参照しておくように変更しました。坂道の当たり判定を作っています。坂道の当たり判定を作っています。No.57のアルゴリズムをもとにしたソースをCollision.zipに添付します。追記:http://dixq.net/forum/blog.php?u=900&b=6581でISLeさんに指摘されたので、ColSegmentを分離しました。坂道の当たり判定を作っています。坂道の当たり判定を作っています。ごめんなさい、わかりにくかったですね...。1プレイヤーが坂道のところに来たら、坂道のパラメーターを設定します。(坂道の線分を設定する。2坂道のパラメーターをもとにプレイヤーのパラメーターを設定します。(具体的にはSlopeCondというパラメーターで、坂道か天井か、(右方向から見て)上りか下りかをもとにプレイヤーの線分を設定する。3プレイヤーの足元の点(プレイヤーの線分の終点が、)が、坂道の開始地点と終了地点の間にいたら(坂道の線分の間にいれば)、プレイヤーの線分と坂道の線分で当たり判定を行います。坂道の当たり判定を作っています。坂道の当たり判定を作っています。あと、なんとかスパゲッティコードを解消させてみました...。Collision.cppのGetMoveを見ればわかると思いますが、坂道にプレイヤーが居るのなら、ブロックとしての当たり判定を中断させ、坂道の当たり判定へ移行します。GetSlopeでdefaultのところへ来たらそれはブロックとして判定します。昇り降りは、まだ作っておりません。これから質問の答を参照して作りたいと思います。坂道の当たり判定を作っています。坂道の当たり判定を作っています。ログインしたユーザーしか見ることができない場所に書かれた他人の文章を、ログインせず誰でも見ることができる場所に張り付ける行為。すいません、ソースをはっきりさせたいと思います...。http://dixq.net/forum/blog.php?u=900&b=6581のusaoさんの投稿で、アルゴリズムの説明がなされてないと指摘されてたので答えたいと思います。1坂道として判定されたら、坂道の線分を生成する。2プレイヤーの線分を生成する。3プレイヤーの線分の終点が、坂道の線分の間であれば、プレイヤーの線分と坂道の線分で線分の当たり判定を行う。GetNowCount()で取得した数値を時分秒で表示したいそうそう、そういう感じです!!オフトピックゲームづくりの参考にしよう、...っと。坂道の当たり判定を作っています。坂道の当たり判定を作っています。ISLeさん、言い方が悪かったみたいですね...。今書いているコードがスパゲッティコードになってるのは認めます。しても、坂道の当たり判定が、今のしか考えられないので、あなたが考えている方の当たり判定のサンプルコードを提示してください。坂道の当たり判定を作っています。坂道の当たり判定を作っています。http://dixq.net/fourm/blog.php?u=900&b=6581より。そんな基本的なところに気付けないくらいにコードが複雑化している現状がある。わたしはそれを解決するのが急務だと考えた。ええっ!?スパゲッティーコードだったんですか今書いていたコード!?そりゃ解決されないわけだ...。keito94さんはさっさと坂道を実装して終わらせたいと考えている。あればかみ合うはずがないっすね。ほんとそれですよ...。今となってはそりゃそうなっちゃうよな...。反省しています...。追記:ソース元を出しました。GetNowCount()で取得した数値を時分秒で表示したいごめんなさい、質問の意味を間違えてしまいました。hour,minute,secondは、int型だと思います...。オフトピックへにっくすさん、ご指摘ありがとうございます...。GetNowCount()で取得した数値を時分秒で表示したいhourは時間、minuteは分、secondは秒だと思います。追記:しまった、そういうことではないのか...。基本的には、構造体は初期化しておいたほうがいいですよ~。構造体も変数の集まりなので、初期化しておかないと行けないんです。坂道の当たり判定を作っています。坂道の当たり判定を作っています。わたしの書いた文章をちゃんと読みましたか。文字をなぞるだけでなく、意味を理解しましたか。さっきの発言はなかったことにしてください...。軽率かつ思い込みでした...。あの時はつい、Collision.cppは変える必要ないのかと...。理解する気がないと思われるところに、説明を補完する役割としてのサンプルコードを提示する意義を感じませんし、そういうサンプルコードはお望みでありませんよね。いうわけで、あなたが考えている方の当たり判定のサンプルコードを出してください。あなたの発言の意味が飲み込めましたので...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。わたしが違う方法を使うというだけで、間違っているとは言っておりません。わけがわからなくなってしまいました...。(あれで完璧だったつもりなのに...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。Collision.cppの当たり判定は間違っていたのか...。今の言葉でちょっと頭が混乱してしまったので、坂道移動のサンプルコードをくれませんか?それをもとにソースコードを変更したいと思うので...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道の当たり判定を作っています。Y座標を坂道に合わせて移動させるというのはわかったけど...。坂道移動のアルゴリズムがちょっとよくわからないなぁ...。コメントにも書かれてあるように線分の衝突の部分判定のチェックの部分に間違いとかあるのかな...。ついでにちょっと調べてくれませんか?(以下のように修正してください。坂道の当たり判定を作っています。坂道の当たり判定を作っています。myyと言うのはキャラクターの座標です。addyと言うのは、キャラクターの移動量です。あと、purinさんのご指摘に従い、Collision.cppを少し修正してみました。(中身に変わりはありません。)49行目の件はちょっと誤算でしたね...。オフトピックええっ!?Y座標を坂道に合わせて動かせばいいんですか!?ちょっと甘かったです...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。purinさんに言われてマジックナンバーを駆逐し、コメントによる解説を加えたソースを作りました。引き続き、Scene.cppとScene.h以外をプロジェクトに入れてください。オフトピックコメントをたくさん書く...ボクはそれに賛成ですね。坂道の当たり判定を作っています。坂道の当たり判定を作っています。ブログなどでみなさんがそこまで言うのなら、ソースコードを公開しますので、サンプルコード.zipのScene.cppとScene.h以外のソースコードをプロジェクトに追加してください。ブログで聞いた話によると、今のソースコードは色々と改善すべきところがあると思うので、ここで改善案を出していただければ、それを修正すると思います。坂道の当たり判定を作っています。坂道の当たり判定を作っています。あの、ブログ見ましたけど...。移動後の座標ではなく、現在の座標だったのですか!?ボクも気づきませんでした...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。違います違います!!ColSegment自体は正しく動作しています!!そして、修正が一つ...。Layer,SlopeCond);に修正してください...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道の当たり判定を作っています。簡単に説明すると、1坂道のブロックにプレイヤーが入る。(ここはOK)2坂道のブロックの種類を識別する。(i+2を返す部分)3坂道の線分とプレイヤーの線分が設定される。4坂道の線分が、プレイヤーの線分の終点の間なら、線分の判定を行い、線分と衝突していたら、めり込み防止をした座標を返す。5...はずだったのだが、4が誤作動を起こし、その巻き添えで2も誤作動を起こし、普通のブロックとして判定されてしまう。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道の当たり判定を作っています。これは、真になるであろうパラメータを与えても真にならないということですか?そ、そういうことではなくてですね...。坂道のブロックにいると判定されているときに何故か真にならないということです。坂道の当たり判定を作っています。坂道の当たり判定を作っています。座標に内分を引かせて、型を適切なものしたのですが、(CheckSlopeの部分をVector2にしてください)何故か線分の判定が真になりません。坂道のブロックに入った瞬間だけ、i+2になる症状が全く改善しないんですよ...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道判定で座標が修正される。交点ではなく、内分を出力させればいいようですが...。//式自体はあっているが...。レイヤーの数値獲得に原因がありそうだ。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道ブロックに入った瞬間はi+2、そのご0が出力されるということですか?その通りです。;にブレークポイントをつけてindexをウォッチしたなら、スコープを抜けているので値を見ることができません。;を返す場合のindexの値が不定になるということだったり、、、?そりゃそうでしたか...。坂道の当たり判定を作っています。坂道の当たり判定を作っています。i+2を出力した方のindexを調べてみたところ、正しい値が獲得できています。日本語力が低いのでできるだけわかりやすい文章でお願いします^p^;ちょっとわかりにくかったですね...。i+2を出力した後に、坂道のブロックにいるときにはi+2が出力されるはずなのに、何故か0を出力してしまう不具合というのが確認されました。0の部分では、indexの値が獲得されていないのがわかりました。坂道の当たり判定を作っています。坂道の当たり判定を作っています。i+2が出力されたままつもりが、0が出力されてしまうということです。原因はブロックとしての当たり判定にあると思われます。坂道の当たり判定を作っています。坂道の当たり判定を作っています。デバッグして調べてみたところ、purinさんが指摘した部分に間違いはないどころか、GetChipLayerNumが上り坂を示す25行が実行された後に30行が実行されているのを確認しました。あと、GetChipLayerNumを最初のプログラムに追加してみてください。アダルト動画に間違えて登録してしまった友達の話。わかる人がいたら教えてください。アダルト動画に間違えて登録してしまった友達の話。わかる人がいたら教えてください。ワンクリック契約を友人が踏んでしまったようですね。お金はかかっていないのでご安心ください。坂道の当たり判定を作っています。坂道の当たり判定を作っています。デバッグ用に条件式を変数に代入して、それを比較する方式にしてみたところ、式に間違いはないようです。レイヤーの数値を獲得する部分に原因があるようです。最初のプログラムから抜粋。坂道の当たり判定を作っています。坂道の当たり判定を作っています。順番を変えてみてはどうでしょう。言われたとおりにしてみて見ましたが、Y座標に-2が代入されてしまうバグを発見したので、以下のように修正してみました。ついでに、GetXPositionの部分に以下の修正を加えました。//-2を返したら、ブロックとして扱う。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道の当たり判定を作っています。坂道の当たり判定を作っています。purin52002さん、いつもお世話になっております。自分でデバッグして、原因を突き止めてから、自分で症状を改善させましたが、まだ完成ではありません。0)のところへ来ないで、ブロックとして扱われてしまうからです。坂道の当たり判定を作っています。坂道の当たり判定を作っています。