Kameraverhalten in Draw3D
Übersicht BlitzBasic Beginners-Corner
Xawer23Betreff: Kameraverhalten in Draw3D |
So, Jun 17, 2012 20:05 Antworten mit Zitat |
|
---|---|---|
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] Originzu 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 |
So, Jun 17, 2012 22:58 Antworten mit Zitat |
|
---|---|---|
Hi,
versuch mal Origin3D mfg, Tennisball |
||
ToeB |
So, Jun 17, 2012 23:15 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Jun 18, 2012 1:08 Antworten mit Zitat |
|
---|---|---|
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? | ||
hecticSieger des IS Talentwettbewerb 2006 |
Mo, Jun 18, 2012 21:31 Antworten mit Zitat |
|
---|---|---|
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 |
Fr, Dez 25, 2015 17:20 Antworten mit Zitat |
|
---|---|---|
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
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 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 |
||
hecticSieger des IS Talentwettbewerb 2006 |
Fr, Dez 25, 2015 18:16 Antworten mit Zitat |
|
---|---|---|
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 |
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group