PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Effekte: Wie verwenden?



monky2k6
14.06.2008, 19:31
Hey ho!

Ich habe mich heute wieder rangemacht, die SWEP weiter zu coden die ich schon vor meinem PC abbau angefangen habe.
Und ich wollte dafür nun zum ersten mal auch Effekte benutzen.

Mein Problem ist jetzt, das ich zwar Effekte über util.effects erzeugen kann, diese aber nur kurz zu sehen sind, bzw. wenn ich es schaffen sollte das ein Effekt erstmal da bleibt, wie deaktiviere ich diesen dann wieder?

Also ich stell mir das so vor:
Ich habe eine Swep, die bei Linksklick irgendwas ausführt (das funktioniert auch schon) und einen Effekt erzeugt, und wenn ich Rechtklick mache, stoppt die funktion (funktioniert auch schon) und der Effekt verschwindet.

Wie mach ich sowas? Starten und Stoppen eines Effekts auf Knopfdruck?

Müsste ich mir dafür erstmal selber einen Effekt schreiben?
Und wenn ja: Kennt wer ein gutes Tutorial? (Photoshop Kenntnisse sind für gegebenfalls benötigte Sprites vorhanden)


Hoffe es weiß wer Rat!

Pac_187
14.06.2008, 19:40
Also wenn du dir deinen eigenen Effekt bastelst kannst du dort
die "Life-Time" ( Lebenszeit ) einstellen wie lange ein einzelnes
Sprite am leben bleiben soll.


Hier z.B. der Code von der Explosion meines Molotov's



/*------------------------------
Molotov Explosion effect
by Pac_187
---------------------------------*/



function EFFECT:Init( data )

self.Position = data:GetOrigin()
local Pos = self.Position -- "Shortcut" für die Position
local Norm = Vector(0,0,1) -- "Shortcut" für einen Vector

Pos = Pos + Norm * 2 -- Position ( kombiniert aus dem Pos-"Shortcut" + Norm-"Shortcut" * 2 )

local emitter = ParticleEmitter( Pos ) -- "Shortcut" für den Effekt + Position

-- Anfang unseres Effektes

for i=1, 40 do

local particle = emitter:Add( "sprites/flamelet"..tostring( math.random( 1, 5 ) ), Pos + Vector( math.random( -50, 50 ), math.random( -50, 50 ), math.random( 10, 150 ) ) ) -- Unser Effekt: ( "PFAD ZUM EFFEKT", POSITION_DES_EFFEKTES )

particle:SetVelocity( Vector( math.random( -50, 50), math.random( -50, 50 ), math.random( 5, 10 ) ) ) -- Geschwindigkeit mit der sich der Effekt bewegen soll
particle:SetDieTime( math.random( 8, 10 ) ) -- Zeit in welcher der Effekt "seterben" soll
particle:SetStartAlpha( math.random( 100, 200 ) ) -- Durchsichtigkeit des Effektes
particle:SetStartSize( math.random( 40, 60 ) ) -- Anfangsgröße des Effektes
particle:SetEndSize( math.random( 60, 90 ) ) -- Endgröße/Maximalgröße des Effektes
particle:SetRoll( math.random( -360, 360 ) ) -- Wie schnell sich der Effekt "drehen" soll ( wie z.B. eine Rauchwolke)
particle:SetRollDelta( math.random( -0.6, 0.6 ) ) -- <<Leider keine Ahungn>>
particle:SetColor( 255, 255, 255 ) -- Farbe des Effektes ( Rot, Grün, Blau )
particle:VelocityDecay( true ) -- Ob die Geschwindigeit ( siehe oben ) "zerfallen" kann. Also, ob sich der Effekt langsamer bewegen darf
end


for i=1, 60 do

local particle = emitter:Add( "particle/mat1", Pos + Vector( math.random( -150, 150 ), math.random( -150, 150 ), math.random( 20, 100 ) ) ) -- Unser Effekt: ( "PFAD ZUM EFFEKT", POSITION_DES_EFFEKTES )

particle:SetVelocity( Vector( math.random( -100, 100 ), math.random( -100, 100 ), math.random( 50, 100 ) ) ) -- Geschwindigkeit mit der sich der Effekt bewegen soll
particle:SetDieTime( math.random( 8, 15 ) ) -- Zeit in welcher der Effekt "seterben" soll
particle:SetStartAlpha( math.random( 150, 255 ) ) -- Durchsichtigkeit des Effektes
particle:SetStartSize( math.random( 40, 80 ) ) -- Anfangsgröße des Effektes
particle:SetEndSize( math.random( 100, 350 ) ) -- Endgröße/Maximalgröße des Effektes
particle:SetRoll( math.random( -360, 360 ) ) -- Wie schnell sich der Effekt "drehen" soll ( wie z.B. eine Rauchwolke)
particle:SetRollDelta( math.random( -0.8, 0.8 ) ) -- <<Leider keine Ahungn>>
particle:SetColor( 255, 255, 255 ) -- Farbe des Effektes ( Rot, Grün, Blau )
particle:VelocityDecay( true ) -- Ob die Geschwindigeit ( siehe oben ) "zerfallen" kann. Also, ob sich der Effekt langsamer bewegen darf
end

-- Ende des Effekts


end

function EFFECT:Think( )

return false
end


function EFFECT:Render()
end

monky2k6
14.06.2008, 19:51
Hm.. nicht ganz das was ich suche, da der Effekt nach einem nicht genau bestimmten Zeitraum sterben soll :-?

Aber danke für den Code, da ich wahrscheinlich um das schreiben eines eigenen Effektes nicht herum kommen werde =(