Tutorial zur 2D SingleSurface Engine
von Steve0

Ich werde einen Beispiel Code, in dem ein Großteil der Funktionen vorkommen, nach und nach besprechen und die Funktionen erklären.
Hier der Beispiel Code:
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
Include "singlesurface.bb"

cam=CreateCamera()
ss_setup(cam)
mesh=ss_createmesh()
surface=ss_createsurface(mesh,"texture.bmp",255,255,255)

quad1=ss_createquad(surface,0,0,140,150)
quad2=ss_createquad(surface,140,0,120,140)
quad3=ss_createquad(surface,0,0,140,150)

ss_positionquad(quad1,320,240)
ss_positionquad(quad2,320,240)
ss_positionquad(quad3,320,240)
ss_setquadcolor(quad1,255,0,255,0.9)
ss_setquadcolor(quad2,255,255,255)
ss_setquadcolor(quad3,0,255,0,0.6)
ss_topquad(quad1)
ss_midhandlequad(quad1,1)

Repeat
winkel=winkel+1
If winkel=360 Then winkel=0
If scale#<2 Then scale#=scale#+0.01

ss_rotatequad(quad1,winkel)
ss_scalequad(quad3,scale#)

ss_updatequads()
RenderWorld
Flip
Cls
Until KeyDown(1)
Und die benötigte Textur:


Die ersten drei Zeilen sollten jedem klar sein.

Graphics3D 640,480,0,2
SetBuffer BackBuffer()
Include "singlesurface.bb"
Hier wird erst einmal der Grafikmodus und der Buffer initialisiert. Um die Engine nutzen zu können muss sie natürlich auch eingebunden werden, das macht die dritte Zeile.

cam=CreateCamera()
Dann brauchen wir noch eine Kamera die alles aufnimmt.

ss_setup(cam)
Nun wird die SingleSurface Engine initialisiert. Als Parameter muss das Handle der Kamera übergeben werden.

mesh=ss_createmesh()
Dadurch wird ein Mesh erzeugt welches dann ein oder mehrere Surfaces beinhalten kann. Parameter gibt es keine aber das Handle des Meshes wird zurückgegeben. Ich hätte den Befehl natürlich auch weglassen können aber so kann man z.B. mehrere Surfaces verstecken ohne erst jedes einzelne Quad zu verstecken.

surface=ss_createsurface(mesh,"texture.bmp",0,0,0)
Hier wird ein Surface erstellt. Parameter sind das Handle des vorher erstellten Meshs, der Pfad zu einer Textur und eine Farbe (RGB Wert) die durchsichtig sein soll.

quad1=ss_createquad(surface,0,0,140,150)
Mit dem Befehl wird ein Quad erzeugt. Als Parameter muss ein Surface, welches wir vorher erstellt haben, übergeben werden und Koordinaten eines Bereiches auf der Textur. Als erstes wird die Start x und y Koordinate übergeben und dann die Breite und Höhe des Bereichs. Der Bereich wird dann auf die Textur gezeichnet. Die Größe des Quads richtet sich nach der Größe des Bereichs auf der Textur. Rückgabewert ist ein Handle, das wir später benötigen.

ss_positionquad(quad1,320,240)
Der Befehl positioniert ein Quad. Übergeben werden muss hier das Handle des Quads und eine Koordinate. Bei allen Quads wird die linke obere Ecke an der übergebenen Position sein. Um Quads mittig zu zeichnen gibt es einen eigene Befehl, der das Gleiche wie MidhandleImage bewirkt.

ss_setquadcolor(quad1,255,0,255,0.9)
Hiermit kann man ein Quad einfärben. Wieder muss das Handle eines Quads übergeben werden. Dann eine RGB Farbe und ein Alpha Wert (0=Unsichtbar, 1=Ganz sichtbar).

ss_topquad(quad1)
Mit dem Befehl wird ein Quad als Erstes gezeichnet. Da das Quad das zuerst erstellt wurde von Quads die später erstellt wurden verdeckt wird ist der Befehl ziemlich nützlich. Leider ist er sehr langsam da er das ganze Mesh neu erstellen muss, wenn möglich sollte man schon beim Erstellen der Quads die Reihenfolge beachten. Übergeben werden muss ein Handel eines Quads.

ss_midhandlequad(quad1,1)
Damit wird der Bezugspunkt eines Quads der Mittelpunkt. Ein Quad dreht sich dann nicht mehr um den linken oberen Punkt sondern um den Mittelpunkt. Als Parameter wird das Handle des Quads und eine Eins um MidHandle einzuschalten oder eine Null um Midhandle auszuschalten übergeben.

Repeat
winkel=winkel+1
If winkel=360 Then winkel=0
If scale#<2 Then scale#=scale#+0.01
Sollte wieder jedem klar sein.

ss_rotatequad(quad1,winkel)
Der Befehl dreht ein Quad um den angegebenen Winkel.

ss_scalequad(quad3,scale#)
Mit dem Befehl lässt sich ein Quad einfach skalieren.

ss_updatequads()
Erst durch den Befehl werden alle Änderungen, die bis dahin gemacht wurden, wirksam.

RenderWorld
Flip
Cls
Until KeyDown(1)
Die sollten auch jedem klar sein.

So das war ein grober Überblick über die wichtigsten Funktionen. Weitere Funktionen könnt ihr ja selbst in der singlesurface.bb Datei nachschauen.


Spezieller Dank geht an skidracer aus dem blitzbasic.com Forum für seine Pixie-Funktion und an Vertex aus dem blitzforum.de für die MaskTexture Funktion die ich so weiter verwendet habe.