Hilfe bei Surface
-
Hallo Leute
Also mein Spiel hängt sich auf wenn ich versuche außerhalb der Primären Surface zu blitten.
Kann man das irgendwie umgehen ?
Und wenn ich mit meinem Spieler Sprite mit nur 1 Pixel außerhalb des Randes vom Bildschirms komme rendert es den Spieler automatisch nicht mehr, wie kann ich das machen, dass man ihn bis zum letzten Pixel noch sieht ?Danke Dr4xt3r
-
musst du clippen. die doku (MSDN) enthält dazu eigentlich alles wissenswerte bzw. alles was man wissen muss um es richtig zu machen. nur lesen müsste man es halt.
-
sry das mit ausserhalb der primären surface zu rendern geht doch, aber das rendern am bildschirmrand müsste doch mit blitten eig. auch funktionieren.
Müsste ich die primäre surface dafür vergrößern ?(mit dem setzen der Höhe und der Breite bei den DDSurfaceDesc hat es nicht funktioniert)
-
Dr4xt3r schrieb:
Müsste ich die primäre surface dafür vergrößern ?(mit dem setzen der Höhe und der Breite bei den DDSurfaceDesc hat es nicht funktioniert)
Eigentlich eher im Gegenteil
Du verkleinerst das primäre Surface um genau den Teil der nicht mehr angezeigt werden soll...Wenn Du zB über den linken Rand hinaus willst, berechnest Du den Anteil der nicht mehr angezeigt werden soll. (clipping)
Dieses Rechteck, daß man nicht mehr sieht, kannst du zB in eine andere Surface Blitten um es am rechten Rand erscheinen zu lassen...
-
Schau dir mal diesen SDL bezogenen Link zum Thema Scrollen an...
-
das heisst ich sollte einfach mein Sprite wenn es zur Hälfte ausm Bildschirm raus ist eine Surface für die Hälfte die noch drinn ist machen und diese dann rendern ?
-
Du mußt nicht,...
Es wäre schön zu wissen welche GUI du nutzt! OpenGL, DirectX, SDL...etc.Die SDL sollte eine Funktion SDL_SetClipRect haben. Der Funktion übergibst du das Surface und dein neu-berechnetes Rechteck was zu zeichnen ist. Ich denke mal DirectX, SFML und wie sie alle heissen handhaben das ähnlich.
Edit: Ok, irgendwo hast du DDxxxxx erwähnt. Klingt nach DirectX.
Ohne Windows kann ich Dir da zur Zeit wenig Hilfe geben. Solltest Du dein Problem an diesem WE nicht lösen können, würde ich mir mal die DirectX Doku vornehmen. (Was eigentlich DEINE Aufgabe wäre
)
-
@XHansWurstX: er verwendet wohl DirectDraw (DDSurfaceDesc -> DirectDraw).
das heisst ich sollte einfach mein Sprite wenn es zur Hälfte ausm Bildschirm raus ist eine Surface für die Hälfte die noch drinn ist machen und diese dann rendern ?
nö, das heisst du sollst den teil der raussteht einfach garnicht rendern. der ist schliesslich unsichtbar, wieso sollte man den dann rendern wollen?
üblicherweise zeichnet man sowieso für jedes frame alles neu, d.h. wenn in einem frame etwas nicht sichtbar ist muss man es auch nicht zeichnen, weil es, wenn es irgendwann mal sichtbar werden sollte, sowieso neu gezeichnet wird.
-
XHansWurstX schrieb:
ich würde mir mal die DirectX Doku vornehmen
gut das mach ich dann mal

hustbaer schrieb:
nö, das heisst du sollst den teil der raussteht einfach garnicht rendern. der ist schliesslich unsichtbar, wieso sollte man den dann rendern wollen?
üblicherweise zeichnet man sowieso für jedes frame alles neu, d.h. wenn in einem frame etwas nicht sichtbar ist muss man es auch nicht zeichnen, weil es, wenn es irgendwann mal sichtbar werden sollte, sowieso neu gezeichnet wird.ja aber das schuat ja voll blöd aus wenn ich zb die map scrollen will und am bildschirmrand ist dann eine Lücke weil ein part noch nicht gezeichnet wird und wenn es dann vollständig im bildschirm ist erscheint es dann plözlich
-
Dr4xt3r schrieb:
ja aber das schuat ja voll blöd aus wenn ich zb die map scrollen will und am bildschirmrand ist dann eine Lücke weil ein part noch nicht gezeichnet wird und wenn es dann vollständig im bildschirm ist erscheint es dann plözlich
Du hast das Prinzip immer noch nicht verstanden!
+--------------------+ | | +--|----+ | | A| B | | +--|----+ | | | +--------------------+A + B sind die gesamte Surface. Sobald die Surface aus dem Bild rausgeht beerechnest du ein Rechteck (in dem Fall B! Du mußt nur den A Teil abziehen.) Nur dieses B-Rechteck muß gezeichnet werden. Wie schon oft erwähnt Clipping!
-
Schau dir mal diesen Buchlink an.
In dem Buch wird beschrieben wie man das umsetzt. Leider ist da online kein Code zu genau diesem Beispiel
Der Beispielcode ist auf der CD. Die Bibliotheken in meiner Nähe haben dieses Buch auf Vorrat. Vieleicht hast du ähnliches Glück.Edit: Kapitel 20.9
Edit: Das Buch gibt es in einer neueren Auflage: Jetzt lerne ich: Spieleprogrammierung mit DirectX, Markt+TechnikEdit: Wenn Du nur 2D programmierst, schau Dir auch mal die Alternativen zu DirectX an.
Diese bieten Dir auch Plattformunabhängigkeit: SDL, SFML, ClanLib, Allegro,...
-
das wollt ich immer erreichen !
Hab aber nicht gewusst dass das clipping ist sorryAber danke an euch beide

-
Dr4xt3r schrieb:
Hab aber nicht gewusst dass das clipping ist sorry
Afaik ist 2D clipping unterschiedlich zum 3D clipping. Das Ergebnis ist dasselbe: Man bestimmt einen nicht-sichtbaren Bereich.
Für 3D macht man das allerdings um ressourcen zu sparen, da nicht mehr die ganze Welt gerendert werden muß.
Im 2D Bereich meint man die vorhergehenden Antworten...