Rauchspur

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Travis

Betreff: Rauchspur

BeitragMi, Jul 14, 2004 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Lange habe ich nach einem Effekt für möglichst realistische Rauchspuren, für Raumschifftriebwerke oder Raketen gesucht. Weil ich leider nichts Gescheites finden konnte, habe ich mich mal selbst drangesetzt und was dabei herausgekommen ist, möchte ich euch nicht vorenhalten.

Zu dem Code wird ein 40x40 Pic einer Grauen Rauchwolke auf schwarzem Hintergrund benötigt. Ich habe dieses Bild und den Code zu einem Archiv zusammengefasst.

http://home.t-online.de/home/D.../Rauch.rar(3KB)

EDIT vom 18.07.04: Ich habe jetzt noch ein bisschen mehr Speed herausgeholt, indem ich die verbrauchten Sprites nicht mehr lösche und für neue Rauchwolken einfach wiederverwende. So kann ich etwa 300 Sprites mit immerhin noch 300fps darstellen und aktualisieren.


[syntax="bb":1:e244e211d6]
; Rauchwolken
; Copyright (C) Juli 2004, Daniel Nobis

; Halten Sie die linke Maustaste gedrückt und bewegen Sie die
; Maus. Sie sehen, wie hinter dem Mauszeiger Rauchwolken entstehen.

Graphics3D 800,600,16,2
SetBuffer BackBuffer()

Global FPSSEC = MilliSecs(), FPS, FRAMES
Global Sprites, Aktiv

Global Rauch = LoadTexture("Rauch.png",4)

Type Rauch
Field x,y,rad,entity,ColorG,status,Timer1
End Type

Camera = CreateCamera()



; --- Hauptschleife ---
Repeat
Cls

If MouseDown(1) And MilliSecs()-Timer1 > 1 Then
NewRauch(MouseX(),MouseY())
Timer1 = MilliSecs()
EndIf

UpdateRauch()

RenderWorld()

Text 0,0, "FPS: " + FPS()
Text 0,10, "Sprites: " + sprites + " davon aktiv: " + Aktiv

Flip 0
Until KeyHit(1)
End
; --- Hauptschleife ---



; --- Rauchwolke erstellen ---
Function NewRauch(x,y)
If Sprites < 800 Then
r.rauch = New rauch
r\rad = 1
x = x - r\rad/2
y = y - r\rad/2
r\x = (x*2)-800+r\rad
r\y = -(y*2)+600-r\rad
r\status = 1
r\entity = CreateSprite()
EntityTexture r\entity, Rauch
EntityColor r\entity, r\rad*10, 0, 0
ScaleSprite r\entity, r\rad, r\rad
EntityAlpha r\entity, .3
PositionEntity r\entity, r\x,r\y,800
Sprites = Sprites + 1
Aktiv = Aktiv + 1
EndIf

If Sprites => 800 Then
For r.rauch = Each rauch
If r\status = 0 Then
r\rad = 1
x = x - r\rad/2
y = y - r\rad/2
r\x = (x*2)-800+r\rad
r\y = -(y*2)+600-r\rad
r\status = 1
EntityTexture r\entity, Rauch
EntityColor r\entity, r\rad*10, 0, 0
ScaleSprite r\entity, r\rad, r\rad
EntityAlpha r\entity, .2
PositionEntity r\entity, r\x,r\y,800
ShowEntity r\entity
Aktiv = Aktiv + 1
Return
EndIf
Next
EndIf
End Function
; --- Rauchwolke erstellen ---



; --- Rauchwolken aktualisieren ---
Function UpdateRauch()
For r.rauch = Each rauch

If r\status = 1 Then
If MilliSecs()-r\Timer1 > 20 Then
r\timer1 = MilliSecs()
r\rad = r\rad + 2
If r\rad > 100 Then
HideEntity r\entity
r\status = 0
Aktiv = Aktiv - 1
EndIf
EndIf

r\ColorG = 255 - r\rad * 2.5

EntityColor r\entity, r\colorG, r\colorG, r\colorG
ScaleSprite r\entity, r\rad, r\rad
PositionEntity r\entity, r\x,r\y,800
EndIf

Next
End Function
; --- Rauchwolken aktualisieren ---



; --- FPS anzeigen ---
Function FPS()

FRAMES = FRAMES + 1
If MilliSecs() - FPSSEC => 1000 Then
FPS = FRAMES
FRAMES = 0
FPSSEC = MilliSecs()
EndIf

Return FPS
End Function
; --- FPS anzeigen ---
[/syntax:1:e244e211d6]
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
  • Zuletzt bearbeitet von Travis am So, Jul 18, 2004 15:24, insgesamt 3-mal bearbeitet

Firstdeathmaker

BeitragMi, Jul 14, 2004 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht doch recht gut aus. Jedoch sind da 2 Sachen die mich stören:

-Der Rauch ist zu klein, zu wenig zu sehen.

-Das ganze ist zu langsam. Wenn man z.B. 3 Raumschiffe hat, die Rauchspuren ziehen, würde das ganze anfangen zu ruckeln.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

Blitzkrieg Bop

BeitragMi, Jul 14, 2004 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup, ganz guter Effekt! Bloß das ganze sollte heller bzw. mehr zu sehen sein.
~ Hey Ho Let's Go ~

Travis

BeitragMi, Jul 14, 2004 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, man könnte den Alphawert noch ein Stück weiter hochsetzen, damit es heller wird. Ist jetzt ziemlich weit unten.

@ Firstdeathmaker
Ich wüsste nicht, was man da noch optimieren könnte. Allerdings ist es für mein Spiel wirklich zu langsam.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Edlothiol

BeitragDo, Jul 15, 2004 8:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst es ja SingleSurface machen...

Mr.Keks

BeitragDo, Jul 15, 2004 10:24
Antworten mit Zitat
Benutzer-Profile anzeigen
tjo, mit meiner teilweise auf singlesurface basierenden aepartikelengine kann das von der geschwindigkeit her tatsächlich nicht mithalten Wink *selbstlob*

ansonsten wäre echtzeitberechnung noch was tolles...
MrKeks.net

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group