<?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[Anfänger-Frage: Pointer-list auf eine list?]]></title><description><![CDATA[<p>Hallo liebes Forum,</p>
<p>ich mache mich jetzt unbeliebt und stelle mal ganz naiv meine erste Frage - sorry, bin noch C++-Anfänger und hab noch keinen Mentor/&quot;Mensch, dem ich dumme Fragen stellen kann&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Medieninformatik-Studium fängt bald an, und ich will mich schonmal vorab 'n bisschen schlauer machen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Vorab:<br />
Ich tüftele gerade an einem Jump'n'Run, meine Frage ist aber denk ich doch zu allgemein für die Gaming Corner...</p>
<p>Folgende Überlegung:<br />
Sämtliche Objekte in dem Game (Spieler, Gegner, &quot;feste&quot; Umgebung -&gt; alles Einzel-Sprites) werden praktisch gleiche Eigenschaften und Fähigkeiten haben, folglich habe ich auch nur eine Klasse GameObject. Die packe ich in eine list&lt;GameObject&gt;, die pro Level natürlich einmal geleert und befüllt (per XML-Datei) wird - also 1. Liste leeren, 2. Level laden.</p>
<p>Ich hab also den Vorteil (so denk ich mir das zumindest), dass ich einfach eine Schleife durchlaufen und alles für alle Objekte in einem Rutsch durchführen kann.</p>
<p>Jetzt würde ich natürlich ganz gerne auch mal eine Unterauswahl (z.B. Gegner) durchlaufen lassen bzw. bestimmte Objekte auch bei ihrem Namen nennen. Und da war meine (vielleicht auch bescheuerte) Idee, weitere Listen mit Pointern auf die &quot;AlleGameObjects&quot;-Liste zu erstellen. (aus den Listen wird während des Spiels auch nix rausgelöscht - müssen also nur einmalig abgeglichen werden)</p>
<p>Lange Rede, wenig Sinn - kann man das so machen? Oder ist das doch eine total schwachsinnige Idee?</p>
<p>Wie gesagt, bin noch Anfänger - ich hoffe, man verzeiht mir, wenn ich totalen Blödsinn schwafele. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> <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/topic/282783/anfänger-frage-pointer-list-auf-eine-list</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 23:39:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282783.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Feb 2011 14:48:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfänger-Frage: Pointer-list auf eine list? on Sat, 26 Feb 2011 14:48:06 GMT]]></title><description><![CDATA[<p>Hallo liebes Forum,</p>
<p>ich mache mich jetzt unbeliebt und stelle mal ganz naiv meine erste Frage - sorry, bin noch C++-Anfänger und hab noch keinen Mentor/&quot;Mensch, dem ich dumme Fragen stellen kann&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Medieninformatik-Studium fängt bald an, und ich will mich schonmal vorab 'n bisschen schlauer machen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Vorab:<br />
Ich tüftele gerade an einem Jump'n'Run, meine Frage ist aber denk ich doch zu allgemein für die Gaming Corner...</p>
<p>Folgende Überlegung:<br />
Sämtliche Objekte in dem Game (Spieler, Gegner, &quot;feste&quot; Umgebung -&gt; alles Einzel-Sprites) werden praktisch gleiche Eigenschaften und Fähigkeiten haben, folglich habe ich auch nur eine Klasse GameObject. Die packe ich in eine list&lt;GameObject&gt;, die pro Level natürlich einmal geleert und befüllt (per XML-Datei) wird - also 1. Liste leeren, 2. Level laden.</p>
<p>Ich hab also den Vorteil (so denk ich mir das zumindest), dass ich einfach eine Schleife durchlaufen und alles für alle Objekte in einem Rutsch durchführen kann.</p>
<p>Jetzt würde ich natürlich ganz gerne auch mal eine Unterauswahl (z.B. Gegner) durchlaufen lassen bzw. bestimmte Objekte auch bei ihrem Namen nennen. Und da war meine (vielleicht auch bescheuerte) Idee, weitere Listen mit Pointern auf die &quot;AlleGameObjects&quot;-Liste zu erstellen. (aus den Listen wird während des Spiels auch nix rausgelöscht - müssen also nur einmalig abgeglichen werden)</p>
<p>Lange Rede, wenig Sinn - kann man das so machen? Oder ist das doch eine total schwachsinnige Idee?</p>
<p>Wie gesagt, bin noch Anfänger - ich hoffe, man verzeiht mir, wenn ich totalen Blödsinn schwafele. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> <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/2026844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026844</guid><dc:creator><![CDATA[Gnarz-Farz]]></dc:creator><pubDate>Sat, 26 Feb 2011 14:48:06 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger-Frage: Pointer-list auf eine list? on Sat, 26 Feb 2011 14:58:05 GMT]]></title><description><![CDATA[<p>Wenn du abgeleitete Klassen für Gegner, Spieler, Projektile, Landschaftsobjekte etc. hast, warum speicherst du sie nicht direkt in verschiedenen Containern?</p>
<pre><code class="language-cpp">std::vector&lt;Gegner&gt; gegner;
std::vector&lt;Projektil&gt; projektile;
...
</code></pre>
<p>Alles in einen Container zu packen läuft bei Dingen wie Kollision, wo zwei Objekte involviert sind, auf mühsame Fallunterscheidungen hinaus – oder auf Dynamic Dispatch, was auch nicht gerade trivial ist. Oft ist es besser, man kennt die Typen zur Kompilierzeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026847</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 26 Feb 2011 14:58:05 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger-Frage: Pointer-list auf eine list? on Sat, 26 Feb 2011 15:03:38 GMT]]></title><description><![CDATA[<p>Wenn du die Objekte nicht als Pointer in die Vektoren steckst sondern als Objekte, dann kann es dir (bei weiterem Einfügen von mehr Objekten) passieren das diese später nicht mehr über denselben Pointer erreichbar sind</p>
<pre><code class="language-cpp">#include &lt;vector&gt; 
int main() 
{
  std::vector&lt;int&gt; meineInts;
  std::vector&lt;*int&gt; pointerAufMeineInts;

  meineInts.reserve(1000); // mach Platz für 1000

  for(int i=0;i&lt;1000;++i)
    meineInts.push_back(i++); // objekte speichern

  for(int i=0; i&lt; meineInts.size(); i+=4)
    pointerAufMeineInts.push_back(&amp;(meineInts.at(i))); // jeden 4ten merken

  for(int i=1000; i&lt;10000; ++i)
    meineInts.push_back(i++); // mehr objekte hinzufügen - verursacht vermutlich ein umkopieren aller Werte, also Pointer ungültig

  // jetzt hier irgendwas mit den gemerkten pointer machen kann schief gehen.
}
</code></pre>
<p>Eine saubere Trennung ala Nexus ist also erstrebenswert - auch wenn die Objekte streng genommen alles Gleich sind. Alternativ könntest du etwas mit std::multimap bauen (eine ID pro &quot;Typ&quot;) - ist aber frickeliger. Statt Liste würde ich warscheinlich den Vector nehmen, und schau dir am besten noch iteratoren an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> die sind super um durch sowas durchzugehen - netter als 'for (bla=0; bla&lt;blub; ++bla)'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026853</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Sat, 26 Feb 2011 15:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger-Frage: Pointer-list auf eine list? on Sat, 26 Feb 2011 15:02:01 GMT]]></title><description><![CDATA[<p>Meine (vielleicht auch nicht wirklich gute) Überlegung: es gibt wirklich nur eine Klasse, weil jedes Objekt auf dem Bildschirm alles kann - evtl. sogar vom Spieler die Steuerung übernommen werden. Und da die Physik von Box2D übernommen wird, kümmere ich mich (sozusagen) gar nicht um die Kollision.</p>
<p>Weil die Unterschiede zwischen den Objekten wirklich marginal sind - z.B. Gegner wie Landschaftsobjekte können entlang eines Pfades wandern, können dem Spieler Schaden zufügen, können sich drehen, blah...</p>
<p>Deswegen seh ich halt den Vorteil in einer großen list (Du empfiehlst den vector??) --- alles wird gleich behandelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026854</guid><dc:creator><![CDATA[Gnarz-Farz]]></dc:creator><pubDate>Sat, 26 Feb 2011 15:02:01 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger-Frage: Pointer-list auf eine list? on Sat, 26 Feb 2011 15:11:11 GMT]]></title><description><![CDATA[<p>Okay, ich dachte, du würdest mit Polymorphie arbeiten. Aber auch hier kannst du die einzelnen Dinge getrennt haben, ich würde die Vorteile nicht unterschätzen. Du könntest aber auch einen separaten Container mit Pointern auf alle Objekte aus unterschiedlichen Containern merken.</p>
<p><code>std::vector</code> ist meist die beste Wahl, allerdings können Iteratoren, Zeiger und Referenzen auf Objekte ungültig werden, was bei <code>std::list</code> nicht passiert.</p>
<p>Die Alternative wäre, eine Funktion auf allen Elementen aufzurufen, die aber nur bei Gegnern etwas tut. Ist jedoch auch wieder mit Fallunterscheidungen verbunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026860</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 26 Feb 2011 15:11:11 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger-Frage: Pointer-list auf eine list? on Sat, 26 Feb 2011 15:13:50 GMT]]></title><description><![CDATA[<p>Oder anders gesagt: was mir eigentlich missfällt - wenn ich mehrere Objekt-Listen/Vektoren/wasauchimmer habe, muss ich ja im Prinzip für jede Objektliste doch wieder die gleiche Schleife durchlaufen - also sagen wir 1x den Spieler zu allen Objekten berechnen und z.B. 2x die selbe Schleife für Gegner und &quot;Tyles&quot;/Landschaft...</p>
<p>Dann kommen vielleicht noch Bonii (Lebensenergie, die ja im Endeffekt genauso wie Gegner und Tyles agiert, nur eben &quot;positiven&quot; Schaden zufügt) dazu, Events (können auch wieder alles, was die anderen können - bis auf eben den Event ausführen - und selbst das kann vielleicht ein Gegner auch, wenn man ihm zu nahe kommt z.B.).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026861</guid><dc:creator><![CDATA[Gnarz-Farz]]></dc:creator><pubDate>Sat, 26 Feb 2011 15:13:50 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger-Frage: Pointer-list auf eine list? on Sat, 26 Feb 2011 15:16:29 GMT]]></title><description><![CDATA[<p>Gnarz-Farz schrieb:</p>
<blockquote>
<p>Oder anders gesagt: was mir eigentlich missfällt - wenn ich mehrere Objekt-Listen/Vektoren/wasauchimmer habe, muss ich ja im Prinzip für jede Objektliste doch wieder die gleiche Schleife durchlaufen - also sagen wir 1x den Spieler zu allen Objekten berechnen und z.B. 2x die selbe Schleife für Gegner und &quot;Tyles&quot;/Landschaft...</p>
</blockquote>
<p>Wo liegt das Problem? Die Schleife kannst du in eine Funktion auslagern. Codeduplikation hast du dadurch keine.</p>
<p>Es heisst übrigens &quot;Tiles&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026863</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 26 Feb 2011 15:16:29 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger-Frage: Pointer-list auf eine list? on Sat, 26 Feb 2011 15:27:08 GMT]]></title><description><![CDATA[<p>Tiles - danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>OK, fräg ich halt mal andersrum - Ihr sprecht von den Vorteilen der Unterscheidung, wo wären die in meinem Fall? (sorry, blöd gefragt)</p>
<p>Ich seh da halt nicht so große Vorteile... Anfänger, sag ich ja <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026868</guid><dc:creator><![CDATA[Gnarz-Farz]]></dc:creator><pubDate>Sat, 26 Feb 2011 15:27:08 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger-Frage: Pointer-list auf eine list? on Sat, 26 Feb 2011 16:12:41 GMT]]></title><description><![CDATA[<p>Naja, ich hab selbst schon mal ein Jump'n'Run geschrieben mit ziemlich ähnlichem Aufbau. Dass ich getrennte Container (in meinem Fall für unterschiedliche abgeleitete Klassen) benutzte, hatte verschiedene Vorteile.</p>
<p>Zum einen sind spezifische Aktionen wie &quot;setze alle Gegner zurück&quot; möglich (denn das kann die Gegner-Klasse nicht selbst, auch wenn sie virtuelle Methoden hat). Zum Anderen kann man viel leichter Aktionen zwischen zwei Objekten eines bestimmten Typs durchführen. Kollisionen liefen bei mir je nach beteiligten Objekten verschieden ab, z.B. konnten abgefeuerte Waffen nicht den Spieler selbst treffen. Wenn man das versucht generisch in einer Klasse zu lösen, ist oft doch eine komplexe Logik oder fortgeschrittene Techniken wie Double-Dispatch notwendig. Und generell hat man einfach mehr Typsicherheit und kann auf explizite Fallunterscheidungen verzichten, wenn die Typen bereits zur Kompilierzeit bekannt sind.</p>
<p>P.S. Ob es nun tatsächlich verschiedene Typen (abgeleitete polymorphe Klassen) oder nur ein Typ ist, der gleichzeitig unterschiedliche Dinge repräsentiert, macht diesbezüglich keinen grossen Unterschied. Allerdings ist Polymorphie oft die bessere Wahl, sobald die Unterschiede grösser werden (wieder wegen der Fallunterscheidungen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026887</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 26 Feb 2011 16:12:41 GMT</pubDate></item></channel></rss>