Sidescrolling Game

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Manner

Betreff: Sidescrolling Game

BeitragMo, Jan 30, 2012 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey leute,
Ich würde gerne bei meinem Jump'n'run das man wenn man in die nähe des randes kommt sich das bild weiter aufbaut. Ich hab mir dazu einiges zu TileImages angeguckt aber nicht wirklich verstnaden.

Gibt es andere wege das zu tun oder muss es über TileImage sein? UNd wenn ja wie genau geht das?

Xeres

Moderator

BeitragMo, Jan 30, 2012 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Tiles sind natürlich die einfachste Methode um eine Karte auf zu bauen...
Im Prinzip addiert man nur einen Wert zu den Bild-Koordinaten, damit es so aussieht, als ob man sich bewegt. Wesentlich einfacher geht es nicht mehr.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Manner

BeitragMo, Jan 30, 2012 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok also nehmen wir mal an ich habe ne Map die ist 2048 * 1500 Groß und jeder Tile ist 1024 * 768 groß. Und ich will das mein spieler unten links spawn wie mach ich das denn? Ich weiß die frage ist sehr weitgreifend aber vielleicht gibts ja ne lösung Smile

Xeres

Moderator

BeitragMo, Jan 30, 2012 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
1024 * 768... pro Tile? Ich würd eher 32*32 oder sowas nehmen. Wenn ein Tile den Bildschirm füllt, geht des Sinn des ganzen so ziemlich verloren. Es ist möglich, aber normalerweise positioniert man den Spieler an einer Stelle in dem Gitter...
Hast du dir Rob's RPG Tutorials schon mal angesehen? Da werden die Grundlagen erklärt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Lador

BeitragMo, Jan 30, 2012 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
So weitgreifend ist es nicht, es ist eigentlich einfachste Mathematik.

Du brauchst zwei Variablen CamX und CamY, die speichern die Koordinaten der linken oberen Ecke des Bildschirms (also das was du siehst). Wenn du nun ganz links unten anfangen willst, ist deine CamX = 0 und deine CamY ist eben das Maximum (MapHoehe-BildschirmHoehe). Versteh nicht ganz wo da dein Problem liegen soll??

Wo wir schon bei deinem Massenbeispiel sind: Sieh zu, dass du nur immer das zeichnen lässt, was du auch auf dem Bildschirm siehst. Außerdem denke ich nicht, dass ein Tile 1024x768 groß ist, schon gar nicht wenn die Map aus 2048x1500 Tiles besteht...

MFG Lador
Mein aktuelles Projekt:
2D-Rollenspiel "Iliran"
Screenshot | Worklog
Fortschritt: ca. 70%
 

Manner

BeitragMo, Jan 30, 2012 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja die 1500 hab ich nen bischen gerunded. Also msollte ich die tiles kleiner machen.
Und das tutorial werd ich mir bei gelegenheit dann mal durchlesen Smile Danke schon mal
 

PhillipK

BeitragMo, Jan 30, 2012 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, eine feste definition der Tile-größen gibt es nicht. Aber es wiederspricht der eigentlich logik von Tiled-Maps, wenn eins davon ein Bildschirm füllt.
Es wäre recht öde, wenn du ein solches 'Tile' wiederholt zeichnen würdest - und für jedes Bild ein eigenes Unikat schaffen, hebelt die logik auf.

Tiled maps sind zb kleine bäume in 3-4 "Tiles" -> quadrate aufgeteilt. Dazu dann noch 2 blöcke die erde zeigen, 2 die Gras / Gras+Erde zeigen.
Nun kannst du aus den kleinen puzzelteilchen mehrere Universelle landschaften erstellen, obwohl du eigentlich nur ~10 tiles benutzt.

Denk hier zb mal an Super Mario, Pokemon, Zelda für Gameboy, und und und..

Nun zum eigentlichen problem:

Am besten hälst du dir die mapdaten in einer art array (oder Mapdata? Ka wie das in BB ist =D). Für jeden wert zeichnest du ein tile.
Sollte sich dein Spieler bewegen, und somit die cam, verschiebst du den bereich den du zeichnest.

Aber ich denke, das haben meine vorposter bereits angerissen Very Happy (obgleich ich das tutorial nicht durchgeschaut hab =) )

Addi

BeitragMo, Jan 30, 2012 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest eine Variable um den X-Wert den der Spieler geht, erhöhen. Anschließend musst du von der X-Koordinate des Bildes diese dann nurnoch abziehen:
BlitzBasic: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

Global Timer=CreateTimer(30)

;Die Scrollvariable
Global Scr_X

;Geschwindigkeit vom Spieler
Const PSpeed=5

;Kartengröße und Karte
Const MapMaxX=30
Const MapMaxY=10

Dim Map(MapMaxX,MapMaxY)

;Hauptschleife
While Not KeyHit(1)
Cls

;Scrollvariable hier um den Speed des Spielers erhöhen
If KeyHit(205) Then
Scr_X=Scr_X+PSpeed
End If

;Hier wird das Bild/Tile gezeichnet
For Y=0 To MapMaxY
For X=0 To MapMaxX
;Ich nehme hier ein Tile welches 32x32 groß ist
;Jedes Tile um Scr_X nach links verschieben
Rect X*32-Scr_X,Y*32,32,32
Next
Next

WaitTimer(Timer)
Flip(0)
Wend
 

Manner

BeitragDi, Jan 31, 2012 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok danke für das beispiel Smile

Aber wenn ich das mach komm ich in die mitte des bildes, ich möchte aber das wenn man starte mein charakter zentriert ist. Wie ist das möglich?

Addi

BeitragDi, Jan 31, 2012 23:32
Antworten mit Zitat
Benutzer-Profile anzeigen
In dem du sagst das PlayerX=GraphycX()/2 ist
Wenn ich das jetzt richtig verstanden hab Very Happy
oder meinst du:
1. die Map soll erst Scrollen, wenn der Spieler die Mitte erreicht?
2. der Spieler ist irgendwo auf der Map und die Scrollvariablen sollen so berechnet werden, dass der Player in der Mitte ist und die Map korrekt angezeigt wird?
 

Manner

BeitragMi, Feb 01, 2012 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Das 2. ist das was ich mein Smile

Addi

BeitragMi, Feb 01, 2012 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
In die Hauptschleife:

BlitzBasic: [AUSKLAPPEN]

If PlayerX-Scr_X>GraphicsWidth()/2 Then Scr_X=PlayerX-(GraphicsWidth()/2)
If PlayerY-Scr_Y>GraphicsHeight()/2 Then Scr_Y=PlayerY-(GraphicsHeight()/2)

DrawImage Player,PlayerX-Scr_X,PlayerY-Scr_Y
 

Manner

BeitragMi, Feb 01, 2012 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ich verzweifel grade.... die x coordinate ist zwar richtig also man ist mit der camera ungefähr da wo der spieler ist aber die y coordinate stimmt nicht... man ist über dem spieler und kann ihn nicht sehen.
Woran liegt das?

Xeres

Moderator

BeitragMi, Feb 01, 2012 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht sollte man hier auf HandleImage hinweisen. Ich finde es einfacher und konsistenter, Bilderkoordinaten abhängig vom Bildmittelpunkt zu verwenden (AutoMidHandle).
Womöglich musst du also noch die Breite/Höhe des Spielerbildes mit einbeziehen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Addi

BeitragMi, Feb 01, 2012 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Schick doch mal den Code her Very Happy
Mal gucken

Edit:
Vlt. hast du vergessen das Bild minus die Scr_Y Variable zu zeichnen
 

Manner

BeitragMi, Feb 01, 2012 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ok hab es doch nach einigem probieren hinbekommen das die camera da starte wo ich will...
aber jetz seh ich meinen spieler nich mehr!!! Ich versthe das nich^^ ich lös nen problem und es kommt nen neues xD Vorschläge?

Addi

BeitragMi, Feb 01, 2012 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Lass dir mal alle Koordinaten über Debuglog ausgeben, dann weist du wenigstens wo er is
Vlt. sind die Spielerkoordinaten kleiner als die Scrollvariablen dann wird der Spieler auserhalb des Bildes gezeichnet zumindest wenn du den Spieler an seiner Position, minus den Scr_Vars zeichnest

Ich werd mal ein funktionierendes Beispiel schreiben

Edit:
Ich weis jetz warum.
Falls du meinem Code benutz hast:
Hab 4 Zeilen vergessen Very Happy

Egal ich hab das (funktionierende) Beispiel fertig (allerdings ein bissle anders, damit es kürzer ist) hiers der Link:
http://dl.dropbox.com/u/48089972/Scrolling.bb

Schaus die mal an vlt. hilft dir das Wink

BB-Freak

BeitragMi, Feb 01, 2012 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich würde einfach erst den Hintergrund vor dem Spieler malen :

Code: [AUSKLAPPEN]
DrawImage Hintergrund,HintergrundX,0

DrawImage Spieler,SpielerX,SpielerY


und dann den Hintergrund bewegen sobald der Spieler an den Rand kommt :

Code: [AUSKLAPPEN]
If SpielerX>Rand Then
 SpielerX-SpielerGeschwindigkeit        ;Spieler läuft auf der Stelle
 Hintergrund-SpielerGeschwindigkeit  ;Hintergrund scrollt nach links weg es sieht aus als ob der Spieler sich trotzdem bewegt.
EndIf
 

Manner

BeitragMi, Feb 01, 2012 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Egal ich hab das (funktionierende) Beispiel fertig (allerdings ein bissle anders, damit es kürzer ist) hiers der Link:
http://dl.dropbox.com/u/48089972/Scrolling.bb


ohhh ja vielen vielen dank!!! genau das war es Smile

Addi

BeitragMi, Feb 01, 2012 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Problem Very Happy
Wenn du weiter Hilfe brauchst helf ich dir gern Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group