Brennender-Fässer-Algorithmus : Verbesserungsvorschläge
Übersicht

TerrorMachineBetreff: Brennender-Fässer-Algorithmus : Verbesserungsvorschläge |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab hier mal ein paar Funktionen geschrieben um einfach ein Fass zu erstellen, anzuzünden und explodieren zu lassen. Alles mit Schatten und Physik.
Leider verursacht der Rauch und das Feuer einen Fehler im Schattensystem (Devil System). Vllt weiß jemand, warum das so ist und ob man an der Explosion noch was verbessern könnte. Hier zwei Downloadlinks (selber Inhalt): // http://www.megaupload.com/?d=E5VYBCN0 <= nur im Notfall http://onkelz.fasthoster.de/Fass.zip Link kopieren und nicht draufklicken! Hier auch noch der Quellcode der beiden Dateien: Beispiel.bb: Code: [AUSKLAPPEN] Graphics3D 1024,768,32,1 SetBuffer BackBuffer() AppTitle "Fässer Beispiel" Include "Funktionen.bb" cam=CreateCamera() MoveEntity cam,0,20,-25 RotateEntity cam,40,0,0 light=CreateLight() PositionEntity light,20,20,20 timer=CreateTimer(30) InitParticles(cam) InitShadows(cam) SetShadowLight(light) InitPhysics() SetPhysicCamera(cam) map=CreateCube() ScaleEntity map,100,1,100 PointEntity light,map maptex=LoadTexture("Media\Sand.jpg") EntityTexture(map,maptex) ScaleTexture maptex,.1,.1 SetStaticPhysicMesh(map) SetShadowMesh(map,False) fass=CreateFass("Media\Fass.bmp",1,1,32,0,20,0) While Not KeyHit(1) Cls If MouseX()=0 Or MouseX()=1021 Or MouseY()=0 Or MouseY()=765 Then MoveMouse 512,384 RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 If KeyDown(17) Then MoveEntity cam,0,0,1 If KeyDown(31) Then MoveEntity cam,0,0,-1 If KeyDown(30) Then MoveEntity cam,-1,0,0 If KeyDown(32) Then MoveEntity cam,1,0,0 If MouseHit(1) Then FassEntzuenden(fass) ;<= Fass mit dem linken Mousebutton anzünden UpdateFass(1,1) UpdateWorld RenderWorld WaitTimer(timer) Flip Wend FreeParticles() ClearWorld End Funktionen.bb Code: [AUSKLAPPEN] Include "Engines\DevilShadowSystem.bb" Include "Engines\ShadowVolumes.bb" Include "Engines\UserInterface.bb" Include "Engines\DevilPhysicEngine.bb" Include "Engines\UserInterface2.bb" Include "Engines\DevilParticleSystem.bb" ;-- Type fass Field nr Field id Field physid Field health Field feuerstarttime Field expstarttime Field feueremitter Field smokeemitter Field expemitter End Type ;-- Global fass_anzahl ;-- Global fass_feuer = CreateTemplate() SetTemplateInterval(fass_feuer,3) SetTemplateEmitterLifeTime(fass_feuer,-1) SetTemplateParticleLifeTime(fass_feuer,4,4) SetTemplateTexture(fass_feuer,"Media\Fire.jpg",3,3) SetTemplateOffset(fass_feuer,-0.3,0.3,-0.3,0.3,-0.3,0.3) SetTemplateVelocity(fass_feuer,-0.04,0.04,0.1,0.27,-0.04,0.04) SetTemplateAlphaVel(fass_feuer,False) SetTemplateSize(fass_feuer,1.5,1.5) SetTemplateColors(fass_feuer,$FFFFFF,$FFBB00) ;-- Global fass_explosion = CreateTemplate() SetTemplateEmitterBlend(fass_explosion, 3) SetTemplateInterval(fass_explosion, 1) SetTemplateParticlesPerInterval(fass_explosion, 3) SetTemplateEmitterLifeTime(fass_explosion, 1) SetTemplateParticleLifeTime(fass_explosion, 50, 60) SetTemplateTexture(fass_explosion, "Media\Smoke.png", 3, 3) SetTemplateOffset(fass_explosion, -.7, .7, -.7, .7, .3, 1.7) SetTemplateVelocity(fass_explosion, -.03, .03, -.03, .03, -.03, .03) SetTemplateSize(fass_explosion, 5.2, 5.2) SetTemplateAlphaVel(fass_explosion, True) SetTemplateColors(fass_explosion, $FFFF00, $FFAA44) ;-- Global fass_smoke = CreateTemplate() SetTemplateEmitterBlend(fass_smoke, 1) SetTemplateInterval(fass_smoke, 5) SetTemplateEmitterLifeTime(fass_smoke, 50) SetTemplateParticleLifeTime(fass_smoke, 20, 35) SetTemplateTexture(fass_smoke, "Media\Smoke.png", 2, 1) SetTemplateOffset(fass_smoke, -.3, .3, -.3, .3, -.3, .3) SetTemplateVelocity(fass_smoke, -.04, .04, .1, .2, -.04, .04) SetTemplateAlphaVel(fass_smoke, True) SetTemplateSize(fass_smoke, 1.5, 1.5, .5, 1.5) SetTemplateSizeVel(fass_smoke, .01, 1.01) ;-- Function CreateFass(texturepath$,shadows=0,physik=0,segments=32,posx=0,posy=0,posz=0) f.fass = New fass fass_anzahl = fass_anzahl + 1 f\nr = fass_anzahl f\id = CreateCylinder(segments) EntityTexture f\id,LoadTexture(texturepath$) ScaleEntity f\id,1,1.5,1 PositionEntity f\id,posx,posy,posz f\health = 100 If shadows=1 Then SetShadowMesh(f\id) If physik=1 Then f\physid = SetPhysicMesh(f\id) SetPhysicMeshPosition(f\physid,posx,posy,posz) EndIf EntityPickMode f\id,5 Return f\nr End Function ;-- Function UpdateFass(shadows=0,physik=0) For f.fass = Each fass If f\health = -1 Then PositionEntity f\feueremitter,EntityX(f\id),EntityY(f\id)-1.3,EntityZ(f\id) PositionEntity f\smokeemitter,EntityX(f\id),EntityY(f\id)-1.3,EntityZ(f\id) EndIf If f\health = -2 Then PositionEntity f\expemitter,EntityX(f\id),EntityY(f\id)-1.3,EntityZ(f\id) EndIf If f\health = 0 Then FassEntzuenden(f\nr) If f\health = -1 And (MilliSecs() - f\feuerstarttime) > 2000 Then FassExplosion(f\nr) If f\health = -2 And (MilliSecs() - f\expstarttime) > 1500 Then DeleteFass(f\nr) Next UpdateParticles() Render(1) UpdatePhysics(.1) End Function ;-- Function FassEntzuenden(fassnr) For f.fass = Each fass If f\nr = fassnr Then found=1:Exit Next If found<>1 Then Return 0 f\feueremitter = CreatePivot(f\id) PositionEntity f\feueremitter,EntityX(f\id),EntityY(f\id)-1.3,EntityZ(f\id) SetEmitter f\feueremitter,fass_feuer f\smokeemitter = CreatePivot(f\id) PositionEntity f\smokeemitter,EntityX(f\feueremitter),EntityY(f\feueremitter)-1.3,EntityZ(f\feueremitter) SetEmitter f\smokeemitter,fass_smoke f\feuerstarttime = MilliSecs() PlaySound(LoadSound("Media\Feuer.mp3")) f\health = -1 found = 0 Return 1 End Function ;-- Function FassExplosion(fassnr) For f.fass = Each fass If f\nr = fassnr Then found=1:Exit Next If found<>1 Then Return 0 FreeEmitter(f\feueremitter) FreeEmitter(f\smokeemitter) f\expemitter = CreatePivot(f\id) PositionEntity f\expemitter,EntityX(f\id),EntityY(f\id)-1.9,EntityZ(f\id) SetEmitter f\expemitter,fass_explosion f\expstarttime = MilliSecs() DeletePhysicMesh(f\physid) DeleteShadowMesh(f\id) PlaySound(LoadSound("Media\Explosion.wav")) HideEntity f\id f\health = -2 found = 0 Return 1 End Function ;-- Function DeleteFass(fassnr) For f.fass = Each fass If f\nr = fassnr Then found=1:Exit Next If found<>1 Then Return 0 FreeEmitter(f\expemitter) FreeEntity(f\id) Delete f found = 0 Return 1 End Function MfG TerrorMachine |
||
- Zuletzt bearbeitet von TerrorMachine am Do, März 19, 2009 9:08, insgesamt 2-mal bearbeitet
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
nach jahrelangem Warten in der Warteschleife habe ich endlich dein Code, der verabschiedet sich allerdings immer mit einem Function DX7_SetSystemProperties not found. was ist da los ? Greez TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
TerrorMachine |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab gerade gesehen, dass der Upload das Userlibs-Verzeichnis im Download zerschossen hat. Da ist nur die Physik drin und die ist kaputt...
Hab hier nur die Userlibs nochmal hochgeladen: http://onkelz.fasthoster.de/Userlibs.zip Jetz sollte es (endlich) gehen Edit: Hab auch das Archiv erneuert. Leider nur das auf meinem Webspace. Das sollte jetzt funktionieren. Megaupload nur nehmen, wenn das andere down ist. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group