Level scolling
Übersicht

Peak7810Betreff: Level scolling |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
kann mir jemand ein tut nennen wie man am besten ein scolling hinbekommt...?
also von links nach rechts so wie sich die spielfigur bewegt.... ums genau zu beschreiben. hab nen hintergrund de sich wiederholen soll. und eben verschiedene levelelemente die ich derzeit aber in einer größeren bilddatei habe... tilemaps sind nicht mein ding |
||
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du erstellt eine neue Global![]() |
||
Starfare: Worklog, Website (download) |
Peak7810 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
d.h. das bild, also der level und auch die zugehörigen elemente können relativ groß sein?
in meinem fall in der horizontalen. also sagen wir ich hab ne auflösung von 600x800, dann könnte der level 600x1600 sein. ausser mit tiles, könnt ihr mir noch was anderes empfehlen? |
||
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja es gibt son segmentielles Scrolling, aber kA ob das wirklich schnell zu machen ist.
Du kannst ja dein Bild nehmen und immer nur den Teil quasi rauschneiden der sichtbar ist, kommt dein Spieler(Raumschiff oder was weiß ich) an den Rand kannst du nun den notwendigen Teil links oder rechts, je nachdem wo du es hin haben willst aus dem Orginalbild ausschneiden(das Buch aus dem ich dieses Prinzip habe empfiehlt 1 Pixel, was für weiche Ergebnisse sinn macht) und dann das Bild erneut in den Buffer schreiben nur das du es um 1 Pixel versetzt machst und den ausgeschnittenen Teil am Ende anfügst. Ist sicher etwas umständig erklärt.Im Grunde zeigst du immer 800x600(oder welche Auflösung auch immer) an und versetzt es bei Scrollen 1 Pixel schneidest aus deinem 1600x600 den entsprechenden Streifen von 1 Pixel aus und fügst diesen mit dem vorherigen Bild einfach um 1 Pixel versetzt im Buffer zusammen. Du solltest dir aber überlegen ob ReadPixel(Fast) und WritePixel(Fast) und deine Routine WIRKLICH den Aufwand wert ist.So wie es ZaP vorschlägt ist es meistens am schnellsten, wenn es auch eine verschwendung von Ressourcen ist. Ein recht guter Komprimiss wäre einfach, dass du dein Bild in sagen wir mal 4 oder 5 Blöcke teilst, die im Idealfall alle gleichgroß sind und du zeigst dann einfach nur immer 2 Blöcke gleichzeitig an.Immer Block 1 im Sichtfeld und Block 2 im Offset(links oder rechts, oben oder unten etc.).Dann machst du es wie ZaP sagt mit Offset und sobald Block 2 den Anzeigebereich betritt zeigst du direkt dahinter Block 3 an, etc. etc. Das wären so meine Ideen zu dem Thema, vielleicht hilft es dir ja auch deine ganz eigene Herangehensweise zu erfinden^^ MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. Hat mit den Eigenheiten der 3D-Programmierung nicht enorm viel zu tun ![]() mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
ZaP hat Folgendes geschrieben: Alle Bilder, die zum Level gehören (ausser der Spieler natürlich) werden an ihren entsprechenden Y-Koordinaten, und den X-Koordinaten + dem offset gezeichnet.
Stimmt nicht so ganz, so könnte man es zwar machen, ist aber hinterher umständlicher für Kollisionsberechnungen und anderer Dinge. Mach es so :: Du hast z.B. diese Beiden Variablen : Code: [AUSKLAPPEN] Global ScrollX = 0
Global ScrollY = 0 So. Jetzt Bewegst du alles Wie gehabt (Player, Schüsse, effecte...) : Code: [AUSKLAPPEN] If KeyDown(200) then Player_Y = Player_Y - 2
If KeyDown(203) then Player_X = Player_X - 2 ;etc... For schuss.schuss_info = Each schuss_info schuss\x_pos = schuss\x_pos + 1 next Jetzt muss die ScrollX/Y Variable noch so angepasst werden, das diese genau auf dem Spieler liegt (in der Schleife) : Code: [AUSKLAPPEN] ScrollX = Player_X - GraphicsWidth() / 2
ScrollY = Player_Y - GraphicsHeight() / 2 Jetzt müssen nur noch beim malen die Korrdinaten berücksichtigt werden : Code: [AUSKLAPPEN] DrawImage Player_Image, Player_X - ScrollX, Player_Y - ScrollY
for schuss.schuss_info = Each schuss_info DrawImage schuss_Image, schuss\x_pos-ScrollX, schuss_y_pos-ScrollY next Das hat natürlich hier den Vorteil, das man das Scrollen auch "weich" machen kann, also das es dem Spieler hinterher zieht, dafür einfach Code: [AUSKLAPPEN] ScrollX = ScrollX + ((Player_X - GraphicsWidth() / 2) - ScrollX ) * 0.02
ScrollY = ScrollY + ((Player_Y - GraphicsHeight() / 2) - ScrollY ) * 0.02 eisetzten, oder das man auch unabhägig vom spieler Scrollen kann, also dass man den Spieler auf der Map stehen lassen kann und mit der "camera" herumgucken kann, z.B. bei einem Shooter die "betrachter" ansicht. mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group