Level scolling

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Peak7810

Betreff: Level scolling

BeitragFr, Aug 20, 2010 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 20, 2010 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Du erstellt eine neue Global Variable, die Du offset nennst, und die den Wert "der Verschiebung" des Levels speichert. Wenn sich der Spieler nach rechts bewegt, wird die einfach erhöht. 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.
Starfare: Worklog, Website (download)
 

Peak7810

BeitragFr, Aug 20, 2010 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 20, 2010 23:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Holzchopf

Meisterpacker

BeitragSo, Aug 22, 2010 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
~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 Wink

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

ToeB

BeitragSo, Aug 22, 2010 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group