Studie: Frameunabhängige Bewegung
Übersicht BlitzBasic Codearchiv
CodeMasterBetreff: Studie: Frameunabhängige Bewegung |
Mo, Feb 20, 2006 23:07 Antworten mit Zitat |
|
---|---|---|
Im Rahmen eines neuen Projektes habe ich eine kurze Studie zu geschwindigkeitsunabhängiger Bewegung programmiert. Denke, es könnte für euch auch ganz nützlich sein:Code: [AUSKLAPPEN] Global g# = 9.80665, Wind# = 0
Global GameSpeed# = 1, FrameTime#, GameTimer%, LastTimer% Type TParticle Field fX# Field fY# Field fSpdX# Field fSpdY# Field fWght# Field fCol% Field fLifetime% Field fStart% Field fGlow# End Type Graphics 800,600,0,2 SetBuffer BackBuffer() While Not KeyDown(1) Cls GameSpeed = GameSpeed + MouseZSpeed() / 20.0 UpdateTimer If GameTimer - LastParticle > 20 Then For i = 1 To 100 TParticle_Create(MouseX(),MouseY(),ATan2(-MouseY(),400-MouseX())+Rand(-20,20),50,Rnd(2,10),$FF0000 + Rand(255) * $100,2000) Next LastParticle = GameTimer EndIf TParticle_Update TParticle_Show Text 0,0, "Time factor: " + GameSpeed Text 0,15,"Time stamp: " + GameTimer Text 0,30,"Wind: " + Wind Flip Wend End Function UpdateTimer() Local lTimer% = MilliSecs() - LastTimer If GameSpeed < 0 Then GameSpeed = 0 FrameTime = GameSpeed * lTimer / 1000.0 GameTimer = GameTimer + Int(GameSpeed * lTimer) LastTimer = MilliSecs() End Function Function TParticle_Create.TParticle(pX#, pY#, pDir#, pSpd#, pWght#, pCol%, pLifetime%) Local lParticle.TParticle = New TParticle lParticle\fX = pX lParticle\fY = pY lParticle\fSpdX = Cos(pDir) * pSpd lParticle\fSpdY = Sin(pDir) * pSpd lParticle\fWght = pWght lParticle\fCol = pCol lParticle\fLifetime = pLifetime lParticle\fStart = GameTimer lParticle\fGlow = 1 Return lParticle End Function Function TParticle_Update() Local lParticle.TParticle Local lCurrentLifetime For lParticle = Each TParticle lCurrentLifetime = GameTimer - lParticle\fStart If (lCurrentLifetime < lParticle\fLifetime) And (lParticle\fX >= 0) And (lParticle\fY >= 0) And (lParticle\fX < GraphicsWidth()) And (lParticle\fY < GraphicsHeight()) Then lParticle\fSpdX = lParticle\fSpdX - lParticle\fSpdX * 0.65 * FrameTime + Wind * 10 * FrameTime lParticle\fSpdY = lParticle\fSpdY + lParticle\fWght * g * FrameTime lParticle\fX = lParticle\fX + (lParticle\fSpdX * 5 + Rnd(-10,10)) * FrameTime lParticle\fY = lParticle\fY + (lParticle\fSpdY * 5 + Rnd(-10,10)) * FrameTime lParticle\fGlow = 1 - (lCurrentLifetime / Float(lParticle\fLifetime))^2 Else Delete lParticle EndIf Next End Function Function TParticle_Show() Local lParticle.TParticle Local lR, lG, lB LockBuffer() For lParticle = Each TParticle If (lParticle\fX >= 0) And (lParticle\fY >= 0) And (lParticle\fX < GraphicsWidth()) And (lParticle\fY < GraphicsHeight()) Then lR = (lParticle\fCol And $FF0000) / $10000 * lParticle\fGlow lG = (lParticle\fCol And $FF00) / $100 * lParticle\fGlow lB = (lParticle\fCol And $FF) * lParticle\fGlow WritePixelFast(lParticle\fX, lParticle\fY, lR * $10000 + lG * $100 + lB) EndIf Next UnlockBuffer() End Function [edit] Steuerung mit dem Mausrad. Alles andere ist selbsterklärend. [edit 2] Die Variablen zur Berechnung der Bewegung sind GameSpeed (festzulegender Zeitraffer-Faktor), FrameTime (Faktor für Bewegungsberechnung) und GameTimer (Zeitindex, zu gebrauchen wie Millisecs()). [edit 3] Die Demo etwas spektakulärer gemacht |
||
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.
Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102 |
- Zuletzt bearbeitet von CodeMaster am Mo, Feb 20, 2006 23:20, insgesamt 4-mal bearbeitet
aMulSieger des Minimalist Compo 01/13 |
Mo, Feb 20, 2006 23:11 Antworten mit Zitat |
|
---|---|---|
Hey danke!
Wollte das grad in mein Spiel einbauen. Da hast du mir einiges an denken(und tippen) erspart^^ |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
Übersicht BlitzBasic Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group