У меня есть вопрос на который я сам пока не могу найти ответа...
Для вас он конечно будет смешной ,... что поделать я еше пока учусь !
Короче не могу обновлять картинку в директ иксе
Меняю разрешение, инициализирую, создаю буфера, плоскости, вывожу картинки, а вот поменять их не могу....
Dim dx As New DirectX7 'объявляем об использовании DirectX7
Dim dd As DirectDraw7 'объявляем об использовании DirectDraw7.
Dim Primary As DirectDrawSurface7
Dim Back As DirectDrawSurface7
Dim x As Integer
Dim Intro As DirectDrawSurface7
Dim Sprites As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2
Dim ddsd2 As DDSURFACEDESC2
Dim caps As DDSCAPS2
Private Sub Form_KeyPress(KeyAscii As Integer)
Call Form_Unload(0)
End Sub
Private Sub Form_Load()
Set dd = dx.DirectDrawCreate("")
Me.Show
Call dd.SetCooperativeLevel(Me.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE)
Call dd.SetDisplayMode(640, 480, 16, 0, DDSDM_DEFAULT)
ddsd1.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
ddsd1.lBackBufferCount = 1
Set Primary = dd.CreateSurface(ddsd1)
caps.lCaps = DDSCAPS_BACKBUFFER
Set Back = Primary.GetAttachedSurface(caps)
ddsd2.lFlags = DDSD_CAPS
ddsd2.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
Set Intro = dd.CreateSurfaceFromFile("b.bmp", ddsd2)
ddsd2.lHeight = 32
ddsd2.lWidth = 32
Set Sprites = dd.CreateSurfaceFromFile("s.bmp ", ddsd2)
Dim key As DDCOLORKEY
key.low = 0
key.high = 0
Sprites.SetColorKey DDCKEY_SRCBLT, key
UpdateBack
UpdateObject
Call Primary.Flip(Back, DDFLIP_WAIT)
End Sub
Sub UpdateBack()
Dim rcRect As RECT 'уже знакомые нам переменные
Dim ddrval As Long
rcRect.Left = 0
rcRect.Top = 0
rcRect.Right = 640
rcRect.Bottom = 480
Call Back.BltFast(0, 0, Intro, rcRect, DDBLTFAST_NOCOLORKEY Or DDBLTFAST_WAIT)
End Sub
Sub UpdateObject()
Dim ddrval As Long 'буфер для прорисовки спрайта.
Dim rcRect As RECT 'тип данных, задающий позицию спрайта
rcRect.Left = 0
rcRect.Top = 0
rcRect.Right = 30
rcRect.Bottom = 30
y = 300
''Call Back.DrawText(1, 1, "FFFFFFFFFFFFf", False)
Call Back.BltFast(x, y, Sprites, rcRect, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Timer1.Enabled = False
Call dd.RestoreDisplayMode
Call dd.SetCooperativeLevel(Me.hWnd, DDSCL_NORMAL)
Set Back = Nothing
Set Primary = Nothing
Set dd = Nothing
End
End Sub
Private Sub Timer1_Timer()
UpdateBack
UpdateObject
Call Primary.Flip(Back, DDFLIP_WAIT)
End Sub
код примитивный , дожен по таймеру обновлять картинку....
Подозреваю что я не умею очишать back буфер