"For of War" Problem
Übersicht

RaptorBetreff: "For of War" Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, hab ein kleines Problem, und zwar möchte ich in meinem Strategiespiel diesen "FOG OF WAR" einbinden.
Dachte da an folgende Lösung: Zuererst lade ich eine Textur die Grau ist, erstelle eine Plane und Ordne sie über dem Terrain an und ziehe die textur darüber. Code: [AUSKLAPPEN] nebel_tex=LoadTexture("gfx\map\nebel.bmp",6) ScaleTexture nebel_tex, ML_Mapgroesse%/2, ML_Mapgroesse%/2 nebel_schicht = CreatePlane() EntityTexture nebel_schicht,nebel_tex,0,1 EntityAlpha nebel_schicht,0.5 PositionEntity nebel_schicht, -2, 10, 5 ;-2,20,1 Soweit so gut. Das Ergebniss sieht garnicht mal so schlecht aus. Jetzt die Function die die Textur an den Stellen unsichtbar macht wo sich Einheiten befinden: Code: [AUSKLAPPEN] Function Fog_of_War_Einheiten_anzeige() SetBuffer TextureBuffer (nebel_tex) Color 0,0,0 Oval 150, 10, 10,10,1 SetBuffer BackBuffer() End Function Jetzt zum Problem: Er zeichnet an den angebenen Koordinaten einen Schwarzen Kreis. Wie kann ich diesen Kreis jetzt unsichtbar machen ? Oder kannt jemand eine schnellere oder bessere Art ? Danke |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
du musst mir einem eigenen algo und ql:writepixelfast den kreis zeichnen. bei ql:writepixelfast kannst du auch das alpha angeben.
edit: ach warte, weil ich heute einen ganz besonders tollen tag habe, paste ich hier mal die fogofwarroutine meines weltraumstrategiespiels rein. recht leicht zu lesen, denke ich. Code: [AUSKLAPPEN] ; routinen für den fog of war!
Global fow_mesh ; die fow-plane ist fürs clipping in meherere teilmeshes unterteilt, die unter diesem parent ; zusammengefasst sind. Global fow_tex ; der fow selbst steht in dieser texture Global fow_px, fow_py ; der fog of war wird nur mit wenigen pixeln pro frame aktuallisiert, daher der pointer Function Fow_Init() fow_tex = CreateTexture(map_width/2,map_depth/2,2) fow_mesh = CreatePivot() For x = 0 To map_width/16-1 For z = 0 To map_depth/16-1 mesh= CreateMesh(fow_mesh) sur = CreateSurface(mesh) v1 = AddVertex(sur,0,0,0,x*16.00/map_width,z*16.00/map_depth) ; ul v2 = AddVertex(sur,0,0,16,x*16.00/map_width,(z+1)*16.00/map_depth) ; ol v3 = AddVertex(sur,16,0,0,(x+1)*16.00/map_width,z*16.00/map_depth) ; ur v4 = AddVertex(sur,16,0,16,(x+1)*16.00/map_width,(z+1)*16.00/map_depth) ; or AddTriangle sur,v1,v2,v4 AddTriangle sur,v4,v3,v1 PositionEntity mesh,x*16,.1,z*16 EntityTexture mesh,fow_tex EntityOrder mesh,-1 ;EntityFX mesh,1+8+16 UpdateNormals(mesh) ;EntityBlend mesh,3 Next Next End Function Function Fow_Update() LockBuffer TextureBuffer(fow_tex) SetBuffer TextureBuffer(fow_tex) x = fow_px z = fow_py Repeat i = i + 1 x = x + 1 If x > map_width/2-1 Then x = 0 : z = z + 1 If z > map_depth/2-1 Then z = 0 WritePixelFast x,z,$ff000000 For s.ship = Each ship If s\macht = main_player\id And s\shc\sensorrange > 0 If s\x + s\shc\sensorrange > x*2 And s\x - s\shc\sensorrange < x*2 If s\z + s\shc\sensorrange > z*2 And s\z - s\shc\sensorrange < z*2 dist# = Sqr((s\x-x*2)^2+(s\z-z*2)^2) If dist < s\shc\sensorrange WritePixelFast x,z,$00000000 Exit EndIf EndIf EndIf EndIf Next Until i > 250*main_gspe SetBuffer BackBuffer() UnlockBuffer TextureBuffer(fow_tex) fow_px = x fow_py = z If Rand(0,5) Then fow_ShipVisUpdate() End Function Function Fow_Vis(x#,z#) Return (ReadPixel(x/2,z/2,TextureBuffer(fow_tex)) = $00000000) End Function Function fow_ShipVisUpdate() LockBuffer TextureBuffer(fow_tex) For s.ship = Each ship If s\macht <> main_player\id If ReadPixelFast(s\x/2,s\z/2,TextureBuffer(fow_tex)) = $00000000 s\vis = 1 Else s\vis = 0 EndIf Else s\vis = 1 EndIf Next UnlockBuffer TextureBuffer(fow_tex) End Function Function Fow_Clear() FreeEntity fow_mesh FreeTexture fow_tex End Function |
||
MrKeks.net |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group