autoはあまり使ったことがなく、あまり使い慣れていません。書き方について確認します。今までと変わらず使用できるという認識でよろしいのでしょうか?オフトピックすいません、std::make_unique<>はC++14からでした。make_shared<>を使用した方がよい理由はこちらをご覧ください。スマートポインタはブロックを抜けたらデストラクタが呼び出されてメモリを開放してしまいます。実際に試せばわかると思いますが、コンストラクタを抜けた時点で無効なポインタになり、セグメンテーション違反を起こします。わたしもよくやらかしていました。どこからautoが出てきたのかわかりません。pSome;と書けばよいのではないでしょうか。m_Now;};のように使っているのですが、これ、問題ないですかね?テキストファイルだけできず、困っています。書き換えたらいいんでしょう?どのような問題があるのでしょうか?もう少し具体的にお願いします。今回の質問で、h2so5さんのおかげで初めてスマートポインタについて知りました。探り探り使っている状態です。この機会に知れるのなら使い方を知りたいので、よければ教えてください。通さないでそのまま渡します。基本的にconstを付けます。イメージとしてはこんな感じです。ステージ間ワープを作りましたが、自信がないので見てください。4年前どのような問題があるのでしょうか?もう少し具体的にお願いします。すいません説明不足でした。下の画像のような感じでステージのオブジェクトが下にずれるんですよね。青いのが本来の位置で、上に重なった赤いのがずれたやつです。ステージ間ワープを作りましたが、自信がないので見てください。ステージ間ワープを作りましたが、自信がないので見てください。さんが書きました:どのような問題があるのでしょうか?もう少し具体的にお願いします。すいません説明不足でした。下の画像のような感じでステージのオブジェクトが下にずれるんですよね。青いのが本来の位置で、上に重なった赤いのがずれたやつです。レイヤーごとにファイルを読む際に、コード://一枚目のレイヤー0000000000/*←この辺から二枚目のレイヤーとして読み込んでる?*/00000//二枚目のレイヤー000000010000000こんな感じでずれちゃってるんじゃないかなと思います実際に数値を出力しておかしな所があるか確認しましたか?「思います」との発言から実際にデバッグしていないものと判断しましたが、もしそうならフォーラムルールにある丸投げに当たるのではないでしょうか。ステージ間ワープを作りましたが、自信がないので見てください。4年前No.15の最初に書いたのですが、コンテキストとしてインターフェースを引っ張ってくるのは、『異なるオブジェクトの干渉』を処理する機能を呼び出すため、です。エネミーオブジェクトそのものにアクセスしたいなら直接アクセスすれば良いのですから、GetEnemyContextはほとんど意味がないとは思いませんか。#実装を隠すラッパとしての使い道は同様にありますが、それこそ文脈が違います。わたしが説明していることは、3Dさんが提案していることを、より柔軟に実装できるようにする方法です。インターフェースを引っ張ってくるコードがコンテキストを表現します。コンテキストで「何に対して」を表し、メソッド(メンバ関数)で「何をする」かを表す文章になります。同じ名前のメソッドでも、コンテキストによって文脈が変わります。コンテキストは文脈なのです。コードとしても読みやすくなります。ステージ間ワープを作りましたが、自信がないので見てください。当たった対象の種類(普通の地面、水)に合わせてプレイヤーの挙動が変わるのでこうしてます。3Dさんの提案は、m_pinter->GroundHit(当たった対象の種類)がtrue,falseに切り替わる、更新をstageのupdateで行い、その結果をプレイヤーで受け取るという認識なんですが、それだと返される結果、ゲッターで受ける戻り値が地面の種類ごとに必要になりませんか?そんな疑問を抱いています。誤解していたらごめんなさい。いう仕様だったのですか。行けない場所はみな同じ挙動すると勝手に思い込んでいました。bool型で受け取るようにしていました。いう場合、わたしならビット演算を使用し、https://ideone.com/Tqaa0Yのようにします。コードを貼ると長くなるのでideoneでの実行結果とコードをご覧ください。このやり方だと、Getterは種類ごとに必要なくなり、一つのGetterで済みます。結局、何とぶつかったという判定処理は書く必要がありますが・・・。キャラの振る舞いと世界のルールは分けるべきです。対象が何であろうが、キャラにとって、進めない場所は進めない場所でしかないのです。「水中だから」と「浮力が掛かる」は分けて考えます。キャラ自身が、ここは水中だから、という判断はせず水中かどうかは上位のオブジェクトが判定しキャラが知るべきなのは浮力が掛かった振る舞いをすべきかどうかだけ。しておけば、キャラの実装には何も手を付けずに、無重力空間を追加することもできます。スイッチ等を押したら無重力になるといった変化も、キャラが判断する必要ありません。ステージ間ワープに関しても同様。ワープポイント以外にも、敵の魔法とかでランダムにワープさせられる、といった演出も、キャラのコードを変更せずに可能です。ステージ間ワープを作りましたが、自信がないので見てください。「水中だから」と「浮力が掛かる」は分けて考えます。(ステージ『水中』に当たっていたら){Set_PlayerState(浮力がかかってる);//プレイヤーの状態を『浮力がかかってる』に}2その状態に合わせてプレイヤーが行動をする。(状態が『浮力がかかってる』なら){ふわふわさせる;}ということですよね?間違ってるなら指摘お願いします。ステージ間ワープを作りましたが、自信がないので見てください。いうことですよね?間違ってるなら指摘お願いします。そこらへんをどう設計するかがプログラミングで最も重要なところです。キーコンフィグがあると右キーの実体は分からないし、キーでもパッドでも操作できるとすると複数対応あるし、リプレイ機能だと実際にキーやボタンは押されないけど押されたことにする。間接的な繋がりなら、結び付けるのも、切り替えるのも、容易です。以前3Dさんの立てたトピックでもそんなやりとりがありましたね。ステージ間ワープを作りましたが、自信がないので見てください。4年前キーコンフィグがあると右キーの実体は分からないし、キーでもパッドでも操作できるとすると複数対応あるし、リプレイ機能だと実際にキーやボタンは押されないけど押されたことにする。キーコンフィグを作ってました。それでこれからISLeさんがおっしゃった仕様に変更しようとしています。そこで昔から抱えていた悩みがまた顔を出しました。それは、プレイヤーの状態遷移です。状態が増えに増えた今では、この状態の時は走っちゃいかんよなという『走っちゃいけない状態』が増えに増えまして以下のように膨れ上がりました。R_RUN;break;}うわっはあああいやあああああはああああああああああんといった感じです。switch~if文まみれはいけない。状態遷移をググれば必ずと言っていいほど出てくる言葉です。するか?そこで出てきたのがデザインパターンの一つ「STATEパターン」を使おうぜ!という話。僕が状態遷移について調べた際に出たサイトでは大体そういう話が出てきました。State{}//それの継承このように状態ごとにクラスを作ろうぜって話(あくまで僕の認識)です。万能というわけでもないんですよね。State{}//それの継承こういった感じで走っちゃいけない状態を素直に派生していったらと考えたらぞっとします。それにこのままだと単に各状態をクラス化しただけです。state;//状態遷移}}結局、if構文じゃないですか!!ああああああああもういやあああああああああああ!!!!以下の質問でもSoftyaさんがおっしゃってます。見降ろし2Dゲームの操作キャラの状態遷移http://dixq.net/forum/viewtopic.php?f=3&t=16396デザインパターンもそうですが、開発性やメンテ性を上げるのが目的ですので、やり過ぎると逆効果になります。逆効果な状態になってるんじゃないかなと自身で感じます。しよう?というところで詰まってます。みなさんならここからどうされますか?よければ教えてください。実際に数値を出力しておかしな所があるか確認しましたか?「思います」との発言から実際にデバッグしていないものと判断しましたが、もしそうならフォーラムルールにある丸投げに当たるのではないでしょうか。ほんとうに丸投げにはしたくないのですが、会話の流れでつい甘えが出るのか、ついアホなことを言ってしまいます。3Dさん、ごめんなさい。この質問がいわゆる『丸投げ』になるようでしたら、悩み自体には全く返答しなくても構いません。返答がなかったら丸投げになってるんだなと判断して、自分でちゃんと考えます。何でこんなこと言うかというと、今回の悩み自体が難しすぎて、どう質問したらいいのかぶっちゃけよくわからない状態だからです。どの段階で聞いていいかわからないというか。『答えてやってもいいけど仕様とか現段階のコードとかいろいろ情報足らんわ』ということでしたら情報を答えます。ステージ間ワープを作りましたが、自信がないので見てください。ステージ間ワープを作りましたが、自信がないので見てください。何をどうしたいのかいまいちわからないのですが.すいません......1入力によってプレイヤーの状態を変えたい。「右キーを押したら走れ!」という命令を送る感じ2その入力の際の、命令による状態遷移を、プレイヤー側でどう処理するか?プレイヤーがジャンプ中に、「右キーを押したら走れ!」と言われても、宙に浮いてるので走れないじゃないですか。変わるとしてもまあ右向きに寄るぐらい?だから、その状態にとって変われる状態と、変われない状態があると思うんです。RUN(走り状態)という状態は、N(立ち状態)とJUMP(ジャンプ状態)、この二つに変われるが、JUMPは、Nに変われるが(地面に触れた際)、RUNには変われないとか、でそういった状態遷移を、どう管理するかで悩んでいる状態です。R_RUN;break;}}if(右キーが押されたら){Set_PlayerState_Run();//走る}こう状態遷移命令関数というのでしょうか?プレイヤーの状態、それのセッターを用意して、それを各入力時に使用、その際の状態遷移はセッター内で行うというもの。それだと状態ごとにcaseを用意することになって、すべての状態分、用意したセッター内が、switchまみれになって大変にならない?ということで3それを解消するためにいろいろ調べた結果、Stateパターンに行きつく。Stateパターンを使って、各状態をクラスにしたとしても、状態が多くて管理するの大変だし、もし状態クラス内部で『どの状態なら遷移できるか?(上記のswitch文)』などの状態遷移処理を書く場合、結局ifとかswitchになりませんか?という疑問が湧く。タイトル画面の時の状態遷移と違って、状態の数も多く、それらが常に関わり合ってる(この状態の時はその状態にならない。)もんだから頭がこんがらがり始めてしまう。4それで、もっと調べてみるとStateパターンをただ使うだけでは危険という情報も出てくる。したらいいんだろう......と4の状態質問した感じです。状態遷移表[今の状態][操作入力];みたいな.そうですねいったん整理してみます。ステージ間ワープを作りましたが、自信がないので見てください。実際の動作と状態遷移は切り離します。ステージ間ワープを作りましたが、自信がないので見てください。ステージ間ワープを作りましたが、自信がないので見てください。4年前usaoさんのおっしゃっている「表」というのは、データテーブル(あるいは単にテーブル)といってとても多用されます。ゲームプログラムの内部的な動作はテーブルの参照と状態の更新だけと言っても過言ではないです。テーブルもこの掲示板で話題になったことがあるので過去ログを探せば参考になる情報が見付かるかもしれません。No.24に書いたように、キャラに与える命令を「ルール」、実際の変化を「振る舞い」として分離させます。この概念はあらゆる場所に適用できます。基本的に、命令と状態のインデックスでテーブルを参照し、そこから新しい状態を持ってくるだけです。キャラオブジェクトに命令を与える(アクションを要求する)メソッドはひとつあれば良い。「ルール」と「振る舞い」をきちんと整理すればプログラムには基本的にswitchは必要ありませんし、ifすらも必要ありません。ステージ間ワープを作りましたが、自信がないので見てください。4年前ステートパターンに関して。ステートパターンは、継承によりオブジェクト自身がステートとなるパターンです。現在のキャラのインスタンスに対して「ジャンプしろ」と要求したら、『ジャンプした状態のオブジェクト』が生成されて返ってきて、前のオブジェクトは捨てて次からは新しいオブジェクトを使う、という感じの使い方をします。ゲームキャラでそんな実装したらプログラマは死ねます。使いどころとしてはフレームワークの一部とかですかね。ステージ間ワープを作りましたが、自信がないので見てください。基本的に、命令と状態のインデックスでテーブルを参照し、そこから新しい状態を持ってくるだけです。大体の考え方が分かってきました。テーブルの概念は、昔ISLeさんにクォーターの八方向の移動を作る際に教わったので大体わかります。あの時はありがとうございました。1;/*ここで『キャラオブジェクトに命令を与える(アクションを要求する)メソッド』を使う。ステージ間ワープを作りましたが、自信がないので見てください。4年前ゲームキャラでそんな実装したらプログラマは死ねます。使いどころとしてはフレームワークの一部とかですかね。ステージ間ワープを作りましたが、自信がないので見てください。さんが書きました:実際に数値を出力しておかしな所があるか確認しましたか?「思います」との発言から実際にデバッグしていないものと判断しましたが、もしそうならフォーラムルールにある丸投げに当たるのではないでしょうか。ほんとうに丸投げにはしたくないのですが、会話の流れでつい甘えが出るのか、ついアホなことを言ってしまいます。3Dさん、ごめんなさい。この質問がいわゆる『丸投げ』になるようでしたら、悩み自体には全く返答しなくても構いません。返答がなかったら丸投げになってるんだなと判断して、自分でちゃんと考えます。何でこんなこと言うかというと、今回の悩み自体が難しすぎて、どう質問したらいいのかぶっちゃけよくわからない状態だからです。どの段階で聞いていいかわからないというか。『答えてやってもいいけど仕様とか現段階のコードとかいろいろ情報足らんわ』ということでしたら情報を答えます。一応現状のソースコードを貼っていただきたいです。時間が作れましたら動作の確認をします。ちなみに、イマダニさん自身はデバッグしましたか?デバッグを行ったなら、その結果も教えてくだい。Data;前にも書きましたが、ここはstd::vector<>やstd::list<>などを使うべきでしょう。それとも、std::unique_ptr<>で持たなければならない理由でもあるのでしょうか。オフトピック今回の悩み自体が難しすぎて、どう質問したらいいのかぶっちゃけよくわからない状態だからです。「なぜ違った数値が入っているのかが分かりません。ステージ間ワープを作りましたが、自信がないので見てください。一応現状のソースコードを貼っていただきたいです。時間が作れましたら動作の確認をします。忙しい中、ありがとうございます。周りにプログラマーの友人もいないので見ていただけるのはほんとうに助かります。ちなみに、イマダニさん自身はデバッグしましたか?デバッグを行ったなら、その結果も教えてくだい。今はISLeさんやusaoさんのアドバイスをもとにコードをガンガン書きなおしているので、いったんファイル読み込みのほうは後回しにしている状態です。それが終わり次第デバッグを行い、結果報告の際に、出来上がったコードをzipファイル形式で貼ろうと思います。ステージ間ワープを作りましたが、自信がないので見てください。今はISLeさんやusaoさんのアドバイスをもとにコードをガンガン書きなおしているので、いったんファイル読み込みのほうは後回しにしている状態です。それが終わり次第デバッグを行い、結果報告の際に、出来上がったコードをzipファイル形式で貼ろうと思います。判断されているのではないでしょうか。実際に動かしていないので勘です。・・・と前の投稿で書けばよかったですね、すいません。ステージ間ワープを作りましたが、自信がないので見てください。こんな感じでしょうか?それはユーザー入力の変換テーブルですね。ゲーム内のオブジェクトで定義する仮想のアクションを元に、振る舞いを変化No.34でやってるのは1です。やりたいことは1から3の一連の流れ(特に3)なのでは。わたしは3のつもりでテーブルの話をしてました。ひとつのテーブルですべて処理できるわけでなく、個々にテーブルを経ていきます。何度も書いている「ルール」と「振る舞い」の分離で設計や実装に柔軟性が生まれます。キャラの振る舞いをユーザーの入力(の仕様)に直結すれば、ユーザー入力がないとテストもできなくなります。開発効率が激しく低下します。No.29でイマダニさんが書いている「立ち状態」。文字通り「状態」です。それはキャラの振る舞いのひとつ。あれば、「立ち状態」になる外部要因は何か。それを整理して、アクションをひとつだけ定義してください。先回りしておくと「地面に触れる」というのは要因であってアクションではありません。要因がなくてもアクションできるようにするのがゲームプログラムの効率の良い作り方のひとつです。ステージ間ワープを作りましたが、自信がないので見てください。何度も何度も詳しい説明ありがとうございます。説明された以上、ちゃんと理解するのが礼儀だと思うので、もう一度、理解できてるかの確認お願いします。No.29でイマダニさんが書いている「立ち状態」。文字通り「状態」です。それはキャラの振る舞いのひとつ。振る舞い:立ち状態であれば、「立ち状態」になる外部要因は何か。先回りしておくと「地面に触れる」というのは要因であってアクションではありません。外部要因:地面に触れている。それを整理して、アクションをひとつだけ定義してください。外部要因:地面に触れている。