[P]articleSky 1.5 Modul Release

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Suco-X

Betreff: [P]articleSky 1.5 Modul Release

BeitragDi, Mai 17, 2005 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.
Ich habe auch schon lange ein PartikelModul in Planung und wollte es eigentlich schon längst Released haben. Naja, Zeitpunkt ist zwar nicht der beste, aber Konkurenz bringt Ideen und spornt etwas an Wink
Habe es jetzt noch nicht in ein modul gepackt da ich es noch nicht als richtig fertig sehe. Desweiteren habe ich mich zuvor noch nie mit einer Partikel Engine beschäftigt und bin mir deshalb auch nicht sicher ob ich da was hätte besser machen können. Beschreibungen der Methoden werden noch folgen.
Eine Liste der Methoden liegt jedenfalls bei und die Beispiele sind auch beschrieben.
http://www.blitz-pasting.net/i...amp;id=149
und noch ein Screen:
user posted image
Die Lib und 3 erklärte Beispiele sind dabei. Zu mehr bin ich noch nicht gekommen. Falls noch jemand Ideen hat, raus damit.
Dokumentation im Modul vorhanden.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
  • Zuletzt bearbeitet von Suco-X am Sa, Aug 13, 2005 22:37, insgesamt 13-mal bearbeitet

Markus2

BeitragDi, Mai 17, 2005 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht nett aus .
Ich finde aber das es schon zu viele Funktionen sind .

Init z.B. könnte von selbst gehen wenn man ein Partikel
hinzu fügt 8)

Parameter würde ich statt den vielen Funk.
direkt in einer Struktur übergeben .

Und dann nur eine Update Funktion .

Suco-X

Betreff: .......

BeitragDi, Mai 17, 2005 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.
Ja, mit dem Init kann ich weglassen. Aber Parameter direkt an die Struktur übergeben halte ich für zu Benutzerfeindlich. Ich habe ja schon auf Methoden verzichtet die Werte zurückgeben. Aber die Set Methoden halte ich für nötig.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Suco-X

Betreff: .......

BeitragMi, Mai 18, 2005 2:49
Antworten mit Zitat
Benutzer-Profile anzeigen
So, Version 1.1 ist fertig.
http://www.blitz-pasting.net/i...amp;id=149

Changes :
- Einige Kleinigkeiten an der Lib wurden geändert(Init Funktion fällt weg)
und paar fiese Bugs wurden entfernt.
- Beispiele wurden verbessert und es sind neue dazu gekommen.


ToDo :
- Speicherverteilung bei Parents und Groups muss überdacht werden
- Mehr Einstellungsmöglichkeiten
- Api Dokumentation


Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
  • Zuletzt bearbeitet von Suco-X am Sa, Aug 13, 2005 22:37, insgesamt einmal bearbeitet

regaa

BeitragFr, Mai 27, 2005 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab so n bissel rumgespielt mit der Lib, rausgekommen ist dabei das hier:

Code: [AUSKLAPPEN]

Strict

'ParticleSky Lib wird Importiert
Import "../ParticleSky.bmx"

Import "../miscfunctions.bmx"



Graphics 800,600,0,-1

Local particle1_img = TEmitter.LoadParticleImage("../media/particle1.png",False)
Local particle2_img = TEmitter.LoadParticleImage("../media/schild.png",True)

TEmitter.AutoEmitterImage(particle2_img)

' Das Schutzschild

Local Schild:TEmitter
Schild=TEmitter.GetInstance(1)
Schild.SetAlphaGradient(0.2,0.0)
Schild.SetScale(1,1)
Schild.SetLifetime(400)
Schild.SetBlend(LIGHTBLEND)
'Schild.SetRandomGravitation(0.0,0.00,0.04,0.00)
Schild.SetColorGradient(100,255,100, 100,100,255)
'Schild.SetPosition(400,400)

TEmitter.AutoEmitterImage(particle1_img)

' Soul war früher so ne Seele halt :D, kein Bock umzuschreiben
' Stellt jetzt einen LaserSchuss dar (oder so) :)
Local Soul:TEmitter = TEmitter.GetInstance(5)
Soul.SetAlphaGradient(1.0,0.0)
Soul.SetScale(0.3, 0.1)
Soul.SetLifetime(1000)
Soul.SetBlend(LIGHTBLEND)
Soul.SetRandomGravitation(0.05,0.00,0.05,0.00)
Soul.SetTimeOut(100)
Soul.SetColorGradient(100,100,255, 100,100,100)
Soul.SetPosition(60,275)
Soul.SetEndingEmitter(Schild)
Soul.SetOrigin(60.0,0)

' Der untere Strahl
Local Soul2:TEmitter=Soul.Copy()
Soul2.SetPosition(60,325)
Soul2.SetOrigin(60,0)
Const UpdateHz = 85
Global GameSpeed:Float

' Die Schiffe
Local schiff1:TImage=LoadImage("../media/raumschiff1.png")
Local schiff2:TImage=LoadImage("../media/raumschiff1.png")
Local timer:Int=MilliSecs()
Local schutzschild:Int=200

SetClsColor 128,128,128


Local particle3_img = TEmitter.LoadParticleImage("../media/kreis1.png")



'Explosionswolke 1
TEmitter.AutoEmitterImage(particle2_img)

Local Explosion1:TEmitter = TEmitter.GetInstance(50)
Explosion1.SetAlphaGradient(1.0,0.0)
Explosion1.SetBlend(LIGHTBLEND)
Explosion1.SetRandomSpeed(-2.0, -2.0, 2.0, 2.0)
Explosion1.SetScaleGradient(0.2, 0.2, 0.8, 0.8)
Explosion1.SetRandomLifetime(500,1000)
Explosion1.SetColorGradient(255,255,0, 255,0,0)
Explosion1.SetPosition(300,290)



'Explosionswolke 2
Local Explosion2:TEmitter = TEmitter.GetInstance(50)
Explosion2.SetAlphaGradient(1.0,0.0)
Explosion2.SetRandomSpeed(-1.0, -1.0, 1.0, 1.0)
Explosion2.SetScaleGradient(0.2, 0.2, 0.5, 0.5)
Explosion2.SetRandomLifetime(500,1500)
Explosion2.SetColorGradient(255,255,255,128,128,128)
Explosion2.AddToGroup(Explosion1)
Explosion2.SetBlend(LIGHTBLEND)


bglSetSwapInterval(0)
Repeat
Cls

GameSpeed = GetGameSpeed(UpdateHz)

SetRotation 90
DrawImage schiff1,100,275

If schutzschild>0

SetRotation 270
DrawImage schiff2,300,330
SetRotation 0

SetColor 200,200,200
DrawRect 300,120,200,10
SetColor 255,0,0
DrawRect 300,120,schutzschild,10
SetColor 255,255,255

SetColor 0,0,0
DrawText Schutzschild+"/"+200,300,100
EndIf


If MilliSecs()-timer>200 And schutzschild>0
   schutzschild:-5
   timer=MilliSecs()
   If schutzschild<=0
      explosion1.play()
   EndIf
EndIf
TEmitter.Idle(GameSpeed)

If schutzschild>0
Soul.Play()
Soul2.Play()
EndIf
'Schild.Play()




ResetStates()
DrawText "Press Escape",10,10
DrawText "Partikel Anzahl: "+TEmitter.CountParticles(),10,40

DrawText "FPS : "+GetFPS(),10,60

Flip
FlushMem()
Until KeyHit(KEY_ESCAPE)


Allerdings bedarf es einer Modifikation an der Lib:

TParticle.Remove:
Code: [AUSKLAPPEN]

Method Remove()
      If Self.EndingEmitter<>Null
         Self.EndingEmitter.SetPosition(..
         Self.x+EndingEmitter.X_Origin,..
         Self.y+EndingEmitter.Y_Origin)
         Self.EndingEmitter.Play()
      EndIf
      
      Self.ListLink.Remove()
   End Method


etwas weiter oben 2 neue Felder erzeugen:

Code: [AUSKLAPPEN]

Field X_Origin:Float, Y_Origin:Float


Das selbe nochmal für TEmitter:
Code: [AUSKLAPPEN]

Field X_Origin:Float, Y_Origin:Float


Und den Setter:
Code: [AUSKLAPPEN]

   Method SetOrigin(_X:Float, _Y:Float)
      Self.X_Origin=_X
      Self.Y_Origin=_Y
   End Method


Das self ist nur da wegen Sucos Schreibweise Very Happy .

user posted image
user posted image

Ganz nett der Code, fehlen aber noch einige Einstellungsmöglichkeiten, vom Speed her kann ich es nicht beurteilen. Das ist die erste Partikellibrary die ich ausprobiert hab.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
  • Zuletzt bearbeitet von regaa am Fr, Mai 27, 2005 17:19, insgesamt 2-mal bearbeitet

Suco-X

Betreff: .......

BeitragSa, Mai 28, 2005 9:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Schaut schick aus. Mal schauen ob ich heute dazu komme die Doku zu machen und das Modul zu veröffentlichen.
Jedenfalls danke fürs testen.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Suco-X

Betreff: .......

BeitragMo, Mai 30, 2005 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Abend
Da ich soweit keine Bugs mehr feststellen konnte, hier die erste Modul Version.
Einfach ins Modul Verzeichniss von BlitzMax und dann die Samples austesten und selbst ausprobieren. Hier der Link http://www.blitz-pasting.net/i...amp;id=149
Also testet mal bitte mehr und gebt mehr Anregungen.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
  • Zuletzt bearbeitet von Suco-X am Sa, Aug 13, 2005 22:37, insgesamt 2-mal bearbeitet

Suco-X

Betreff: ........

BeitragDo, Jun 16, 2005 4:19
Antworten mit Zitat
Benutzer-Profile anzeigen
So, die version 1.5 ist fertig und es haben sich einige Sachen geändert.
- Objektorientierte und Prozedurale Benutzung möglich
- Verwendung der BB Docs für Beschreibung und Befehlseinfärbung
- Diverse Kleinigkeiten abgeändert
Ich schätze diese Version ist eine der Finalen und soweit Fertig und Bugfrei.
Fehlt nurnoch ein Emitter Editor und ein Renderer für die Explosionen in ein Animiertes Bild. Das aber erst wenn sich ein vernünftiges GUI Modul für BMax findet.
Hier die Neue Version http://www.blitz-pasting.net/i...amp;id=149


Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Dogg0

Betreff: Explosionsemitter in Liste

BeitragMi, Aug 24, 2005 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

zunächst mal finde ich diese partikel engine absolut genial, nur hab ich jetzt ein Problem viele gleiche Explosionen ungefähr zeitgleich darzustellen.

In einer Raumschlacht können ja mehrere Raumschiffe gleichzeitig explodieren. Um das zu realisieren ist mir nur eingefallen die Emitter noch mal in einem Type abzubilden und die einzelnen Objekte in einer Liste zu speichern.
Diese Liste geh ich dann im Gameloop durch und update alle Emitter.

Leider funktioniert das nicht.



Code: [AUSKLAPPEN]


type TExplosion
   field x
   field y
   field lifetime   
   field gamespeed

   field Explosion1:TEmitter
   field Explosion2:TEmitter
   field raumschiff:TEmitter
   field implusion1:TEmitter

   field particle2_img:TImage = LoadParticleImage("N:/blitzmax_zeug/CMLibrary/Library/partikel/partikel1/media/particle1.png")
   field particle3_img:TImage = LoadParticleImage("N:/blitzmax_zeug/CMLibrary/Library/partikel/partikel1/media/kreis1.png")
   'field particle2_img:TImage = LoadParticleImage("partikel/partikel1/media/particle1.png")
   'field particle3_img:TImage = LoadParticleImage("partikel/partikel1/media/kreis1.png")
   
   function create:TExplosion(ax,ay:Int)
      local ex:TExplosion = new TExplosion
      ex.x = ax
      ex.y = ay
      ex.lifetime = 40
 
      'Explosionswolke 1
      ex.Explosion1 = CreateEmitter(50)
      ex.explosion1.EmitterImage = ex.particle2_img
      SetEmitterAlphaGradient(ex.Explosion1, 1.0, 0.0)
      SetEmitterBlend(ex.Explosion1, LIGHTBLEND)
      SetEmitterRandomSpeed(ex.Explosion1, -2.0, -2.0, 2.0, 2.0)
      SetEmitterScaleGradient(ex.Explosion1, 0.2, 0.2, 1.4, 1.4)
      SetEmitterRandomLifetime(ex.Explosion1, 500, 1000)
      SetEmitterColorGradient(ex.Explosion1, 255, 255, 0, 255, 0, 0)
      
      'Explosionswolke 2
      ex.Explosion2 = CreateEmitter(50)
      ex.explosion2.EmitterImage = ex.particle2_img
      SetEmitterAlphaGradient(ex.Explosion2, 1.0, 0.0)
      SetEmitterRandomSpeed(ex.Explosion2, -1.0, -1.0, 1.0, 1.0)
      SetEmitterScaleGradient(ex.Explosion2, 0.2, 0.2, 1, 1)
      SetEmitterRandomLifetime(ex.Explosion2, 500,1500)
      SetEmitterColorGradient(ex.Explosion2, 255, 255, 255, 128, 128, 128)
      AddEmitterToGroup(ex.Explosion2, ex.Explosion1)
      SetEmitterBlend(ex.Explosion2, LIGHTBLEND)

      'AutoEmitterImage(particle3_img)
      ex.Implusion1 = CreateEmitter(5)
      ex.implusion1.EmitterImage = ex.particle3_img
      SetEmitterAlphaGradient(ex.Implusion1, 1.0, 0.0)
      SetEmitterScaleGradient(ex.Implusion1, 0.1, 0.1, 4.0, 4.0)      
      SetEmitterRandomLifetime(ex.Implusion1, 800, 1000)
      SetEmitterBlend(ex.Implusion1, LIGHTBLEND)
      'AddEmitterToGroup(ex.Implusion1, ex.Explosion1)
      SetEmitterColorGradient(ex.Implusion1, 100, 100, 255, 100, 100, 100)
      
      'Raumschiff
      ex.Raumschiff = CreateEmitter(1)
      ex.raumschiff.EmitterImage = ex.particle2_img
      SetEmitterLifetime(ex.Raumschiff, 1)
      SetEmitterScale(ex.Raumschiff, 1.0, 1.0)
      SetEmitterTimeout(ex.Raumschiff, 800)
      SetEmitterEndingEmitter(ex.Raumschiff, ex.Explosion2)

      
      return ex
   End Function

   method getlife:Int()
      return lifetime
   End Method
   
   
   method update()
      GameSpeed = GetGameSpeed(60)
      SetEmitterPosition(raumschiff,x-viewx,y-viewy)
      playemitter(raumschiff)
      IdleEmitters(gamespeed)
      lifetime = lifetime - 1
      ResetStates()
   End Method
End type




type TExplosions
   field exp_list:TList
   
   function create:TExplosions()
      local s:TExplosions = new TExplosions
      s.exp_list = CreateList()
      return s
   End Function
   
   method AddExplosion(Explosion:TExplosion)
      ListAddLast exp_list, explosion
   End Method
   
   method update()
      local ex:TExplosion
      For ex:TExplosion = EachIn exp_list
         'ex.checkCollision(ships.sh_list)
         ex.update()
         'ex.draw()
         If ex.getlife() < 0 Then
            ListRemove(exp_list, ex)
            FlushMem()
         End If
       Next
    End Method
End type




Ich habe versucht eine beispielexplosion implusion abzubilden, jedoch wird so garnichts dargestellt.
Ich denke es hapert an:
SetEmitterEndingEmitter(ex.Raumschiff, ex.Explosion2)
Denn den raumschiff-emitter funktionierts

Hat vielleicht schonmal jemand versucht das ganze in dieser Richtung abzubilden, oder hat jemand ne andere Idee, wie man viele Explosionen gleichzeitig darstellen kann?

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group