Aktuelle Zeit: 20.07.2019 10:08

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Autorennen
BeitragVerfasst: 23.02.2019 17:43 
Offline

Registriert: 29.04.2010 22:50
Hallo!
Ich würde gerne ein Autorennen ( 2D ) programmieren, so in der Art von einem stark vereinfachten Outrun. Ohne Berge und Hügel, also erstmal nur eine einfache Strecke mit Kurven. Und genau bei der Strecke liegt mein Problem. Ich bekomme es einfach nicht hin die Strecke zu Zeichnen. Also Links und Rechts die Fahrbahnmarkierung, die Mittelstriche und halt die Kurven. Ich habe es mit direktem Zeichnen versucht, aber das sieht nicht besonders schön aus, und ist sehr langsam. Dann habe ich es mit Sprites versucht, aber da klappt das mit den Entfernungen und den Kurven nicht. Hat einer von euch vielleicht ein Beispiel was man dafür verwenden kann?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Autorennen
BeitragVerfasst: 23.02.2019 19:01 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Die Render-Technik heisst Mode 7 :)

Ist nicht ganz einfach, hab mal einen Link rausgesucht der das Ganze erklärt.
-> https://www.coranac.com/tonc/text/mode7.htm

_________________

Links:
PureBasic Discord
[ENGINE] 2D Engine Nautilus (Win)
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Autorennen
BeitragVerfasst: 23.02.2019 21:39 
Offline

Registriert: 29.04.2010 22:50
Danke für den Link. Das ist aber um einiges Komplexer als wie ich mir das gedacht habe. Meine ersten Versuche hatte ich mit TransformSprite gemacht, aber wie oben bereits geschrieben ging das voll daneben, was auch klar ist wenn ich mir die Mode 7 Technik anschaue.

Code:
InitSprite()
InitKeyboard()

 Procedure RollSpriteUp2Down(iSpriteID.i, iPixel.i)
  Protected iSHeight.i
  Protected *Sprite, iLineSize.i
  Protected *Buffer1, *Buffer2
 
  iSHeight = SpriteHeight(iSpriteID)
 
  StartDrawing(SpriteOutput(iSpriteID))
  *Sprite = DrawingBuffer()
  iLineSize  = DrawingBufferPitch()
 
  *Buffer1 = AllocateMemory(iLineSize * (iSHeight - 0 - iPixel))
  *Buffer2 = AllocateMemory(iLineSize * iPixel)

  CopyMemory(*Sprite, *Buffer1, iLineSize * (iSHeight - 0 - iPixel))
  CopyMemory(*Sprite + (iLineSize * (iSHeight - 0 - iPixel)), *Buffer2, iLineSize * iPixel)
 
  CopyMemory(*Buffer1, *Sprite + iLineSize * iPixel, iLineSize * (iSHeight - 0 - iPixel))
  CopyMemory(*Buffer2, *Sprite, iLineSize * iPixel)
 
  StopDrawing()
  FreeMemory(*Buffer1)
  FreeMemory(*Buffer2) 
EndProcedure


OpenScreen(640, 480, 32, "")

CreateSprite(0, 256,256)

SetFrameRate(60)
SpriteQuality(1)

StartDrawing(SpriteOutput(0))
For n=0 To 7
  LineXY( n*32     , 0, n*32     , 255, $0FF0FF )
  LineXY( n*32 + 31, 0, n*32 + 31, 255, $0FF0FF )
  LineXY( 0, n*32     , 255, n*32     , $0FF0FF )
  LineXY( 0, n*32 + 31, 255, n*32 + 31, $0FF0FF )
Next
StopDrawing()

Repeat
  ClearScreen(RGB(0,50,128))
  RollSpriteUp2Down(0, 1)
  TransformSprite(0,64,0,64,192,0,64,256,256,32,0,256,32)
  DisplaySprite(0, 192, 100)
  ExamineKeyboard()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Autorennen
BeitragVerfasst: 24.02.2019 10:54 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Netter Scroll-Effekt :)

Hab noch ein Video Tutorial auf youtube gefunden.
https://www.youtube.com/watch?v=ybLZyY655iY

_________________

Links:
PureBasic Discord
[ENGINE] 2D Engine Nautilus (Win)
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Autorennen
BeitragVerfasst: 24.02.2019 11:57 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Da kann ich wohl nicht helfen...

Mein letztes Autorennen habe ich auf einen Sinclair ZX81 programmiert.
Habe ich bestimmt noch irgend wo auf Kassette :mrgreen:

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Autorennen
BeitragVerfasst: 24.02.2019 12:12 
Offline

Registriert: 29.08.2004 13:18
DIe 8bit- und 16bit-Racer nutzten meist einen ganz anderen Trick.
Die Strecke war quasi ein "statisches" Bild. Die grafiken waren damals mit paletten, sprich man hatte bspw. 16 Farbtöpfe und konnte dort beliebige Farben platzieren.
Die Strecke selbst ist dann eine statische grafik, grauer Asphalt, durchgezogenen Mittelstreifen und am Rand eine rote Begrenzung bspw.
Und jetzt kommt der Trick: Der Grafikchip der Systeme baut ja die Grafik Zeilenweise auf den Monitor. Nach jeder Zeile ist etwas Zeit, wo der Processor schnell reingrätschen kann. in dieser Zeit wurden die Farbtöpfe ausgetauscht. Der asphalt wird zwischen hellgrau und dunkelgrau getauscht, der Rand von rot zu weis, die mittellinie von weis auf asphalt-grau. wenn man das geschickt macht, bekommt man eine flüssige Bewegung hin, ohne das man Grafiken ändern muss. Das war für die damaligen Systeme entscheidend. Natürlich darf man natürlich diesen Wechsel nicht in jeder Zeile machen.

Das erzeugt halt auch diesen typischen Style, diese zweifarbigen Streifen-Grafik. Man nutzt dafür keine "bitmaps" mit Grasmuster, weil ansonsten diese Illusion nicht mehr funktioniert.

Zu den Kurven. Man fährt eigentlich keine "Kurven", sondern das Spielerauto wird nach rechts gedrückt/bewegt. Das ist schon alles. Deshalb sieht es auch selten so aus, als würde man tatsächlich eine Kurve fahren, weil die Kurven bspw. nie einen 90Grad winkel erreichen könnte, trotz biegen, gehen sie immer in den Horizont rein. Man kann auch nicht in die Kurven wirklich reinlenken.

Anders ist natürlich Super Mario Kart, die nutzen mode-7 und damit eine Streckenführung. Das ist ungleich mächtiger.

Edit: Was ich dir empfehlen würde. Mach das Zeilenweise. Mach eine Strecke mit seitlich grün, Begrenzung und mittelstreifen. In zwei Variationen. Am besten ein Bitmap. Du malst dann die strecke von oben nach unten und wechselst durch. den Startwert (ob hell oder dunkles bitmap) bestimmt die Streckenposition. Bei einer kurve verschiebst du das Linien seitlich und addierst ein verschiebungsfaktor in das Auto.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Autorennen
BeitragVerfasst: 24.02.2019 16:27 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Erinnert mich an ColorCycling :D

Genial!
-> https://www.youtube.com/watch?v=aMcJ1Jvtef0

_________________

Links:
PureBasic Discord
[ENGINE] 2D Engine Nautilus (Win)
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Autorennen
BeitragVerfasst: 01.03.2019 13:39 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Mijikai hat geschrieben:
Erinnert mich an ColorCycling :D

Genial!
-> https://www.youtube.com/watch?v=aMcJ1Jvtef0

Ich habe viele dieser Artworks schonmal gesehen, aber die daylight cycles kannte ich noch nicht und die haben es nochmal getoppt :o :D
@10:25 https://youtu.be/aMcJ1Jvtef0?t=625
@11:11 https://youtu.be/aMcJ1Jvtef0?t=671

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye