Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : [SDL] 2D scrollen / Schrift



the_brain
22-06-2005, 00:08
Hi,

hat jemand ne Idee wie man mit SDL 2d-Scrolling verwirklicht? Zur Zeit mache ich das so, dass ich die event.x-Koordinate ausleses und checke ob sie z.B. kleiner als 10 ist - wenn dem so ist, dann zeichne ich den ganzen bildschirm mit neuen x-werten neu - nur ist das leider arschlahm.

außerdem würde ich gerne text darstellen können - sdl_ttf würde ich dazu gerne nehmen - kennt jemand ein gutes tutorial (einfach nur nach der art: char* bei int x, int y anzeigen)

danke + gruss
martin

Joghurt
22-06-2005, 00:41
Mit SDL_blit den Bereich kopieren und mit DoubleBuffer und Hardware-Beschleunigung arbeiten.

the_brain
24-06-2005, 07:39
Danke, kannst du dafür auch ein kleines Beispiel bringen? Soll ich die komplette (also die große auf der ich scrollen will) in ein großes Surface packen und dann immer nur einen Ausschnitt blitten? oder wie meinst du das? Wäre das mit dem Updaten (wenn sich etwas auf der Karte bewegt nicht etwas umständlich immer beide Surfaces zu updaten?).

Kennt sich evtl. noch jemand mit SDL_Event aus?


while ( ! done )
{

//SDL_WaitEvent waits the next event
// SDL_WaitEvent( &event );
while ( SDL_PollEvent( &event ) )
{
if ( event.type == SDL_QUIT )
done = 1;
[...........]
}
}


Das Problem mit den o.a. Code ist, dass ein Mausklick evtl. zweimal den gleichen Befehl ausführt, weil ein Mausklick in der Regel länger als einen Schleifdurchlauf in Anspruch nimmt. Nun liegen in meinem Menü aber Knöpfe übereinander, dass heisst, wenn ich z.B. auf zurück klicke wird für einen Sekundenbruchteil das vorhergehende Menü angezeigt und dann gleich die Aktion die auf den Koordinaten liegt - denn der Klick ist ja noch aktiv. Ist da SDL_Delay die Lösung - habe es mit Werten bis zu 100 versucht - aber ich will das nicht zu hoch gehen, schließlich ist das die Event-Schleife. Wenn ich SDL_WaitEvent benutze reagiert er teilweise gar nicht auf z.B. das Drüclen der ESC-Taste....???

Weiss jemand Rat?

Vielen Dank und Gruss
Martin

Joghurt
24-06-2005, 13:24
Hab gerade nicht viel Zeit, deswegen kan nich nicht antworten. Ich wollte dich nur mal auf Allegro hinweisen, evtl. ist das eher was für dich, da diese Bibliothek nicht so low-level ist.
http://alleg.sf.net

the_brain
25-06-2005, 16:17
Ich danke Dir, allerdings bin ich bereits zu weit um das alles wieder zu ändern.

Ich habe nun auch alle hinbekommen - außer der Sache mit dem Scrollen. Hat da jemend ein Tutorial oder ein Beispiel?

Danke für die Hilfe
Gruss
Martin

the_brain
25-06-2005, 22:14
das scrollen klappt nun auch - nun gehts an den netzwerkmodus :-D

7.e.Q
28-06-2005, 13:47
Das Klicken kannst du so machen, daß du nicht in jeder Schleife den Status der Maustaste abfragst, ob sie gedrückt ist, sondern nur auf die Flanken, also auf Änderungen des Status reagierst (quasi ein LMButtonDown und LMButtonUp Event basteln). Also in jeder Schleife abfragen, ob sich der Status eines MouseButtons zum vorherigen Durchlauf geändert hat. Hat er das, kannst du ein Mal ermitteln, wie der neue Status ist und entsprechend reagieren (Event auslösen etc.).