Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

Tegne med ColorKey i DX - Problemer!


Anbefalte innlegg

Heisann

 

Programmerer litt nå og kom over et merkelig problem.

Som dere ser på skjermbildene så klarer jeg å tegne med gjennomsiktige farger i menyen, men ikke i selve spillet.

 

Det ENESTE som er forskjellig er init-kodene til DirectX7. Menyen har sin, spillet har sin.

 

Her er menyen sin init-kode:

    Set dx = New DirectX7
   Set dx_draw = dx.DirectDrawCreate("")
   
   dx_draw.SetCooperativeLevel frmMenu.hwnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE Or DDSCL_ALLOWREBOOT
   dx_draw.SetDisplayMode 640, 480, 32, 0, DDSDM_DEFAULT
   
   'Init backbuffer
   'Fungerer ikke som backbuffer, men som et "offscreen"-buffer
   ddsdBackBuffer.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT
   ddsdBackBuffer.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
   ddsdBackBuffer.lWidth = 320
   ddsdBackBuffer.lHeight = 240
   Set BackBuffer = dx_draw.CreateSurface(ddsdBackBuffer)
   
   'Init musikk-greiene
   Set loader = dx.DirectMusicLoaderCreate()
   Set perf = dx.DirectMusicPerformanceCreate()
   Call perf.Init(Nothing, 0)
   perf.SetPort -1, 80
   Call perf.SetMasterAutoDownload(True)
   
   Set seg = loader.LoadSegment(FixPath(App.Path) & "Data\Peace3.mid")
   seg.SetStandardMidiFile
   Set segstate = perf.PlaySegment(seg, 0, 0)

Her er selve spillet sin init-kode:

    Set dx = New DirectX7
   Set dx_draw = dx.DirectDrawCreate("")
   
   Call dx_draw.SetCooperativeLevel(frmRender.hwnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE Or DDSCL_ALLOWREBOOT)
   Call dx_draw.SetDisplayMode(320, 240, 16, 0, DDSDM_DEFAULT)
   
   'Create the primary complex surface with one backbuffer
   ddsdPrimary.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
   ddsdPrimary.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
   ddsdPrimary.lBackBufferCount = 1
   Set Primary = dx_draw.CreateSurface(ddsdPrimary)
   
   'Get the backbuffer from the primary surface
   Dim caps As DDSCAPS2
   caps.lCaps = DDSCAPS_BACKBUFFER
   Set BackBuffer = Primary.GetAttachedSurface(caps)
   
   'Init musikk-greiene
   Set loader = dx.DirectMusicLoaderCreate()
   Set perf = dx.DirectMusicPerformanceCreate()
   Call perf.Init(Nothing, 0)
   perf.SetPort -1, 80
   Call perf.SetMasterAutoDownload(True)

Som dere ser på bildene så skal menneskene tegnes med gjennomsiktighet. (Ikke bry dere om det blå treet)

Hvert eneste menneske har en egen surface som jeg setter ColorKey på. (Samme måte i spill og meny)

Problemet er vel at i menyen fungerer "Backbuffer" som en vanlig offscreen-tavle, mens i spillet fungerer "Backbuffer" som et ordentlig backbuffer som flippes med Primary-tavla.

 

Noen som ser feilen og kansje en mulig løsning?

 

Takker for all hjelp! :)

 

Jonas

 

Edit: Skrik ut hvis dere trenger å se hele prosjektet!

post-32-1115731876_thumb.jpg

Endret av Jonas
Lenke til kommentar
Videoannonse
Annonse

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...