はじめまして
龍神録2プログラミングの館4章
でシーンを戻すときはpopしてやればいいとお聞きしました
例えばGameSceneでEscを押したらTitleSceneに戻すといったことはどうやってやればよいのでしょうか
シーンをpopしたい
Re: シーンをpopしたい
本当にpopすれば済む話ならばpopすればよいではないか,って話になるよ.
一体何が問題なのか? というのを具体的に述べないと.
一体何が問題なのか? というのを具体的に述べないと.
- 「popとは何か」がわからない?
- 「あなたの GameScene 実装部からどこかにあるスタックにpopさせるにはどうすればよいのか」がわからない?
- 「単にpopするだけだと TitleScene に戻らない」といったような問題がある?
- その他?
Re: シーンをpopしたい
オフトピック
そういう話を参考にするときは,話の主たる内容
(この話で言えば,「こいうのって,スタックで管理するという手もあるよね」っていう話)
だけを参考にすればよいのであって,そこに示されている特定の実装例までをもあなたのコードに無理に取り込む必要はないと思うよ.
あなたがやりやすい形で,必要と思う事柄だけを取り入れればよい.
そしたらそんなに「?」は出ないんじゃないかな.
例えば,そのリンク先の実装について,私は
で,次のページに行ってみると,そこでは「mapで文字列をキーにどうの…」とか言い始めてて個人的にはもうその時点で読む気が失せる.
ChageToXXXScene( XXXシーンの開始に必要なもの );
ChangeToYYYScene( YYYシーンの開始に必要なもの );
みたいな素直な形にすれば enum も map もいらなくね? みたく思う.
リンク先の実装をDisっているわけじゃないよ.優れている方法は何かとかそういう話ではなくて,「自分が納得いかないところまで無理に取り入れなくてもよい」=「自分のコードは(自分にとって)いい感じにやればよい」という話ね.
(この例で言えば,私がそこを読んで「スタック」の話について「なるほどなぁ」とか思ったとしても,具体実装は参考にしない.)
(この話で言えば,「こいうのって,スタックで管理するという手もあるよね」っていう話)
だけを参考にすればよいのであって,そこに示されている特定の実装例までをもあなたのコードに無理に取り込む必要はないと思うよ.
あなたがやりやすい形で,必要と思う事柄だけを取り入れればよい.
そしたらそんなに「?」は出ないんじゃないかな.
例えば,そのリンク先の実装について,私は
- 遷移先シーンの指定がemunとか言ってる時点でなんか嫌な感じがする…
- こんなのだと「異なるシーンに対しては当然異なるparameterが必要になり得るのだが?」という点をどうするのかが疑問…
で,次のページに行ってみると,そこでは「mapで文字列をキーにどうの…」とか言い始めてて個人的にはもうその時点で読む気が失せる.
ChageToXXXScene( XXXシーンの開始に必要なもの );
ChangeToYYYScene( YYYシーンの開始に必要なもの );
みたいな素直な形にすれば enum も map もいらなくね? みたく思う.
リンク先の実装をDisっているわけじゃないよ.優れている方法は何かとかそういう話ではなくて,「自分が納得いかないところまで無理に取り入れなくてもよい」=「自分のコードは(自分にとって)いい感じにやればよい」という話ね.
(この例で言えば,私がそこを読んで「スタック」の話について「なるほどなぁ」とか思ったとしても,具体実装は参考にしない.)
Re: シーンをpopしたい
…なので,
> 2.「あなたの GameScene 実装部からどこかにあるスタックにpopさせるにはどうすればよいのか」がわからない?
みたいな状況なのであれば,スタック(あるいはそれを管理している何か)にあなたがアクセスしやすい形で実装すれば良いのだし,
> 3. 「単にpopするだけだと TitleScene に戻らない」といったような問題がある?
みたいな状態なのであれば,単純に,その話ではあなたのやりたいことを素直には実装できない,というだけのことかもしれない.
> 2.「あなたの GameScene 実装部からどこかにあるスタックにpopさせるにはどうすればよいのか」がわからない?
みたいな状況なのであれば,スタック(あるいはそれを管理している何か)にあなたがアクセスしやすい形で実装すれば良いのだし,
> 3. 「単にpopするだけだと TitleScene に戻らない」といったような問題がある?
みたいな状態なのであれば,単純に,その話ではあなたのやりたいことを素直には実装できない,というだけのことかもしれない.
Re: シーンをpopしたい
スタックで管理するのだとして,「別のシーンXXXに行く」というのが,
とか,そういう話がもっと先に書いてあるのだろうか?(私はわざわざ確認しないけど,とりあえず先の方を見てみたらどうでしょう? ひょっとしたら,あなたの疑問点に関する説明もあるのかもですし?)
- XXXをpushする
- XXXが出てくるまでpopする
とか,そういう話がもっと先に書いてあるのだろうか?(私はわざわざ確認しないけど,とりあえず先の方を見てみたらどうでしょう? ひょっとしたら,あなたの疑問点に関する説明もあるのかもですし?)
Re: シーンをpopしたい
「解決済み」みたいなのは,ここには存在しない様子です.
---
個人的に,スタックの話は,「タイトル」とか「ゲーム」みたいな大きなシーンの流れに使うのではなく,
もっと細かい箇所(例えば,複数段の選択を行うメニューみたいなのとか)の実装で活きる話かな,とか.
あと,スタックに突っ込まれる側が「俺らはスタックで管理されているから~」とか知らなければならない実装形態なのであれば,苦しいように想像するなぁ.
各シーンは,自身がどこかにあるスタックに積まれる経緯と別のシーンに遷移するために行うべきスタック操作を把握している必要があるんだよね? コレ.
外側の具体実装の都合でしかないハズの話がシーン内側にまで浸透しているのでは,何も分業できていない感.
---
個人的に,スタックの話は,「タイトル」とか「ゲーム」みたいな大きなシーンの流れに使うのではなく,
もっと細かい箇所(例えば,複数段の選択を行うメニューみたいなのとか)の実装で活きる話かな,とか.
あと,スタックに突っ込まれる側が「俺らはスタックで管理されているから~」とか知らなければならない実装形態なのであれば,苦しいように想像するなぁ.
各シーンは,自身がどこかにあるスタックに積まれる経緯と別のシーンに遷移するために行うべきスタック操作を把握している必要があるんだよね? コレ.
外側の具体実装の都合でしかないハズの話がシーン内側にまで浸透しているのでは,何も分業できていない感.
Re: シーンをpopしたい
あるシーンが「自分の上に別のシーンを積みたい」みたいな場合,それはそのシーンの内側で勝手にやれば良い事柄なんじゃないかなぁ.
そういう場合,積む物というのは自身の担う作業領域の一部を切り出したような物になるのだろうし.
そういう場合,積む物というのは自身の担う作業領域の一部を切り出したような物になるのだろうし.
//概念的な疑似コード
class SomeScene
{
private:
class ChildScene { ... };
ChildScene *m_pChildScene = nullptr;
public:
void Update()
{
if( m_pChildScene ) //「自身の上に積んでるもの」があれば
{
if( m_pChildScene->Finished() )
{ delete m_pChildScene; m_pChildScene = nullptr; } //「pop」相当処理
else
{ m_pChildScene->Update( 必要な何か ); return; }
}
...
if( ??? ){ m_pChildScene = new ChildScene( 必要な何か ); } //「push」相当処理
...
}
};
Re: シーンをpopしたい
オフトピック
結果/結論,というか,
「実際にこういう形で取り組んでみたところ,こういうところはやりやすかったけど,この点は苦労した」とか
何かそういう実経験談みたいなのが得られた暁には,それを書いていただきたい.
特に,「これこれこういうことがあるから,おまえが適当に書いてたような話だとかえって面倒なんだよ」みたいな話があったらうれしい.
「実際にこういう形で取り組んでみたところ,こういうところはやりやすかったけど,この点は苦労した」とか
何かそういう実経験談みたいなのが得られた暁には,それを書いていただきたい.
特に,「これこれこういうことがあるから,おまえが適当に書いてたような話だとかえって面倒なんだよ」みたいな話があったらうれしい.