<?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[[SDL] Bestimmten Anweisungsblock ausführen solange Taste gedrückt ist]]></title><description><![CDATA[<p>Servus,</p>
<p>Mit folgenden Code kann ich ein Bild auf dem Bildschirm mithilfe der Pfeiltasten bewegen:</p>
<pre><code class="language-cpp">//...

while (SDL_PollEvent(&amp;event)) 
{
	if (event.type == SDL_QUIT)
	{
		quit = true;
	}

	else if (event.type == SDL_KEYDOWN)
	{
		switch (event.key.keysym.sym)
		{
			case (SDLK_ESCAPE): quit = true; break;
			case (SDLK_UP):
			{
				playerPosY -= pixelPerPress;
				clear_surface(screen);
				apply_surface(playerPosX, playerPosY, player, screen);
				SDL_Flip(screen);
				break;
			}
			case (SDLK_DOWN):
			{
				playerPosY += pixelPerPress;
				clear_surface(screen);
				apply_surface(playerPosX, playerPosY, player, screen);
				SDL_Flip(screen);
				break;
			}
			case (SDLK_LEFT):
			{
				playerPosX -= pixelPerPress;
				clear_surface(screen);
				apply_surface(playerPosX, playerPosY, player, screen);
				SDL_Flip(screen);
				break;
			}
			case (SDLK_RIGHT):
			{
				playerPosX += pixelPerPress;
				clear_surface(screen);
				apply_surface(playerPosX, playerPosY, player, screen);
				SDL_Flip(screen);
				break;
			}
		}
	}
}

//...
</code></pre>
<p>Nun, will ich aber, dass sich das Bild, welches sich auf der Surface &quot;player&quot; befindet, solange in eine Richtung bewegen, bis ich die betreffende Taste wieder auslasse.</p>
<p>Ich habe es schon mit einer while-Schleife versucht:</p>
<pre><code class="language-cpp">//...
while (event.key.state != SDL_RELEASED)
{
	case (SDLK_UP):
				{
					playerPosY -= pixelPerPress;
					clear_surface(screen);
					apply_surface(playerPosX, playerPosY, player, screen);
					SDL_Flip(screen);
					break;
				}
}
//...
</code></pre>
<p>Das Ergebnis ist jedoch, dass ich die Surface erst garnicht nach oben bewegen kann.</p>
<p>Auch mit '<em>while (event.key.type != SDL_KEYUP)</em>' ist es das Gleiche.</p>
<p>Was kann ich da machen?<br />
Danke schonmal.</p>
<p>mfg RungAaz</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272629/sdl-bestimmten-anweisungsblock-ausführen-solange-taste-gedrückt-ist</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 19:20:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272629.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Aug 2010 19:51:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [SDL] Bestimmten Anweisungsblock ausführen solange Taste gedrückt ist on Sat, 21 Aug 2010 19:51:24 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>Mit folgenden Code kann ich ein Bild auf dem Bildschirm mithilfe der Pfeiltasten bewegen:</p>
<pre><code class="language-cpp">//...

while (SDL_PollEvent(&amp;event)) 
{
	if (event.type == SDL_QUIT)
	{
		quit = true;
	}

	else if (event.type == SDL_KEYDOWN)
	{
		switch (event.key.keysym.sym)
		{
			case (SDLK_ESCAPE): quit = true; break;
			case (SDLK_UP):
			{
				playerPosY -= pixelPerPress;
				clear_surface(screen);
				apply_surface(playerPosX, playerPosY, player, screen);
				SDL_Flip(screen);
				break;
			}
			case (SDLK_DOWN):
			{
				playerPosY += pixelPerPress;
				clear_surface(screen);
				apply_surface(playerPosX, playerPosY, player, screen);
				SDL_Flip(screen);
				break;
			}
			case (SDLK_LEFT):
			{
				playerPosX -= pixelPerPress;
				clear_surface(screen);
				apply_surface(playerPosX, playerPosY, player, screen);
				SDL_Flip(screen);
				break;
			}
			case (SDLK_RIGHT):
			{
				playerPosX += pixelPerPress;
				clear_surface(screen);
				apply_surface(playerPosX, playerPosY, player, screen);
				SDL_Flip(screen);
				break;
			}
		}
	}
}

//...
</code></pre>
<p>Nun, will ich aber, dass sich das Bild, welches sich auf der Surface &quot;player&quot; befindet, solange in eine Richtung bewegen, bis ich die betreffende Taste wieder auslasse.</p>
<p>Ich habe es schon mit einer while-Schleife versucht:</p>
<pre><code class="language-cpp">//...
while (event.key.state != SDL_RELEASED)
{
	case (SDLK_UP):
				{
					playerPosY -= pixelPerPress;
					clear_surface(screen);
					apply_surface(playerPosX, playerPosY, player, screen);
					SDL_Flip(screen);
					break;
				}
}
//...
</code></pre>
<p>Das Ergebnis ist jedoch, dass ich die Surface erst garnicht nach oben bewegen kann.</p>
<p>Auch mit '<em>while (event.key.type != SDL_KEYUP)</em>' ist es das Gleiche.</p>
<p>Was kann ich da machen?<br />
Danke schonmal.</p>
<p>mfg RungAaz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942848</guid><dc:creator><![CDATA[RungAaz]]></dc:creator><pubDate>Sat, 21 Aug 2010 19:51:24 GMT</pubDate></item><item><title><![CDATA[Reply to [SDL] Bestimmten Anweisungsblock ausführen solange Taste gedrückt ist on Mon, 23 Aug 2010 06:47:03 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin zwar nicht so mit SDL vertraut, aber du könntest evtl. ein bool Array anlegen, welches dir die Zustände speichert, in etwa so:</p>
<pre><code class="language-cpp">bool keys[4];
</code></pre>
<p>Und dann, wenn eine Taste gedrückt wurde auf true setzen:</p>
<pre><code class="language-cpp">switch (event.key.keysym.sym)
{
    case (SDLK_UP):
    {
        keys[0] = true;
        break;
    }
    case (SDLK_DOWN):
    {
        keys[1] = true;
        break;
    }
    ....
</code></pre>
<p>und wenn sie wieder losgelassen wird (SDL_Released?), dann auf false setzen</p>
<pre><code class="language-cpp">while (event.key.state == SDL_RELEASED)
{
    switch (event.key.keysym.sym)
    {
       case (SDLK_UP):
        {
            keys[0] = false;
            break;
        }
        ....
}
</code></pre>
<p>Danach kannst du ja einfache Abfragen, ob eine Taste derzeit gedrückt wird.</p>
<p>ps. du kannst auch enums, anstatt der Indizes benutzen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943181</guid><dc:creator><![CDATA[unknown_name]]></dc:creator><pubDate>Mon, 23 Aug 2010 06:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to [SDL] Bestimmten Anweisungsblock ausführen solange Taste gedrückt ist on Mon, 23 Aug 2010 20:20:17 GMT]]></title><description><![CDATA[<p>Erstmal Danke, für die Antwort.</p>
<p>Ich werds gleichmal ausprobieren, ich poste dann evtl. noch obs hinhaut, für Leute die unter Umständen das gleiche Problem haben.</p>
<p>[EDIT]<br />
OK, ich muss gestehen, ich habe deine Lösung nicht ausprobiert, aber ich habe eine Lösung gefunden, und zwar in folgendem Tutorial:<br />
<a href="http://lazyfoo.net/SDL_tutorials/lesson16/index.php" rel="nofollow">http://lazyfoo.net/SDL_tutorials/lesson16/index.php</a></p>
<p>mfg rungaaz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943512</guid><dc:creator><![CDATA[RungAaz]]></dc:creator><pubDate>Mon, 23 Aug 2010 20:20:17 GMT</pubDate></item></channel></rss>