PureBoard
http://forums.purebasic.com/german/

PB 4.3 und B3D Engine ( Für Anfänger und interesierte )
http://forums.purebasic.com/german/viewtopic.php?f=9&t=18797
Seite 3 von 5

Autor:  tft [ 10.01.2009 23:02 ]
Betreff des Beitrags: 

Hallo ....

Das Video ist halt ein AVI ..... ich spiele es mit WINAMP ab. FRAPS kann
leider kein anderes Vormat in der geschwindigkeit speichern..

Gruss TFT

Autor:  tft [ 11.01.2009 14:04 ]
Betreff des Beitrags: 

Hallo ...

@xperience2003

da muss ich dir leider widersprechen. B3D ist ein Code Monster. Und es ist
bei weitem nicht so flexible. Sicherlich kann man damit ganz fiele sachen
machen. (Habe selber bis vor kurzem B3D befohrzugt.) Aber die Engine
in verbindung mit den möglichkeiten von PB .... sind nahezu unendlich.
Ich werde in diesem Tut versuchen besonders die möglichkeiten ... und
weniger die schwächen herforzuheben. Ansonsten gild natürlichdas was
für alle gild. JEDER BENUTZT DAS WAS ER ALS DAS BESTE EMPFINDET.

Gruss TFT

Autor:  tft [ 12.01.2009 21:05 ]
Betreff des Beitrags: 

Hallo...

Capter 6

nun ... zum Video nu der Sorce und der Loadlink. Wir gehen diesmal
etwas weiter ........ WASD Steuerung mit Mouse unterstützung.

Wer sich das Verzeichniss genauer ansieht wird sich fileicht wundern
wo das Framework geblieben.

Im Hauptverzeichniss befinden sich nu haubtsächlich die Project
bezogenen Includs und Daten. Das Verzeichniss FW enthält das
FrameWork, die Exe und die Includes für den CodeView.

ZumCompilieren bitte Das Framework verwenden.
Bei späteren codes mit zusätzlichen Daten werden diese sonst nicht
gefunden.

InitProjectDaten.pbi

Code:
;
; Capter 6
;

; Hir werden alle Variablen Definiert, das erleichtert sie Fehlersuche
; und es gibt einen festen platz. So das nicht lange nach definitionen
; gesucht werden muss

Define MX   ; MouseX
Define MY   ; MouseY
Define MDX  ; MouseDeltaX
Define MDY  ; MouseDeltaY
Define MDT=60  ; Mouse abfrage intervall in Tick
Define MDC  ; Mouse Intervallcounter
Define MBR  ; Mouse Botton Right
Define MBL  ; Mouse Bottom Left
Define MBF  ; Mouse Botton First

Define TKT=60 ; Tasten abfrage intervall in Tick
Define TKC  ; Tasten Intervallcounter

Define TextT=60 ; Text änderungs Intervall in Tick
Define TextC ; Text Intervallcounter

Define CamMoveZ.f
Define CamMoveX.f

Define CamRX.f
Define CamRY.f
Define CamRZ.f

; Player Data

Define MaxSpeedZ.f=5.0
Define MaxSpeedX.f=2.0
Define Thrust.f=0.1

Define TickDammy    ; Enthällt den GetTickCount()
Define Alpha.f=1.0
Define AlphaCounter
Define AlphaFPS



InitB3DDaten.pbi

Code:
;
; Capter 6
;

Global Light=bbcreatelight(3)
bbmoveentity(Light,0,100,-100)

Dim cubs(2000)
Define i1

; Es wird ein Object als Reference erzeugt
; Und dann versteckt.(HideEntity)

Define cube=bbcreatecube()
bbhideentity(cube)

For i1 = 0 To 2000

  ; Und dann nur noch copiert angewendet
  ; das ist etwas schneller.
 
  cubs(i1)=bbcopyentity(cube)
  ;
  ; Alle Entity werden positioniert
 
  bbmoveentity(cubs(i1),150-Random(300),150-Random(300),150-Random(300)+300)
 
  ;
  ; Und damit nicht alle im Gleichtackt stehn.
  ; Werden sie zufällig rotiert
  ;
  bbrotateentity(cubs(i1),Random(90),Random(90),Random(90))
 
Next


Péroject3DLoop.pbi

Code:
;
  ; Capter 6
 
  ; Um die Betriebssystem Funktion GetTickCount() nicht zu offt
  ; Aufrufen zu müssen. Speichern wir sie hir zwischen.
 
  Tickdammy=GetTickCount_()
 
  ; Um zu verhindern das sich bewegungen nicht immer gleich pro Frame
  ; berechen. Müssen wir bei allen Berechnungen diesem rechnung tragen.
  ; Dies wird duch Multiplizierne eines Alpha wertes erreicht. Den wir
  ; hir einmal pro 500 ms neu berechnen. Die ist nicht perfeckt.
  ; Aber für unsere Zwecke reicht es.
  ;
 
  If AlphaCounter=0
    AlphaCounter=Tickdammy+500
  ElseIf AlphaCounter<TickDammy
    AlphaCounter=Tickdammy+500
    Alpha.f=50.0/AlphaFPS
    AlphaFPS=0
  Else
    AlphaFPS + 1
  EndIf 
 
 ; Die Abfrage der Tastatur ist nicht jeden Frame nötig.
 ; Daher gibt es einen Timer der die Abfrage FPS unabhängig
 ; Durchfürt. Das gleiche machen wir Spater auch bei der Mouse
 ; Abfrage
 
 If TKC<TickDammy
    TKC=TickDammy+TKT
    If CamMoveX.f<0
      CamMoveX.f + Thrust.f/2
      If CamMoveX.f>0
        CamMoveX.f=0
      EndIf
    EndIf
    If CamMoveX.f>0
      CamMoveX.f - Thrust.f/2
      If CamMoveX.f<0
        CamMoveX.f=0
      EndIf
    EndIf
    If CamMoveZ.f<0
      CamMoveZ.f + Thrust.f/2
      If CamMoveZ.f>0
        CamMoveZ.f=0
      EndIf
    EndIf
    If CamMoveZ.f>0
      CamMoveZ.f - Thrust.f/2
      If CamMoveZ.f<0
        CamMoveZ.f=0
      EndIf
    EndIf
    If bbkeydown(#Key_S)
      If CamMoveZ.f>-MaxSpeedZ.f
        CamMoveZ.f - Thrust.f
      EndIf 
    ElseIf bbkeydown(#Key_W)
      If CamMoveZ.f<MaxSpeedZ.f
        CamMoveZ.f + Thrust.f
      EndIf
    ElseIf bbkeydown(#Key_A)
      If CamMovex.f>-MaxSpeedX.f
        CamMovex.f - Thrust.f
      EndIf
    ElseIf bbkeydown(#Key_D)
      If CamMovex.f<MaxSpeedX.f
        CamMovex.f + Thrust.f
      EndIf
    EndIf
  EndIf
 
  ; Die Mouse bewegt die Camera
 
  MBR=bbmousedown(#MOUSE_RIGHTBUTTON)
  If MDC<TickDammy
    MDC=TickDammy+MDT
    If MBR And MBF
      MDX=(ScreenX/2)-bbMouseX()
      MDY=(ScreenY/2)-bbMouseY()
      bbmovemouse(ScreenX/2, ScreenY/2)
    ElseIf MBR And MBF=0
      bbmovemouse(ScreenX/2, ScreenY/2)
      MDC=TickDammy-1
      MBF=1
    Else
      MDX=0
      MDY=0
      MBF=0
    EndIf
  EndIf
 
  CamRX=(MDY/20)*alpha.f*-1
  CamRy=(MDX/20)*alpha.f
   
  bbmoveentity(cam,CamMoveX,0,CamMoveZ)
  bbturnentity(cam,CamRX,CamRY,0)
 
  ; Hir werden alle Objecte Bewegt.
 
  For i1 = 0 To 2000
    bbturnentity(cubs(i1),0.1,0.1,0)
  Next
 


Project2DLoop.pbi


Code:
;
; Capter 6
;

If CodeWin=0

  TextYCount=30
  TextYPix=15
 
  bbcolor($FF,$FF,$FF)
  bbtext(10,TextYCount,"Alpha = "+StrF(Alpha,3))          :TextYCount+TextYPix
  bbtext(10,TextYCount,"MDX   = "+StrF(MDX,3))            :TextYCount+TextYPix
  bbtext(10,TextYCount,"MDY   = "+StrF(MDY,3))            :TextYCount+TextYPix
  bbtext(10,TextYCount,"CamMoveX   = "+StrF(CamMoveX,3))  :TextYCount+TextYPix
  bbtext(10,TextYCount,"CamMoveZ   = "+StrF(CamMoveZ,3))  :TextYCount+TextYPix
  bbcolor($FF,$0,0)
  bbtext(10,TextYCount,"Use WASD for Move and Left MB to Rotate Cam")  :TextYCount+TextYPix

EndIf

; Dies ist ein wenig Monitoring. Damit wir sehen welche Variablen welche Werte annehmen.



Dieser Capter bringt nicht wirklich etwas neues. Aber die WASD
Steuerung macht lust auf mehr. Wie schon gesagt. Mit wenigen
handgriffen lassen sich die standart Problem beim programieren
von Spielen einfach lösen. Ich werde nicht jeden einzelnen Befehl
kommentieren. Wer mer über den Befehlsumfang wissen möcht.
Kann die Offizielle Englische hilfe zu rate ziehen. Wer es lieber auf
Deutsch mag. Die BlitzBasic Community hat eine Actuelle Deutsche
Hilfe am start.

http://www.optima-code.ch/PB/capter-006.zip

Autor:  tft [ 12.01.2009 21:29 ]
Betreff des Beitrags: 

Hallo...

für diejenigen die fragen zum Code oder der Funktion einzelner Code
Segmente haben. Hir einfach peer Mail die Fragen stellen. PM möchte ich
eigentlich nicht, da ich die Antworten auf relevante Fragen sowiso hir Posten
würde.

Gruss TFT

Autor:  tft [ 12.01.2009 21:34 ]
Betreff des Beitrags: 

Hallo ....

wider einen vorgeschmack aufs nächste Capter gefällig .... OK
Sternen Flug....... so simple und einfach ...... in 3 Minuten.

http://www.optima-code.ch/PB/v2.avi

Gruss TFT

Autor:  tft [ 12.01.2009 21:50 ]
Betreff des Beitrags: 

Hallo ....

was mich am meisten stört ist, das B3D keine Gatget Handler für den
Close Botton anbietet. Und beim beänden des Programmes über den Botton
gibts immer den unschönen Programm lost Requester. Da könnte man
glatt auf die Idee kommen den bbSetB3Dhwnd() befehl zu verwenden. Aber
leider gibt das schlussendlich nur frustration. Da es zwar Funktioniert.
Aber auch nicht fiel pracktischer ist. Die PB eigenen Tastatur und Mouse
Befehle funktionieren nur mit WindowEvent() und verursachen LAGs. Und die
B3D eigenen Befehle funktionieren nicht. Weil der Windows Fokus fehlt.

Mein Appell an die Profies hir. Ums Gut zu machen, müste man einen
CallBack an das B3D Screen Fenster anhängen. Wer sowas in der Tasche
hat .... bitte Posten.

Es gibt da eine CloseHandler.DLL ..... mit den Funktionen
InstallCloseHandler(Taste,FensterName)
DeInstallColseHandler()

Wenn das jemand kennt. Würde eine Beschreibung für PB fileicht
reichen.

Gruss TFT

Autor:  tft [ 14.01.2009 20:20 ]
Betreff des Beitrags: 

Hallo ..

Capter 7

So einen Sternen Flug effect ist mit der B3D Engine einfach zu realiseiren.
Dazu benötigen wir lediglich 2000 Kopierte Quader, die wir etwas in Flug-
Richtung in die länge ziehen. Und dann werden sie Zufällig vor der Kamera
plaziert. Dann bewegen sich alle in richtung Kammera und werden neu
positioniert wenn sie sich hinter der Kammera befinden. Dabei schiben wir
diese lediglich auf der Z Achse wider ins Sichtfeld.

InitB3DDaten.pbi

Code:
;
; Capter 007
;

; Mit cubs lassen sich tolle sachen machen ....
;
; sie sind herforagend dafür geeignet. Einen Sternen flug darzustellen.
; Wir könnten auch Sprites oder Spheren verwenden.Aber das machen wir
; zu einem Späteren Zeitpunkt.


Define Cube=bbcreatecube()
bbhideentity(cube)

Dim cubs(2000)

Define i1
For i1 = 0 To 2000
  cubs(i1)=bbcopyentity(Cube)
 
  ;
  ; hir werden die Cubs in Z Richtung verlängert.
  ; Um den Stareffect noch zu verbessern.
 
  bbscaleentity(cubs(i1),0.1,0.1,1)
 
  ;
  ; Ausserdem müssen wir dem Entitymitteilen, das es sich nicht
  ; vom Licht beeinflussen lassen soll.
 
  bbentityfx(cubs(i1),1)
 
  bbmoveentity(cubs(i1),150-Random(300),150-Random(300),150-Random(300)+150)

Next
;
;
;


Project3DLoop.pbi

Code:
;
; Capter 7
;

; Hir wird nun einer der Klassischten Effekte nachgebildet die wol
; Jeder kennt. Ein Sternen flug animation.

For i1 = 0 To 2000
 
  ; Wir bewegen dazu die Cubs in die richtung der Camera.
  ;
  bbmoveentity(cubs(i1),0,0,-1)
 
  ; und prüfen anschliessend ob der Stern schon ausser sichtweite ist,
  ; indem wir die Z Position kontrolieren.
 
  If bbentityZ(cubs(i1))<1.0
   
    ; befindet sich der Steren Cube schweif fast hinter der Camera
    ; So wird er nur in der Z Achse verschoben.
   
    bbpositionentity(cubs(i1),bbentityx(cubs(i1)),bbentityy(cubs(i1)),300)
  EndIf
 
  ;
  ; Da wir ja noch den Code View im hintergrund haben, Werden hir die Cubs
  ; In ihrer Farbe Invertiert.
 
  If CodeWin=0
    bbentitycolor(cubs(i1),$ff,$ff,$ff)
  Else
    bbentitycolor(cubs(i1),$0,$0,$0)
  EndIf
 
Next
;
; Dadurch entsteht dieser Animations effect.



Klein aber fein .......

http://www.optima-code.ch/PB/capter-007.zip

Autor:  tft [ 15.01.2009 11:22 ]
Betreff des Beitrags: 

Hall....

wie wir B3D Objecte erzeugen,positionieren,verschieben,rotieren und
scalieren haben wir jetzt hinreichend durch.

Objecte wie der Quader den wir mit bbCreateCube() erzeugt haben,
bestehen zum einen aus dem Mesh das die Form des Objectes vorgibt,
sowie den Farb und Texture Daten. Es gibt Mesh bezogenen Befehle und
Object bezogene befehle. Ein Objecte wie die Camera oder der Cube
werden allgemein als Entity bezeichnet. Meshs werden auch offt Gitter
Objecte genannt. B3D verwendet die begriffe : GitterObject=Mesh und
Object=Entity. Es gibt Befehle zum verschieben,scalieren und rotieren die
einmal als Entity und einmal als Mesh Variante zur verfügung stehen. Für
weiterreichende Infos schaut euch bitte die BB Hilfe an.

Es gibt weitere Object Typen ausser Camera und Object (Mesh). Ein sehr
interesantes ist das Pivot. Es ist ein Object das nur aus einer
positionsangabe mit Rotations Informationen besteht. Also beim erzeugen
mit bbCreatePivot() erstmal nicht sichtbar. Pivote ist Französisch und
heist Drehpunkt. Jedes Object hat seine eigenen Drehung in XYZ. Es
kann also um sich selber rotieren. Im gegensatzt zu Ogre wird in B3D
immer gleich die Achse eines Objectes gedreht. Das bedeutet das eine
Rotation um die Z Achse eines Objectes .... immer eine Rotation um die Z
achse bleibt. Egal wie die Achsen für Y und Z stehen. Möchte man jetzt
aber ein Object nicht um die eigene Achse, sondern einer Position im
Raum drehen. Wie die Planeten um die Sonne. Dann benutzt man in B3D
die Pivots. Bei B3D können Objecte an andere angehängt werden. Dazu
mus nur der Handler des erzeugten Objectes als Pivot an das neu
erzeugte Object angehängt werden.

P1=bbCreatePivot()
C1=bbCreateCube(P1)

So wird sich natürlich nicht fiel anders bewegen als sonst. Da das Pivot
und der Cube den gleichen Koordinaten ursprung haben. Eine Rotation
mit p1 wird sich daher genauso verhalten wie mit c1. Erst wenn wir den
Cube relativ zum Pivot punkt verschieben. Werden wir eine änderung
feststellen. Dazu können wir bbMoveEntity() und bbTurnEntity() sowie
auch bbPositionEntity() anwenden. Natürlich kann man auch ein Entity als
Pivot angeben. Das ist manchmal nützlich. Da bestimmte befehle wie
ScaleEntity nicht mit Pivot funktionieren. Ist halt kein Mesh vorhanden
das Scaliert werden könnte.

Um Die handhabung von Pivots zu verdeutlichen. Werden wir im
nächstem Capter ein kleines Sonnensystem mit Planeten und Monden
erzeugen.

Autor:  tft [ 17.01.2009 11:16 ]
Betreff des Beitrags: 

Hallo ...

Capter 8

InitB3DDaten.pbi

Code:

;
; Capter 8
;

; eines der grösten Schwierigkeiten beim Arbeiten mit Pivots
; besteht darin. Die bewegungs abhängigkeiten zu reallisieren.
; Wird ein Pivot gedreht oder verschoben. So werden diese an
; die Angehängten Objecte weitergereicht. Ein angehängtes
; Object kann das Pivot an dem es hängt nicht beeinflussen.

bbcamerazoom(cam,1.5)

; Ein Coordinaten Kreutz, damit wir sehen können wie
; die Achsen stehen

Define XYZ_achsenkreutz=bbcreatecube()
bbscalemesh(XYZ_achsenkreutz,0.1,0.1,2)
bbentitycolor(XYZ_achsenkreutz,$ff,0,0)
i=bbcreatecube(XYZ_achsenkreutz)
bbscalemesh(i,2,0.1,0.1)
bbentitycolor(i,$0,$ff,0)
i=bbcreatecube(XYZ_achsenkreutz)
bbscalemesh(i,0.1,2,0.1)
bbentitycolor(i,$0,$0,$ff)
bbhideentity(XYZ_achsenkreutz)

; ------------------------------

; Der Zentrale dre und angle punkt.

Define sonne=bbcreatesphere(16)
i=bbcopyentity(XYZ_achsenkreutz,sonne)

bbentityfx(sonne,1)
bbpositionentity(sonne,0,0,260)
bbscaleentity(sonne,10,10,10,1)
bbentitycolor(sonne,$ff,$ff,$0)
bbturnentity(sonne,15,0,0)

Define light=bbcreatelight(2,sonne)

; Der Planet wird erzeugt, und mit einem Angle Punkt
; an die Sonne gehefftet.

Define PlanetPivot=bbcreatepivot(sonne)
Define Planet=bbcreatesphere(16,PlanetPivot)
i=bbcopyentity(XYZ_achsenkreutz,Planet)

bbscaleentity(Planet,0.5,0.5,0.5)
bbmoveentity(Planet,0,0,10)

; Dann kommt der Mond an den Planeten ... der an der Sonne hängt

Define MondPivot=bbcreatepivot(Planet)
Define Mond=bbcreatesphere(16,MondPivot)
i=bbcopyentity(XYZ_achsenkreutz,Mond)

bbscaleentity(mond,0.2,0.2,0.2)
bbmoveentity(mond,0,0,3)



Project3DLoop.pbi

Code:

;
; Capter 8
;
; Um besser zu sehen wie das mit den abhängigkeiten
; funktioniert, können wir die Rotation der Objecte
; selber dazuschalten. Ich habe die dazugehörigen
; Drehungen entgegen derer der Pivots eingestell.
; Dann kann man sehen wie die Rotationen sich Optisch
; gegenseitig aufheben. Oder verdoppeln.
;
; F5 = Object Rotation entgegen der Pivot Rotation
; F6 = Object Rotation mit der Pivot Rotation

If bbKeydown(#KEY_F5)
  bbturnentity(Sonne,0,-0.2,0)
  bbturnentity(Planet,0,2,0)
ElseIf bbKeydown(#KEY_F6)
  bbturnentity(Sonne,0,0.2,0)
  bbturnentity(Planet,0,-2,0)
EndIf

bbturnentity(PlanetPivot,0,0.2,0)
bbturnentity(MondPivot,0,-2,0)



Spätestens hir wird auffallen , das sich im FrameWork etwas
geändert hat. Die WASD Steuerung wurde ins FrameWork aufgenommen
und eine Rotation um die Z Achse der Camera hinzugefügt. Daher
QWEASD Steuerung :-)

Project2DLoop.pbi

Code:

;
; Capter 8
;

If CodeWin=0

  bbtext(10,30," F5 = Rotate Object +")
  bbtext(10,45," F6 = Rotate Object -")
  bbtext(10,60," Use QWEASD to move camera" )
  bbtext(10,75," Use mouse and RMB rotate camera" )

EndIf



http://www.optima-code.ch/PB/capter-008.zip

Autor:  tft [ 18.01.2009 19:53 ]
Betreff des Beitrags: 

Hallo ...

Capter 9

Will man Rotation eines Objectes mit Angelpunkt vom Pivot
unabhängig verändern. Das machen wir dan so:

InitB3DDaten.pbi

Code:
;
; Capter 9
;

; offt ist es aber wichtig.... den drehpunkt zwar an einem
; Object festzumachen. Aber die Rotation des Objectes soll
; das angehängte object nicht beeinflussen. Dann muss man
; das Pivot manuell an die position des Objectes anpassen.

; Dabei stellt sich dann natürlich heraus. Das die Scalierungen
; nicht mer passen. Daher werden wir 2 verschiedene Scalierungen
; vorbereiten.

bbcamerazoom(cam,1.5)

Define XYZ_achsenkreutz=bbcreatecube()
bbscalemesh(XYZ_achsenkreutz,0.1,0.1,2)
bbentitycolor(XYZ_achsenkreutz,$ff,0,0)
i=bbcreatecube(XYZ_achsenkreutz)
bbscalemesh(i,2,0.1,0.1)
bbentitycolor(i,$0,$ff,0)
i=bbcreatecube(XYZ_achsenkreutz)
bbscalemesh(i,0.1,2,0.1)
bbentitycolor(i,$0,$0,$ff)
bbhideentity(XYZ_achsenkreutz)

Define sonne=bbcreatesphere(16)
i=bbcopyentity(XYZ_achsenkreutz,sonne)

bbentityfx(sonne,1)
bbpositionentity(sonne,0,0,260)
bbscaleentity(sonne,10,10,10,1)
bbentitycolor(sonne,$ff,$ff,$0)
bbturnentity(sonne,15,0,0)

Define light=bbcreatelight(2,sonne)

; dazu lassen wir die Bindung an die Sonne weg

Define PlanetPivot=bbcreatepivot()
Define Planet=bbcreatesphere(16,PlanetPivot)
i=bbcopyentity(XYZ_achsenkreutz,Planet)

;bbscaleentity(Planet,0.5,0.5,0.5)
;bbmoveentity(Planet,0,0,10)
bbscaleentity(Planet,5,5,5)
bbmoveentity(Planet,0,0,100)

; sowie die Bindung an den Planeten

Define MondPivot=bbcreatepivot()
Define Mond=bbcreatesphere(16,MondPivot)
i=bbcopyentity(XYZ_achsenkreutz,Mond)

;bbscaleentity(mond,0.2,0.2,0.2)
;bbmoveentity(mond,0,0,3)
bbscaleentity(mond,2,2,2)
bbmoveentity(mond,0,0,30)




Project3DLoop-pbi

Code:
;
; Capter 9
;
; Dafür müssen wir an dieser Stelle die Objecte Manuell nachfüren.
;

If bbKeydown(#KEY_F5)
  bbturnentity(Sonne,0,-0.2,0)
  bbturnentity(Planet,0,2,0)
ElseIf bbKeydown(#KEY_F6)
  bbturnentity(Sonne,0,0.2,0)
  bbturnentity(Planet,0,-2,0)
EndIf

bbpositionentity(PlanetPivot,bbentityx(Sonne,1),bbentityy(Sonne,1),bbentityz(Sonne,1))
bbpositionentity(MondPivot,bbentityx(Planet,1),bbentityy(Planet,1),bbentityz(Planet,1))

bbturnentity(PlanetPivot,0,0.2,0)
bbturnentity(MondPivot,0,-2,0)




Im nächsten Capter werden wir uns mal den Befehl bbEntityOrder()
genauer ansehen. Dies ist ein sehr mächtiger befehl. Damit lassen
sich im gegensatz zu Ogre die Reihenfolgen festlegen in dehnen die
Objecte gerendert werden sollen. Damit lassen sich tolle Effecte machen.

Seite 3 von 5 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/