Draw3D ParticleManager [GELÖST]
Übersicht

![]() |
faeXBetreff: Draw3D ParticleManager [GELÖST] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich programmiere noch nicht lange in Blitz, habe mich trotzdem aber mal an eine ParticleEngine, genannt ParticleManager für Draw3D drangemacht. Noch ist sie nicht fertig, ich wollte aber schonmal eine Demo schreiben um zu testen ob sie läuft. Und Bumm, ein Fehler drin. Immer bei Code: [AUSKLAPPEN] Particles.Particle\X = Emitters\X + Rnd(Emitters\XOffMin, Emitters\XOffMax) kommt eine Fehlermeldung: Zitat:Object does not exist.
Und hier der Code: ParticleManager.bb: Code: [AUSKLAPPEN] ; Draw3D ParticleManager
Include "Draw3D.bb" Local i Type Emitter Field X#, Y# ; Emitterposition Field Angle# ; Emitterausrichtung ; Die Ausrichtung hat Auswirkung auf den Auswurf der Partikel! ; Angle=0; XVel=1; YVel=1; Ist nicht gleich Angle=90; XVel=1; YVel=1! Field XOffMin#, XOffMax#, YOffMin#, YOffMax# ; Offset Field XVelMin#, XVelMax#, YVelMin#, YVelMax# ; Velocity Field XFactor#, YFactor# ; Faktoren Field XGravity#, YGravity# ; Gravitation Field StartScaleMin#, StartScaleMax# ; StartSkalierungen Field ScaleFactor#, ScaleAdd# ; Skalierungsverlauf Field StartAngleMin#, StartAngleMax# ; Startausrichtung Field StartRotMin#, StartRotMax# ; StartRotation Field PointInDirection ; In die bewegte Richtung zeigen? Field RotFactor#, RotAdd# ; Rotationsverlauf Field ParticleAddMin%, ParticleAddMax% ; Partikelausschuss Field MaxParticles% ; Maximale Anzahl der Partikel Field ParticleLifeTimeMin%, ParticleLifeTimeMax% ; Lebensdauer Field AlphaTime% ; X Frames vor Schluss anfangen auszublenden Field StartR%, StartG%, StartB% ; Start RGB Werte Field EndR%, EndG%, EndB% ; End RGB Werte Field Image ; Image Field Particles.Particle ; Partikel End Type Type Particle Field X#, Y# ; Position Field XVel#, YVel# ; Velocity Field Angle# ; Ausrichtung Field Rot# ; Rotation Field Scale# ; Skalierung Field LifeTime% ; Restliche Lebenszeit End Type Global Emitters.Emitter Function UpdateParticles() For Emitters.Emitter = Each Emitter For Emitters\Particles.Particle = Each Particle ; Lebenszeit Particles.Particle\LifeTime = Particles\LifeTime - 1 If Particles\LifeTime <= 0 Then Delete Particles ; Bewegung Particles\XVel = Particles\XVel - Emitters\XGravity Particles\XVel = Particles\XVel * Emitters\XFactor Particles\X = Particles\X + Particles\XVel Particles\YVel = Particles\YVel - Emitters\YGravity Particles\YVel = Particles\YVel * Emitters\YFactor Particles\Y = Particles\Y + Particles\YVel ; Ausrichtung If Emitters\PointInDirection Then ; In die Flugrichtung zeigen Particles\Angle = ATan(Particles\YVel / Particles\XVel) ; Steigungsdreieck Else ; Normal rotieren Particles\Rot = Particles\Rot * Emitters\RotFactor Particles\Angle = Particles\Angle + Particles\Rot EndIf ; Skalierung Particles\Scale = (Particles\Scale + Emitters\ScaleAdd) * Emitters\ScaleFactor Next ; Neue Partikel generieren For i = 1 To Rnd(Emitters\ParticleAddMin, Emitters\ParticleAddMax) ; Neuer Partikel Emitters\Particles.Particle = New Particle ; StartPosition Particles.Particle\X = Emitters\X + Rnd(Emitters\XOffMin, Emitters\XOffMax) Particles\Y = Emitters\Y + Rnd(Emitters\YOffMin, Emitters\YOffMax) ; Startausrichtung Particles\Angle = Rnd(Emitters\StartAngleMin, Emitters\StartAngleMax) ; Startskalierung Particles\Scale = Rnd(Emitters\StartScaleMin, Emitters\StartScaleMax) ; Lebenszeit Particles\LifeTime = Rnd(Emitters\ParticleLifeTimeMin, Emitters\ParticleLifeTimeMax) ; Velocity X = Rnd(Emitters\XVelMin, Emitters\XVelMax) ; Ohne Winkel Y = Rnd(Emitters\YVelMin, Emitters\YVelMax) Particles\XVel = X * Cos(Particles\Angle - 90) + Y * Sin(Particles\Angle) ; Mit Winkel Particles\YVel = X * Cos(Particles\Angle) + Y * Sin(Particles\Angle - 90) ; Rotierung Particles\Rot = Rnd(Emitters\StartRotMin, Emitters\StartRotMax) Next Next End Function Function DrawParticles() For Emitters.Emitter = Each Emitter For Emitters\Particles.Particle = Each Particle DrawImage3D(Emitters.Emitter\Image, Particles.Particle\X, Particles\Y, 0, Particles\Angle, Particles\Scale) Next Next End Function Demo1.bb: Code: [AUSKLAPPEN] AppTitle "Draw3D ParticleManager Demo 1"
Include "ParticleManager.bb" Graphics3D 800,600,32,1 Camera = CreateCamera() DrawInit3D(Camera) Origin3D(800,600) Emitters.Emitter = New Emitter Emitters.Emitter\Image = LoadImage3D("Media\Particle-065.png") Emitters\Angle = 0 Emitters\StartRotMin = -2 Emitters\StartRotMax = 2 Emitters\XVelMin = -2 Emitters\XVelMax = 2 Emitters\YVelMin = -2 Emitters\YVelMax = 2 Emitters\XGravity = 0 Emitters\YGravity = .2 Emitters\StartAngleMin = 0 Emitters\StartAngleMax = 10 Emitters\ParticleAddMin = 2 Emitters\ParticleAddMax = 5 Emitters\ParticleLifeTimeMin = 50 Emitters\ParticleLifeTimeMax = 200 MFPS = 60 Period = 1000/MFPS Time = MilliSecs()-Period Repeat Repeat Elapsed = MilliSecs() - time Until Elapsed Ticks=Elapsed/Period Tween#=Float(Elapsed Mod Period) / Float(Period) For U = 0 To Ticks Time = Time + Period If U = Ticks Then CaptureWorld UpdateParticles() UpdateWorld Next DrawParticles() RenderWorld Tween Clear3D() FPS = GetFPS() Text 0,0,FPS Flip False Until KeyHit(1) Function GetFPS() Frames = Frames + 1 If MilliSecs() > LastCheck+1000 Then LastCheck = MilliSecs() FPS = Frames Frames = 0 EndIf Return FPS End Function Hectic's Draw3D muss natürlich im selben verzeichnis liegen ![]() EDIT: Der Link ist nachgetragen. |
||
- Zuletzt bearbeitet von faeX am Di, Dez 30, 2008 20:40, insgesamt einmal bearbeitet
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast ja, soweit ich das sehe, kein Handle darin abgespeichert. Überprüf mal ob die Variable zu dem Zeitpunkt NULL ist.
Für das hier vor der Zeile ein, in der der Fehler auftritt: Code: [AUSKLAPPEN] If Particles.Particle=Null then RuntimeError("In dieser Variable wurde kein Handle zu einem Type-Feld gespeichert!")
MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
faeX |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der fehler schlägt aus.
Aber wie beseitige ich das jetzt? EDIT: Ich meine, ich habe ja direkt davor ein neues Particle erstellt, oder etwa nicht? EDIT2: Problem gelöst: Vor jedes Particles musste noch ein Emitters\ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group