<?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[Wechsel von Gamestates führt zu Absturz]]></title><description><![CDATA[<p>Guten Abend zusammen!</p>
<p>Ich bin seid ein paar Tagen dabei, mich anhand eines Tutorials in C++11 mit SFML 2.1 einzuarbeiten. Soweit klappt das alles auch sehr gut, nur bin ich jetzt bei einem Punkt angelangt, bei dem ich nicht mehr weiter komme.<br />
Folgendes Problem:<br />
Ich schreibe ein Spiel ähnlich dem klassischen Pong. Dabei wird ein Hauptmenü implementiert. Um zwischen Hauptmenü und Spiel wechseln zu können, wird eine abstrakte Klasse erstellt namens Gamestate. So, wenn ich kompiliere und starte, dann sehe ich das Hauptmenü mit Spiel starten und Spiel beenden. Beende ich das Spiel, sehe ich auf meinem Terminal die Nachricht, die ich dem Destruktor der MainMenu-Klasse gegeben habe. Klicke ich auf Spiel starten, sehe ich logischerweise ebenfalls den Mainmenu-Destruktor aber auch den eigentlich Spiel-Destruktor.<br />
Führe ich das Programm direkt im Spiel-Gamestate aus, so sehe ich die ersten obligatorischen Padels und den Ball, welche ich implementiert habe.<br />
Ich verstehe aber nicht, warum ich nicht über das Hauptmenü in mein Spiele-Gamestate gelange. Kann da jemand drüberschauen?<br />
Das wäre sehr nett!</p>
<p>Noch ein paar Infos:<br />
OS: Arch Linux x64<br />
IDE: Geany<br />
SFML: 2.1<br />
GCC-Syntax: g++ -pthread -std=c++11 -Wall -o &quot;%e&quot; &quot;%f&quot; Playstate.cpp MainMenuState.cpp Game.cpp -lsfml-audio -lsfml-graphics -lsfml-window -lsfml-system<br />
Link zum Quellcode: <a href="http://www.file-upload.net/download-9764541/CyberPong.zip.html" rel="nofollow">http://www.file-upload.net/download-9764541/CyberPong.zip.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/328855/wechsel-von-gamestates-führt-zu-absturz</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 05:33:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328855.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Oct 2014 18:14:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wechsel von Gamestates führt zu Absturz on Wed, 29 Oct 2014 18:14:51 GMT]]></title><description><![CDATA[<p>Guten Abend zusammen!</p>
<p>Ich bin seid ein paar Tagen dabei, mich anhand eines Tutorials in C++11 mit SFML 2.1 einzuarbeiten. Soweit klappt das alles auch sehr gut, nur bin ich jetzt bei einem Punkt angelangt, bei dem ich nicht mehr weiter komme.<br />
Folgendes Problem:<br />
Ich schreibe ein Spiel ähnlich dem klassischen Pong. Dabei wird ein Hauptmenü implementiert. Um zwischen Hauptmenü und Spiel wechseln zu können, wird eine abstrakte Klasse erstellt namens Gamestate. So, wenn ich kompiliere und starte, dann sehe ich das Hauptmenü mit Spiel starten und Spiel beenden. Beende ich das Spiel, sehe ich auf meinem Terminal die Nachricht, die ich dem Destruktor der MainMenu-Klasse gegeben habe. Klicke ich auf Spiel starten, sehe ich logischerweise ebenfalls den Mainmenu-Destruktor aber auch den eigentlich Spiel-Destruktor.<br />
Führe ich das Programm direkt im Spiel-Gamestate aus, so sehe ich die ersten obligatorischen Padels und den Ball, welche ich implementiert habe.<br />
Ich verstehe aber nicht, warum ich nicht über das Hauptmenü in mein Spiele-Gamestate gelange. Kann da jemand drüberschauen?<br />
Das wäre sehr nett!</p>
<p>Noch ein paar Infos:<br />
OS: Arch Linux x64<br />
IDE: Geany<br />
SFML: 2.1<br />
GCC-Syntax: g++ -pthread -std=c++11 -Wall -o &quot;%e&quot; &quot;%f&quot; Playstate.cpp MainMenuState.cpp Game.cpp -lsfml-audio -lsfml-graphics -lsfml-window -lsfml-system<br />
Link zum Quellcode: <a href="http://www.file-upload.net/download-9764541/CyberPong.zip.html" rel="nofollow">http://www.file-upload.net/download-9764541/CyberPong.zip.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424741</guid><dc:creator><![CDATA[b0ney]]></dc:creator><pubDate>Wed, 29 Oct 2014 18:14:51 GMT</pubDate></item><item><title><![CDATA[Reply to Wechsel von Gamestates führt zu Absturz on Wed, 29 Oct 2014 18:58:54 GMT]]></title><description><![CDATA[<pre><code>if(bStartGameSelected)
{
	game.ChangeState(Game::gameStates::PLAY);
}

if(bQuitGameSelected)
{
	game.window.close();
	game.running = false;
}
</code></pre>
<p>Kann es evtl. sein, dass beide Selected-Bools zur selben Zeit true sind? Teste das mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424753</guid><dc:creator><![CDATA[Singender Holzkübel]]></dc:creator><pubDate>Wed, 29 Oct 2014 18:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to Wechsel von Gamestates führt zu Absturz on Wed, 29 Oct 2014 19:17:51 GMT]]></title><description><![CDATA[<p>Ich habe aus dem zweiten if einfach ein else if gemacht und jetzt funktioniert es!</p>
<pre><code>if(bStartGameSelected)
{
	game.ChangeState(Game::gameStates::PLAY);
}

else if(bQuitGameSelected)
{
	game.window.close();
	game.running = false;
}
</code></pre>
<p>Allerdings frage ich mich, warum das bei zwei if nicht funktioniert... müsste doch eigentlich auch funktionieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2424757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424757</guid><dc:creator><![CDATA[b0ney]]></dc:creator><pubDate>Wed, 29 Oct 2014 19:17:51 GMT</pubDate></item><item><title><![CDATA[Reply to Wechsel von Gamestates führt zu Absturz on Thu, 30 Oct 2014 03:24:24 GMT]]></title><description><![CDATA[<p>Du initialisierst <code>bStartGameSelected</code> und <code>bQuitGameSelected</code> nicht. Deshalb</p>
<p>ISO/IEC 14882:2011 (n3337) schrieb:</p>
<blockquote>
<p>§8.5.11 <strong>If no initializer is specified for an object, the object is default-initialized;</strong> if no initialization is performed, an object with automatic or dynamic storage duration has indeterminate value. [...]</p>
</blockquote>
<p>werden sie default-initialized, was</p>
<p>ISO/IEC 14882:2011 (n3337) schrieb:</p>
<blockquote>
<p>§8.5.6 To default-initialize an object of type T means:<br />
— if T is a (possibly cv-qualified) class type (Clause 9), the default constructor for <code>T</code> is called (and the initialization is ill-formed if <code>T</code> has no accessible default constructor);<br />
— if T is an array type, each element is default-initialized;<br />
<strong>— otherwise, no initialization is performed.</strong></p>
</blockquote>
<p>bedeutet.<br />
Die beiden booleans haben also den Wert, der zufällig an der Speicherstelle steht, an der sie zu liegen kommen. Das ist mit viel größerer Wahrscheinlichkeit != 0 also <code>true</code> . Was passiert, wenn im folgenden beide <code>bool</code> s <code>true</code> sind?</p>
<pre><code class="language-cpp">bool a = true;
bool b = true;

if(a)
{
    game.ChangeState(Game::gameStates::PLAY);
}

if(b)
{
    game.window.close();
    game.running = false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2424767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2424767</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 30 Oct 2014 03:24:24 GMT</pubDate></item></channel></rss>