Kameraverhalten in Draw3D

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Xawer23

Betreff: Kameraverhalten in Draw3D

BeitragSo, Jun 17, 2012 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich habe ein kleines Problem mit der Kamera in Draw3D. Es haldelt sich um ein klassisches 2D sidescrolling spiel im Stil von Megaman. Damit sich die Kamera mitbewegt mit dem Spieler, dachte ich daran sie mit BlitzBasic: [AUSKLAPPEN]
Origin
zu verschieben. Mit Draw3D klappt das natürlich nicht, deshalb dachte ich daran das ganze mit PositionEntity auf die Kamera direkt zu machen. Nur irgendwie gehprcht mir die Kamera nicht.. (es passier nichts) CameraZoom hingegen funktioniert einwandfrei.

Code: [AUSKLAPPEN]

PositionEntity Camera,MouseX(),0,MouseY()



was mache ich falsch?

Tennisball

BeitragSo, Jun 17, 2012 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

versuch mal Origin3D

mfg,
Tennisball

ToeB

BeitragSo, Jun 17, 2012 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Im übrigen würde ich nicht den Mal punkt verschieben sondern die Verschiebung in einem Offset speichern und danach von der eigl. Bildposition abziehen. So wäre es bspw. auch einfacher, Bilder die nicht im Bildschirm zu sehen sind einfach nicht zu zeichnen (bzw. das Abfragen der Überlappung wird meiner Meinung nach schneller)

Lg, Tobias
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!
 

Xawer23

BeitragMo, Jun 18, 2012 1:08
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab das mit der offset variable absichtlich nicht probiert, weil ich dachte das wird total unübersichtlich. und Origin3D ändert doch nur die (virtuelle) Auflösung von Draw3D?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jun 18, 2012 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei Draw3D2 kannst du das geladene Bild auf ein Pivot laden und diesen dann frei im Raum bewegen. Natürlich auch die Kamera um ein Tileset und anderen eingezeichneten Bildern herum fahren lassen. Dabei muss auch nicht jedes Frame der Level neu gezeichnet werden, es reicht einmal einzeichnen und es bleibt bestehen.

Dennoch würde ich ein Tilebasiertes Spiel nicht so abhandeln. Nach wie vor sollte man auf ein reguläres Tilesystem bauen, die die Levels zeichnet und entsprechend Kollisionsabfrage macht.

Sind die Levels jedoch nicht Tilebasiert, sonder eher so etwas hier, dann bietet sich das bewegen der Kamera eher an.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

funkmaster5000

BeitragFr, Dez 25, 2015 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry für den Necro, aber die selbe Frage habe ich zzt. auch. Welche Cam muss denn genau bewegt werden? Hintergrund: ich programmiere an einem Rennspiel und durch den Offset in 2D ist auf Grund von Rundung das Scrolling sehr ruckelig. Ferner muss ich zu jedem gezeichneten Objekt ein Offsetx und Offesty addieren (weil ich den Origin verschiebe), was die Kalkulation von meinen Kollisionen verfälscht. Eine butterweiche Cam wäre da genau das richtige Smile

Im 2D Raum mache ich es so:
Code: [AUSKLAPPEN]
Function RenderGame()
   player.tplayer = First tplayer
   offsetx = (-player\x + 320)
   If offsetx > 0 Then offsetx = 0 ;if the offset drops below 0, set it to 0
   If offsetx < border_right Then offsetx = border_right
   offsety = (-player\y + 240)
   If offsety > 0 Then offsety = 0
   If offsety < border_down Then offsety = border_down
   Origin offsetx,offsety
End Function


Die Border errechne ich über Mapsize * Tilesize

Der Beispielcode von Xawer23 funktioniert bei mir leider auch nicht. Wie wäre denn das Handling über Pivots? Ich habe versucht, der Cam, auf die ich D3D initialisiere einen Parent Pivot zuzuweisen und den zu bewegen. Funktioniert nicht Confused Habe auch ein bisschen mit ChangeCamera3D rumgespielt, aber kam nicht so recht weiter.

Konkret soll die Kamera nur meinem Spieler folgen, ich würde sie also auf ihn zentrieren, genau wie in 2D. Das Tutorial "Scrolling mit Viewports" habe ich mir ebenfalls durchgelesen, aber dort werden ebenfalls Offsets addiert. Eine frei bewegliche Cam ist für ein weiches Scrolling m. E. Bedingung. Danke für jeden Input. Jetzt weiß ich auch, warum die meisten Hobby Top Down 2D Racer auf einen Screen passen Rolling Eyes

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Dez 25, 2015 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie ich schon in einer vorherigen Antwort beschrieben hatte, empfehle ich bei einer tilebasierten Grafikausgabe das ursprüngliche ''immer neu zeichnen der Map'', da sich dann auch mehr Dynamik mit einbauen lässt. Außerdem zeichnet die Draw3D2 Tiles wesentlich schneller (~50 mal schneller) als reines 2D. Und selbst reines 2D ist schnell genug. Sofern du also keine Kurvenverläufe per Vektoren zeichnest, sollte die traditionelle Zeichnemethode verwendet werden.

Wenn du es aber nicht anders haben möchtest, dann kannst du es wie im folgendem Code machen:

Code: [AUSKLAPPEN]
Graphics3D 1024,768,0,2
SetBuffer BackBuffer()

Local Timer=CreateTimer(58)
Local Camera=CreateCamera()
CameraClsColor Camera,64,64,64

Include "..\Includes\Draw3D2.bb"
DrawInit3D(Camera)

Local Pivot=CreatePivot3D(0,0,0,GraphicsHeight()/2,0,0,0,1)
Local Image=LoadImage3D("..\Data\Tilemap.png",2,2,Pivot)
ClearOff3D(Image)




While Not KeyHit(1)
   
   PositionEntity Camera,MouseX3D,MouseY3D,-5
   
   If KeyHit(2) Then DrawImage3D(Image,Rand(-400,+400),Rand(-400,+400))
   If KeyHit(3) Then Clear3D(Image)
   
   WaitTimer Timer
   RenderWorld
   Clear3D()
   
   Text 20,20,"Drücke Taste 1 oder 2"
   Flip 0
Wend
End


Mit GraphicsHeight()/2 wird das Pivot um die hälfte der Bildschirmhöhe in der Z-Achse nach hinten verschoben. Sofern keine andere Skallierungen verwendet wird, entspricht es dann eine genauen 1:1-Darstellung. Das heißt, ein Pixel wird auch als ein Pixel gezeichnet und nicht skalliert.

P.S. Du kannst mit der Draw3D2 die Kamera auch zwischen den Pixeln bewegen. Dieses ergibt dann absolut weiche Bewegungsmöglichkeiten. Allerdings bewegt sich nur der Texturinhalt weich. Die Kanten eines Tiles dagegen springen von Bildschirmpixel zu Bildschirmpixel. Dieses kann man mit einem gewissen Aufwand beheben, macht aber keinen Spaß es umzusetzen. Sofern die Kamera also bewegt wird, empfiehlt es sich die Position durch Int(Wert) zu runden.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group