"For of War" Problem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Raptor

Betreff: "For of War" Problem

BeitragSo, Jun 26, 2005 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jun 26, 2005 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group