シーンをpopしたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
toukaitetudou

シーンをpopしたい

#1

投稿記事 by toukaitetudou » 2年前

はじめまして
龍神録2プログラミングの館4章
でシーンを戻すときはpopしてやればいいとお聞きしました
例えばGameSceneでEscを押したらTitleSceneに戻すといったことはどうやってやればよいのでしょうか

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: シーンをpopしたい

#2

投稿記事 by usao » 2年前

本当にpopすれば済む話ならばpopすればよいではないか,って話になるよ.
一体何が問題なのか? というのを具体的に述べないと.
  1. 「popとは何か」がわからない?
  2. 「あなたの GameScene 実装部からどこかにあるスタックにpopさせるにはどうすればよいのか」がわからない?
  3. 「単にpopするだけだと TitleScene に戻らない」といったような問題がある?
  4. その他?

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: シーンをpopしたい

#3

投稿記事 by usao » 2年前

オフトピック
そういう話を参考にするときは,話の主たる内容
(この話で言えば,「こいうのって,スタックで管理するという手もあるよね」っていう話)
だけを参考にすればよいのであって,そこに示されている特定の実装例までをもあなたのコードに無理に取り込む必要はないと思うよ.
あなたがやりやすい形で,必要と思う事柄だけを取り入れればよい.
そしたらそんなに「?」は出ないんじゃないかな.

例えば,そのリンク先の実装について,私は
  • 遷移先シーンの指定がemunとか言ってる時点でなんか嫌な感じがする…
  • こんなのだと「異なるシーンに対しては当然異なるparameterが必要になり得るのだが?」という点をどうするのかが疑問…
…みたく感じた.
で,次のページに行ってみると,そこでは「mapで文字列をキーにどうの…」とか言い始めてて個人的にはもうその時点で読む気が失せる.
ChageToXXXScene( XXXシーンの開始に必要なもの );
ChangeToYYYScene( YYYシーンの開始に必要なもの );
みたいな素直な形にすれば enum も map もいらなくね? みたく思う.

リンク先の実装をDisっているわけじゃないよ.優れている方法は何かとかそういう話ではなくて,「自分が納得いかないところまで無理に取り入れなくてもよい」=「自分のコードは(自分にとって)いい感じにやればよい」という話ね.
(この例で言えば,私がそこを読んで「スタック」の話について「なるほどなぁ」とか思ったとしても,具体実装は参考にしない.)

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: シーンをpopしたい

#4

投稿記事 by usao » 2年前

…なので,

> 2.「あなたの GameScene 実装部からどこかにあるスタックにpopさせるにはどうすればよいのか」がわからない?

みたいな状況なのであれば,スタック(あるいはそれを管理している何か)にあなたがアクセスしやすい形で実装すれば良いのだし,

> 3. 「単にpopするだけだと TitleScene に戻らない」といったような問題がある?

みたいな状態なのであれば,単純に,その話ではあなたのやりたいことを素直には実装できない,というだけのことかもしれない.

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: シーンをpopしたい

#5

投稿記事 by usao » 2年前

スタックで管理するのだとして,「別のシーンXXXに行く」というのが,
  • XXXをpushする
  • XXXが出てくるまでpopする
のどっちでなければならないのか? っていうのを誰が判断するのだろうか…?
とか,そういう話がもっと先に書いてあるのだろうか?(私はわざわざ確認しないけど,とりあえず先の方を見てみたらどうでしょう? ひょっとしたら,あなたの疑問点に関する説明もあるのかもですし?)

toukaitetudou

Re: シーンをpopしたい

#6

投稿記事 by toukaitetudou » 2年前

usaoさん

#4の>2.が大変わかりやすく参考になりましたありがとうございます
個人的にこのシーン管理が気に入ってるのでこれはこのまま続けようと思っています
メモとして少し

コード:

looper* looper_ptr;//looper.pop()はpopする関数

class Scene
{
void esc()
{
looper_ptr->pop();//こんな感じでいけた
}
}

toukaitetudou

Re: シーンをpopしたい

#7

投稿記事 by toukaitetudou » 2年前

すみません
どうやって解決済みにするんでしょうか

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: シーンをpopしたい

#8

投稿記事 by usao » 2年前

「解決済み」みたいなのは,ここには存在しない様子です.

---

個人的に,スタックの話は,「タイトル」とか「ゲーム」みたいな大きなシーンの流れに使うのではなく,
もっと細かい箇所(例えば,複数段の選択を行うメニューみたいなのとか)の実装で活きる話かな,とか.

あと,スタックに突っ込まれる側が「俺らはスタックで管理されているから~」とか知らなければならない実装形態なのであれば,苦しいように想像するなぁ.
各シーンは,自身がどこかにあるスタックに積まれる経緯と別のシーンに遷移するために行うべきスタック操作を把握している必要があるんだよね? コレ.
外側の具体実装の都合でしかないハズの話がシーン内側にまで浸透しているのでは,何も分業できていない感.

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: シーンをpopしたい

#9

投稿記事 by usao » 2年前

あるシーンが「自分の上に別のシーンを積みたい」みたいな場合,それはそのシーンの内側で勝手にやれば良い事柄なんじゃないかなぁ.
そういう場合,積む物というのは自身の担う作業領域の一部を切り出したような物になるのだろうし.

コード:

//概念的な疑似コード
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」相当処理
    ...
  }
};

toukaitetudou

Re: シーンをpopしたい

#10

投稿記事 by toukaitetudou » 2年前

わかりましたありがとうございます

とりあえず解決したということでよろしくお願いします

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: シーンをpopしたい

#11

投稿記事 by usao » 2年前

オフトピック
結果/結論,というか,
「実際にこういう形で取り組んでみたところ,こういうところはやりやすかったけど,この点は苦労した」とか
何かそういう実経験談みたいなのが得られた暁には,それを書いていただきたい.

特に,「これこれこういうことがあるから,おまえが適当に書いてたような話だとかえって面倒なんだよ」みたいな話があったらうれしい.

返信

“C言語何でも質問掲示板” へ戻る