<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[gamestate klasse als zeiger]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich schreibe gerade eine GameState Klasse für mein SFML Projekt und stehe gerade auf den Schlauch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Mein Ziel ist es jeder State eine ID zu vergeben:</p>
<pre><code>StateManager sm;
sm.add( states::id::menu, std::unique_ptr&lt; State &gt;( new Menu() ) );
sm.add( states::id::game, std::unique_ptr&lt; State &gt;( new Game() ) );
</code></pre>
<p>Mein Problem ist das ich nicht alle State Klassen sofort initialisieren will, bei der Eintragung soll nur festgelegt werden welche Klasse eine ID zurückgibt.</p>
<p>Die State soll dann so aufgerufen werden:</p>
<pre><code>sm.push( states::id::menu );
</code></pre>
<p>Zwei Möglichkeiten sind mir eingefallen um das Problem zu lösen:<br />
-nur einen Zeiger übergeben<br />
-eine std::function übergeben</p>
<p>Sind die Ideen gut oder gibt es eine bessere Möglichkeit ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322703/gamestate-klasse-als-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 16:49:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322703.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Jan 2014 21:36:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to gamestate klasse als zeiger on Fri, 03 Jan 2014 21:36:39 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich schreibe gerade eine GameState Klasse für mein SFML Projekt und stehe gerade auf den Schlauch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Mein Ziel ist es jeder State eine ID zu vergeben:</p>
<pre><code>StateManager sm;
sm.add( states::id::menu, std::unique_ptr&lt; State &gt;( new Menu() ) );
sm.add( states::id::game, std::unique_ptr&lt; State &gt;( new Game() ) );
</code></pre>
<p>Mein Problem ist das ich nicht alle State Klassen sofort initialisieren will, bei der Eintragung soll nur festgelegt werden welche Klasse eine ID zurückgibt.</p>
<p>Die State soll dann so aufgerufen werden:</p>
<pre><code>sm.push( states::id::menu );
</code></pre>
<p>Zwei Möglichkeiten sind mir eingefallen um das Problem zu lösen:<br />
-nur einen Zeiger übergeben<br />
-eine std::function übergeben</p>
<p>Sind die Ideen gut oder gibt es eine bessere Möglichkeit ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374975</guid><dc:creator><![CDATA[exploit126]]></dc:creator><pubDate>Fri, 03 Jan 2014 21:36:39 GMT</pubDate></item><item><title><![CDATA[Reply to gamestate klasse als zeiger on Fri, 03 Jan 2014 21:48:31 GMT]]></title><description><![CDATA[<p>Eine std::function zu übergeben wäre natürlich ein schneller Fix, aber wozu das ganze enum-Getue?</p>
<pre><code class="language-cpp">sm.emplace&lt;Menu&gt;();
</code></pre>
<p>finde ich genauso kurz und es ist um einiges flexibler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374979</guid><dc:creator><![CDATA[plenker]]></dc:creator><pubDate>Fri, 03 Jan 2014 21:48:31 GMT</pubDate></item><item><title><![CDATA[Reply to gamestate klasse als zeiger on Sat, 04 Jan 2014 08:37:44 GMT]]></title><description><![CDATA[<blockquote>
<p>Eine std::function zu übergeben wäre natürlich ein schneller Fix, aber wozu das ganze enum-Getue?</p>
</blockquote>
<p>Ich habe noch nie eine GameState geschrieben und finde im Internet kein gutes Beispiel( c++11 und SFML ). Deswegen habe ich angefangen meine eigene zu schreiben.</p>
<pre><code>#ifndef STATEMANAGER_H
#define STATEMANAGER_H

#include &lt;memory&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

template&lt; class T &gt;
class StateManager
{
    public:
        StateManager( T ptr );

        void change( T ptr );

        void push( T ptr );

        void pop();

        void clear();

        void draw();

        void handleEvents();

        void update();

        void manageAction();

        bool empty();

    private:
        std::vector&lt; T &gt; stateStack;
};

template&lt; class T &gt;
StateManager&lt;T&gt;::StateManager( T ptr )
{
    stateStack.push_back( std::move( ptr ) );
}

template&lt; class T &gt;
void StateManager&lt;T&gt;::change( T Ptr )
{
    pop();
    push( std::move( Ptr ) );
}

template &lt; class T &gt;
void StateManager&lt;T&gt;::push( T ptr )
{
    stateStack.push_back( std::move( ptr ) );
}

template &lt; class T &gt;
void StateManager&lt;T&gt;::pop()
{
    stateStack.pop_back();
}

template&lt; class T &gt;
void StateManager&lt;T&gt;::clear()
{
	stateStack.back()-&gt;clear();
}

template &lt; class T &gt;
void StateManager&lt;T&gt;::draw()
{
    stateStack.back()-&gt;draw();
}

template&lt; class T &gt;
void StateManager&lt;T&gt;::handleEvents()
{
    stateStack.back()-&gt;handleEvents();
}

template &lt; class T &gt;
void StateManager&lt;T&gt;::update()
{
    stateStack.back()-&gt;update();
}

template&lt; class T &gt;
void StateManager&lt;T&gt;::manageAction()
{
    stateStack.back()-&gt;manageAction(*this);
}

template&lt; class T &gt;
bool StateManager&lt;T&gt;::empty()
{
    return stateStack.empty();
}
#endif // STATEMANAGER_H
</code></pre>
<pre><code>#ifndef STATE_H
#define STATE_H

#include &quot;StateManager.h&quot;
#include &lt;memory&gt;

class State
{
    public:
        typedef std::unique_ptr&lt; State &gt; Ptr;

        void changeState( StateManager&lt; Ptr &gt;&amp; sm, Ptr p );

        void pushState( StateManager&lt; Ptr &gt;&amp; sm, Ptr p );

        void popState( StateManager&lt; Ptr &gt;&amp; sm );

		virtual void clear() = 0;

        virtual void draw() = 0;

        virtual void handleEvents() = 0;

        virtual void update() = 0;

        virtual void manageAction( StateManager&lt; Ptr &gt;&amp; sm ) = 0;

        virtual ~State();

};
</code></pre>
<p>Ich wollte versuchen mit enums die manageAction Funktion zu ersetzen, damit die State nicht vollen Zugriff auf den StateManager hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375021</guid><dc:creator><![CDATA[exploit126]]></dc:creator><pubDate>Sat, 04 Jan 2014 08:37:44 GMT</pubDate></item><item><title><![CDATA[Reply to gamestate klasse als zeiger on Sat, 04 Jan 2014 13:09:17 GMT]]></title><description><![CDATA[<p>exploit126 schrieb:</p>
<blockquote>
<p>Ich habe noch nie eine GameState geschrieben und finde im Internet kein gutes Beispiel( c++11 und SFML ).</p>
</blockquote>
<p>Im <a href="http://www.packtpub.com/sfml-game-development/book" rel="nofollow">SFML-Buch</a> wird so eine State-Architektur Schritt für Schritt hergeleitet. Wenn du das Buch nicht kaufen willst (das E-Book gibts momentan fast umsonst), kannst du auch den zugehörigen <a href="https://github.com/LaurentGomila/SFML-Game-Development-Book" rel="nofollow">Source-Code auf GitHub</a> anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375052</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 04 Jan 2014 13:09:17 GMT</pubDate></item></channel></rss>