Partikelsystem

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Blitzcoder

Newsposter

Betreff: Partikelsystem

BeitragFr, Jan 05, 2007 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
So, und schon wieder gibt es ein Modul von mir. Ein BMax 2D Partikelsystem. Es ist nur für Windows kompiliert. Mac und Linux User müssen es eben noch kurz kompilieren. Bei dem Beispiel stehen oben die Wichtigsten Werte eingeblendet und lassen sich mit den dahinterstehenden Tasten verändern! Allerdings sind es nicht alle Funktionen. Nur die wichtigsten.
Download Modul und Beispiel(Auch als EXE für nicht BMax User)

Befehlserkärung:
TEmitter.create(x,y,"PfadZurGrafik") Erstellt einen neuen Emitter. Zurückgegeben wird ein TEmitter Handle.
TEmitter.Update() Kommt in die Hauptschleife. Updatet alle Emitter.
TEmitter.draw() Zeichnet alle Partikel. Auch in die Hauptschleife damit
emitter.setemitrate(er:int) Legt die Zahl der neuen Partikel pro Sekunde fest
emitter.setparticlelifetime(plt:int) Legt die Lebensdauer der Partikel in ms fest
emitter.setrotation(rot:int) Legt die Richtung des Emitter fest. Angabe in Grad.
emitter.setrotationvar(rv:int) Legt die Variation der Richtung fest. Angabe in Grad
emitter.Setwindx(wx:float) Legt den Wind der X Achse fest.
emitter.setwindy(wy:float) Legt den Wind der Y Achse fest.
emitter.setwind(wx:float,wy:Float) Legt den Wind fest
TEmitter.setglobalwind(wx:float,wy:float) Setzt globalen Wind
emitter.setstartalpha(sa:float) Legt den Alpha Wert der Partikel bei ihrem Erstellen fest
emitter.setendalpha(ea:Float) Legt den Alpha Wert der Partikel am Ende ihrer Lebensdauer fest
emitter.setparticlespeed(ps:float) Legt die Geschwindigkeit der Partikel fest
emitter.setparticlespeedvar(psv:float) Legt die Variation der Partikelgeschwindigkeit fest
emitter.setparticlescalestart(psa:float) Legt die Anfangsgrösse der Partikel fest
emitter.setparticlescaleend(pse:float) Legt die Endgrösse der Partikel fest.
emitter.setparticlestartcolor(r:int,g:int,b:int) Legt die Anfangsfarbe der Partikel fest. So kann man die Partikel langsam die Farbe ändern lassen
emitter.setparticleendcolor(r:int,g:int,b:int) Legt die Endfarbe der Partikel fest
emitter.setx(x:int) Ändert die X Position des Emitters
emitter.sety(y:int) Ändert die Y Position des Emitters
emitter.setparticlerotation(rot:float) Partikel um ihre Eigene Achse drehen lassen
emitter.setblend(blend) Blend Mode (LIGHTBLEND, ALPHABLEND etc.) für den Emitter festlegen
emitter.enable() Schaltet den Emitter ein
emitter.disable() Schaltet den Emitter aus

Beispiel:
Code: [AUSKLAPPEN]
SuperStrict

Import Blitzcoder.particle

Graphics 800,600,0
SetBlend(ALPHABLEND)

Global emitter:TEmitter = TEmitter.create(400,300,"particle.png")


Global fps_time:Int=MilliSecs()
Global fps:Int
Global fps_count:Int

Global timer:Int=MilliSecs()

Local r_start:Int = 255, r_end:Int = 255
Local g_start:Int = 255, g_end:Int = 0
Local b_start:Int      , b_end:Int = 0
Local rot:Int=0
Local rot_var:Int=15
Local wx:Float=0
Local wy:Float=0
Local s_start:Float=0.1
Local s_end:Float=0.8
Local par_rot:Float=0

While Not KeyDown(KEY_ESCAPE) And Not AppTerminate()



   If (MilliSecs()-timer)>16 Then

      TEmitter.update()

      If KeyDown(KEY_Q) Then r_start:+1
      If KeyDown(KEY_W) Then g_start:+1
      If KeyDown(KEY_E) Then b_start:+1   
   
      If KeyDown(KEY_A) Then r_start:-1
      If KeyDown(KEY_S) Then g_start:-1
      If KeyDown(KEY_D) Then b_start:-1   

      If KeyDown(KEY_R) Then r_end:+1
      If KeyDown(KEY_T) Then g_end:+1
      If KeyDown(KEY_Z) Then b_end:+1   
   
      If KeyDown(KEY_F) Then r_end:-1
      If KeyDown(KEY_G) Then g_end:-1
      If KeyDown(KEY_H) Then b_end:-1
   
      If KeyDown(KEY_Y) Then rot:-2
      If KeyDown(KEY_X) Then rot:+2
   
      If KeyDown(KEY_PAGEUP) Then rot_var:+1
      If KeyDown(KEY_PAGEDOWN) Then rot_var:-1
            
      If KeyDown(KEY_UP)    Then wy:-0.1
      If KeyDown(KEY_DOWN)  Then wy:+0.1
      If KeyDown(KEY_LEFT)  Then wx:-0.1
      If KeyDown(KEY_RIGHT) Then wx:+0.1
      
      If KeyDown(KEY_I) Then s_start:+0.01
      If KeyDown(KEY_K) Then s_start:-0.01

      If KeyDown(KEY_O) Then s_end:+0.01
      If KeyDown(KEY_L) Then s_end:-0.01
      
      If KeyDown(KEY_C) Then par_rot:-0.1
      If KeyDown(KEY_V) Then par_rot:+0.1

      If KeyDown(KEY_M) Then
         r_start=0
         g_start=0
         b_start=0
         r_end=255
         g_end=255
         b_end=255
         rot=-90
         rot_var=15
         wx=1.3
         wy=-0.2
         s_start=0.1
         s_end=1.1
         par_rot=0.2
      EndIf
      

      
      emitter.setparticlestartcolor(r_start,g_start,b_start)
      emitter.setparticleendcolor(r_end,g_end,b_end)
   
      emitter.setparticlescalestart(s_start)
      emitter.setparticlescaleend(s_end)
   
      emitter.setwindx(wx)
      emitter.setwindy(wy)
   
      emitter.setrotationvar(rot_var)
   
      emitter.setrotation(rot)
      emitter.setparticlerotation(par_rot)
   
      emitter.setx(MouseX())
      emitter.sety(MouseY())
      
      timer=MilliSecs()
   EndIf
      
   SetScale 1,1
   SetAlpha 1
   SetRotation 0
   SetColor 255,255,255
   DrawText "BMAX PARTICLE SYSTEM | COPYRIGHT(c) 2007 by Johannes Wotzka",0,0
   DrawText "START COLOR: "+r_start+"|"+g_start+"|"+b_start+"    PRESS Q/A  W/S  E/D",0,15
   DrawText "END   COLOR: "+r_end+"|"+g_end+"|"+b_end+"    PRESS R/F  T/G  Z/H",0,30
   DrawText "ROTATION: "+rot+"    PRESS X/Y",0,45
   DrawText "ROTATION VARIATION: "+rot_var+"   PRESS PAGE UP/DOWN",0,60
   DrawText "WINDX: "+wx+" WINDY: "+wy+" PRESS UP/DOWN/LEFT/RIGHT",0,75
   DrawText "START SCALE: "+s_start+" END SCALE: "+s_end+"   PRESS I/K  O/L",0,90
   DrawText "PARTICLE ROTATION: "+par_rot+"    PRESS C/V",0,105
   DrawText "FOR SIMPLE SMOKE PRESS M",0,130
               
   DrawText "FPS: "+getfps(),700,0
      
   TEmitter.draw()

         
   Flip 0; Cls
Wend


Function getfps:Int()
   fps_count:+1
   If (MilliSecs()-fps_time)>500 Then
      fps=fps_count*2
      fps_time=MilliSecs()
      fps_count=0
   EndIf
   Return fps
End Function


Screenshot:
user posted image
user posted image

Ich habe vor, das ganze noch zu erweitern. Also wäre es gut, wenn ihr mir sagen würdet, was ich ergänzen/verändern soll.

MfG Blitzcoder
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)
  • Zuletzt bearbeitet von Blitzcoder am Mo, Mai 11, 2009 22:12, insgesamt 9-mal bearbeitet

Eingeproggt

BeitragFr, Jan 05, 2007 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist nicht schlecht geworden, nur find ichs komisch, dass man negative Farben verwenden kann Rolling Eyes
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Blitzcoder

Newsposter

BeitragFr, Jan 05, 2007 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Die bringen ja nichts. Ich hab nur in dem Beispiel keinen Begrenzer eingebaut.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

Blitzcoder

Newsposter

BeitragFr, Jan 05, 2007 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
[Update V1.01]

* Partikel Rotation hinzugefügt. Partikel können sich jetzt um ihre eigene Achse drehen. SetParticleRotation.

Download siehe oben.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

Blitzcoder

Newsposter

BeitragSo, Jan 07, 2007 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
[UPDATE V 1.02]

Methode Setblend(blend) Hinzugefügt. Man kann jetzt für jeden Emitter einzeln den Blend Mode festlegen. Einfach die Standard BMAX Modes SHADEBLEND, LIGHTBLEND etc. nehmen.
Methoden enable() und disable() schalten den Emitter an/aus.

Download siehe oben.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

Blitzcoder

Newsposter

BeitragDi, Feb 27, 2007 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
[UPDATE V 1.03]

Neu ist die Funktion TEmitter.SetGlobalWind(x,y) um für alle Emitter Wind zu setzen. Auch neu ist die emitter.SetWind(x,y), nicht mehr 2 Funktionen.

Download siehe oben.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group