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?
Autorennen
Re: Autorennen
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
Ist nicht ganz einfach, hab mal einen Link rausgesucht der das Ganze erklärt.
-> https://www.coranac.com/tonc/text/mode7.htm
-
- Beiträge: 21
- Registriert: 29.04.2010 22:50
Re: Autorennen
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: Alles auswählen
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)
Re: Autorennen
Netter Scroll-Effekt
Hab noch ein Video Tutorial auf youtube gefunden.
https://www.youtube.com/watch?v=ybLZyY655iY
Hab noch ein Video Tutorial auf youtube gefunden.
https://www.youtube.com/watch?v=ybLZyY655iY
Re: Autorennen
Da kann ich wohl nicht helfen...
Mein letztes Autorennen habe ich auf einen Sinclair ZX81 programmiert.
Habe ich bestimmt noch irgend wo auf Kassette
Mein letztes Autorennen habe ich auf einen Sinclair ZX81 programmiert.
Habe ich bestimmt noch irgend wo auf Kassette
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Autorennen
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.
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!
Re: Autorennen
Ich habe viele dieser Artworks schonmal gesehen, aber die daylight cycles kannte ich noch nicht und die haben es nochmal getopptMijikai hat geschrieben:Erinnert mich an ColorCycling
Genial!
-> https://www.youtube.com/watch?v=aMcJ1Jvtef0
@10:25 https://youtu.be/aMcJ1Jvtef0?t=625
@11:11 https://youtu.be/aMcJ1Jvtef0?t=671