<?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[Programm &amp;quot;flimmert&amp;quot;]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mal angefangen ein kleines 2D RPG zu machen(von der Seite).<br />
Da fängt der Spieler über dem Boden an und fällt dann erstmal runter.<br />
Dazu hab ich einen Timer gemacht:</p>
<pre><code class="language-cpp">loopx = 0;
loopx2 = ipl-&gt;Left;
loopy = ipl-&gt;Top+ipl-&gt;Height;
bfall = true;
while (loopx != 30)
{
    if (ibacabl-&gt;Canvas-&gt;Pixels[loopx + loopx2][loopy] == 0)
        bfall = false;
    loopx++;
}
if (bfall)
{
    ipl-&gt;Top += 1;
    pltrans(transcolor);
}
vfall--;
</code></pre>
<p>Kurze Erklärung:<br />
loopx, loopx2 und loopy sind int-Variablen.bfall ist eine bool-Variable.</p>
<p>Es soll so funktionieren, dass man zwei Bilder vom Level hat:<br />
Eins, das der Spieler sehen kann und auf dem er sich bewegt, und eins, dass Schwarz/Weiß ist und anzeigt, wo der Spieler hingehen kann und wo nicht.<br />
Dort wo es Schwarz ist, kann der Spieler nicht hingehen.<br />
Außerdem kann er das Bild nicht sehen.<br />
In dem Timer wird überprüft, ob irgendeiner der Pixel direkt unter dem Spieler schwarz ist. Wenn nein, dann bewegt sich der Spieler 1 Pixel nach unten. Andernfalls passiert nichts.<br />
Wenn der Spieler sich bewegt hat, wird eine Funktion aufgerufen, die Teile des Spielers transparent machen soll, damit er zum Level passt(denn es ist ja kein rechteckiger Spieler).</p>
<p>ibacpic und ibacabl sind die Images mit dem Levelbild bzw. dem Schwarz/Weiß-Bild.ipl ist das Image mit dem Spieler. vpldir ist eine int-Variable in der steht, wohin der Spieler kuckt.<br />
Das Array dir ist ein String und enthält: (&quot;o&quot;, &quot;r&quot;, &quot;u&quot;, &quot;l&quot;);<br />
Das sind die Abkürzungsbuchstaben der jeweiligen Richtung.<br />
transcolor ist eine TColor-Variable in der die Farbe steht, die beim Spieler transparent gemacht werden soll.</p>
<p>Hier die Funktion:</p>
<pre><code class="language-cpp">void pltrans(TColor transcol)
{
Form1-&gt;ipl-&gt;Picture-&gt;LoadFromFile (spfad + &quot;pl&quot; + dir[vpldir] + &quot;.bmp&quot;);
loopx = 0; loopy = 0;
while (loopy != 50)
{
   if (Form1-&gt;ipl-&gt;Canvas-&gt;Pixels[loopx][loopy] == transcol)
   Form1-&gt;ipl-&gt;Canvas-&gt;Pixels[loopx][loopy] =   Form1-&gt;ibacpic-&gt;Canvas-&gt;Pixels[Form1-&gt;ipl-&gt;Left+loopx][Form1-&gt;ipl-&gt;Top+loopy];

   loopx++;
   if (loopx == 30)
   {
       loopx = 0;
       loopy++;
   }
}  
}
</code></pre>
<p>Das funktioniert auch alles so weit, aber wenn der Spieler dann ordnungsgemäß fällt, ziehen sich immer kleine Weiße Striche über sein Bild.<br />
Dabei ist mein Rechner gar nicht soo langsam.<br />
Muss ich da jetzt irgendwas unkomplizierter programmieren oder woran liegt das, dass er schon bei solchen Sachen anfängt zu flimmern?</p>
<p>Ich hoffe ich hab alles verständlich erklärt^^</p>
<p>mfg<br />
Jakel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188239/programm-quot-flimmert-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 01:09:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188239.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Jul 2007 14:24:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programm &amp;quot;flimmert&amp;quot; on Sun, 29 Jul 2007 14:24:41 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mal angefangen ein kleines 2D RPG zu machen(von der Seite).<br />
Da fängt der Spieler über dem Boden an und fällt dann erstmal runter.<br />
Dazu hab ich einen Timer gemacht:</p>
<pre><code class="language-cpp">loopx = 0;
loopx2 = ipl-&gt;Left;
loopy = ipl-&gt;Top+ipl-&gt;Height;
bfall = true;
while (loopx != 30)
{
    if (ibacabl-&gt;Canvas-&gt;Pixels[loopx + loopx2][loopy] == 0)
        bfall = false;
    loopx++;
}
if (bfall)
{
    ipl-&gt;Top += 1;
    pltrans(transcolor);
}
vfall--;
</code></pre>
<p>Kurze Erklärung:<br />
loopx, loopx2 und loopy sind int-Variablen.bfall ist eine bool-Variable.</p>
<p>Es soll so funktionieren, dass man zwei Bilder vom Level hat:<br />
Eins, das der Spieler sehen kann und auf dem er sich bewegt, und eins, dass Schwarz/Weiß ist und anzeigt, wo der Spieler hingehen kann und wo nicht.<br />
Dort wo es Schwarz ist, kann der Spieler nicht hingehen.<br />
Außerdem kann er das Bild nicht sehen.<br />
In dem Timer wird überprüft, ob irgendeiner der Pixel direkt unter dem Spieler schwarz ist. Wenn nein, dann bewegt sich der Spieler 1 Pixel nach unten. Andernfalls passiert nichts.<br />
Wenn der Spieler sich bewegt hat, wird eine Funktion aufgerufen, die Teile des Spielers transparent machen soll, damit er zum Level passt(denn es ist ja kein rechteckiger Spieler).</p>
<p>ibacpic und ibacabl sind die Images mit dem Levelbild bzw. dem Schwarz/Weiß-Bild.ipl ist das Image mit dem Spieler. vpldir ist eine int-Variable in der steht, wohin der Spieler kuckt.<br />
Das Array dir ist ein String und enthält: (&quot;o&quot;, &quot;r&quot;, &quot;u&quot;, &quot;l&quot;);<br />
Das sind die Abkürzungsbuchstaben der jeweiligen Richtung.<br />
transcolor ist eine TColor-Variable in der die Farbe steht, die beim Spieler transparent gemacht werden soll.</p>
<p>Hier die Funktion:</p>
<pre><code class="language-cpp">void pltrans(TColor transcol)
{
Form1-&gt;ipl-&gt;Picture-&gt;LoadFromFile (spfad + &quot;pl&quot; + dir[vpldir] + &quot;.bmp&quot;);
loopx = 0; loopy = 0;
while (loopy != 50)
{
   if (Form1-&gt;ipl-&gt;Canvas-&gt;Pixels[loopx][loopy] == transcol)
   Form1-&gt;ipl-&gt;Canvas-&gt;Pixels[loopx][loopy] =   Form1-&gt;ibacpic-&gt;Canvas-&gt;Pixels[Form1-&gt;ipl-&gt;Left+loopx][Form1-&gt;ipl-&gt;Top+loopy];

   loopx++;
   if (loopx == 30)
   {
       loopx = 0;
       loopy++;
   }
}  
}
</code></pre>
<p>Das funktioniert auch alles so weit, aber wenn der Spieler dann ordnungsgemäß fällt, ziehen sich immer kleine Weiße Striche über sein Bild.<br />
Dabei ist mein Rechner gar nicht soo langsam.<br />
Muss ich da jetzt irgendwas unkomplizierter programmieren oder woran liegt das, dass er schon bei solchen Sachen anfängt zu flimmern?</p>
<p>Ich hoffe ich hab alles verständlich erklärt^^</p>
<p>mfg<br />
Jakel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334381</guid><dc:creator><![CDATA[Jakel]]></dc:creator><pubDate>Sun, 29 Jul 2007 14:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to Programm &amp;quot;flimmert&amp;quot; on Sun, 29 Jul 2007 14:43:02 GMT]]></title><description><![CDATA[<p>Versuch mal Update() und die Eigenschaft DoublePuffered (Hilfe).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334395</guid><dc:creator><![CDATA[Rostfrei**]]></dc:creator><pubDate>Sun, 29 Jul 2007 14:43:02 GMT</pubDate></item><item><title><![CDATA[Reply to Programm &amp;quot;flimmert&amp;quot; on Sun, 29 Jul 2007 14:49:15 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Und vor allem vor allem würde ich nicht die Bilder bei jedem Schleifen/Timer durchlauf neu aus der Datei laden. Lege die bereits beim Programmstart in den Speicher, sei es ein eigenes Array oder eine TImageList.</p>
<p>Auch der Zugriff auf die einzelnen Pixel über die Pixels-Eigenschaft ist langsam. Verwende die Methode Scanline um eine ganze Zeile von Pixel in ein normales Array zu laden.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334400</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 29 Jul 2007 14:49:15 GMT</pubDate></item><item><title><![CDATA[Reply to Programm &amp;quot;flimmert&amp;quot; on Sun, 29 Jul 2007 16:42:50 GMT]]></title><description><![CDATA[<p>Rostfrei[] schrieb:</p>
<blockquote>
<p>Versuch mal Update() und die Eigenschaft DoublePuffered (Hilfe).</p>
</blockquote>
<p>Ich hab in der Hilfe nach DoublePuffered gesucht aber nichts gefunden.</p>
<p>akari schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>Auch der Zugriff auf die einzelnen Pixel über die Pixels-Eigenschaft ist langsam. Verwende die Methode Scanline um eine ganze Zeile von Pixel in ein normales Array zu laden.</p>
</blockquote>
<p>Wie geht das mit der Scanline - Methode?<br />
Hab ich auch schon in der Hilfe gesucht.</p>
<p>akari schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>Und vor allem vor allem würde ich nicht die Bilder bei jedem Schleifen/Timer durchlauf neu aus der Datei laden. Lege die bereits beim Programmstart in den Speicher, sei es ein eigenes Array oder eine TImageList.</p>
</blockquote>
<p>Wenn ich das Bild in eine ImagList im Builder hinzugefügt habe, wie lade ich sie dann in ein Image?</p>
<p>mfg<br />
Jakel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334434</guid><dc:creator><![CDATA[Jakel]]></dc:creator><pubDate>Sun, 29 Jul 2007 16:42:50 GMT</pubDate></item><item><title><![CDATA[Reply to Programm &amp;quot;flimmert&amp;quot; on Sun, 29 Jul 2007 16:43:24 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Die Eigenschaft heißt ja auch DoubleBuffered.</p>
<p>Zum Beispiel <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-159859-and-highlight-is-scanline.html" rel="nofollow">hier</a> findest du Code samt Erklärung.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334437</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 29 Jul 2007 16:43:24 GMT</pubDate></item></channel></rss>