Entonces lo que hago es crear un compatibleDC y con select object asigno la imagen a ese hdc?
Luegos cojo las coordenadas y medidas de mi nuevo hdc (el de la memoria) y dibujo en un form.
eso es lo que entiendo.
Luego la clase de sprites... puedo crear mas instancias de la clase para usar varios sprites?
Este es el modulo de graficos que tengo hecho (sin modificaciones)
Me sirve para ahorrarme el picturebox en el proyecto gracias.
Ahora tengo que investigar lo de los sprites porque no lo entendi muy bien.
por cierto qué tipo de variables es un stdPicture?
Gracias por tu ayuda.
Aquí el módulo a ver que se puede mejorar (mañana cambiaré lo del picturebox)
Option Explicit
'API's para dibujar
Public Declare Function TransparentBlt Lib "msimg32.dll" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal crTransparent As Long) As Boolean
Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
'API's para ventanas
Public Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String) As Long
Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const HWND_TOPMOST = -1
Const SWP_SHOWWINDOW = &H40
Public MyScreenWidth As Long
Public MyScreenHeight As Long
Public GDKBitmaps() As Bitmap 'Matriz donde se guardan los bitmaps del juego
Public Type Bitmap
Handle As Long
SourceX As Long
SourceY As Long
SourceWidth As Long
SourceHeight As Long
End Type
'Variables globales
Public MyScreen 'Variable que guarda el objeto empleado como pantalla
Public MyBitmapsSource As Picturebox 'Variable que guarda el objeto empleado como recurso de bitmaps
Public MyScreenHDC As Long 'Variable que guarda el HDC del objeto empleado como pantalla
Public MyBitmapsSourceHDC As Long 'Variable que guarda el HDC del objeto que contiene los bitmaps
'********************************************************************************
'*************** Grupo de funciones para inicializar elementos ***************************
'********************************************************************************
'//Establece como pantalla del juego un objeto PictureBox
Public Sub SetScreenFromPictureBox(Picturebox As Picturebox)
Picturebox.ScaleMode = vbPixels
Picturebox.AutoRedraw = True
Picturebox.BackColor = vbBlack
Set MyScreen = Picturebox
End Sub
'//Establece como pantalla del juego un objeto Form
Public Sub SetScreenFromForm(Form As Form)
Form.ScaleMode = vbPixels
Form.AutoRedraw = True
Form.BackColor = vbBlack
Set MyScreen = Form
End Sub
'//Establece como recurso de Bitmaps un objeto PictureBox
Public Sub SetBitmapsSource(Picturebox As Picturebox)
Picturebox.ScaleMode = vbPixels
Picturebox.AutoRedraw = True
Picturebox.BackColor = vbRed
Picturebox.AutoSize = True
Picturebox.BorderStyle = 0
MyBitmapsSourceHDC = Picturebox.hdc
Set MyBitmapsSource = Picturebox
End Sub
'//Establece la altura y anchura en pixels de una ventana
Public Sub SetWindowSize(Window As Form, Width As Long, Height As Long)
SetWindowPos Window.hWnd, 0, 0, 0, Width, Height, SWP_SHOWWINDOW
Window.Left = (Screen.Width / 2) - (Window.Width / 2)
Window.Top = (Screen.Height / 2) - (Window.Height / 2)
Window.ScaleMode = vbPixels
MyScreenWidth = Width
MyScreenHeight = Height
End Sub
'//Establece el título de una ventana
Public Sub SetWindowTitle(Window As Form, Title As String)
SetWindowText Window.hWnd, Title
Window.ScaleMode = vbPixels
End Sub
'********************************************************************************
'*************** Grupo de funciones para dibujar bitmaps ******************************
'********************************************************************************
'//Dibuja un bitmap en la posicion (x,y) de la pantalla con una ampliacion de (Zoom) tomando como transparente el color (TransparentColor)
Public Sub ZoomPutBitmap(Fx As Long, Fy As Long, Fwidth As Long, Fheight As Long, Zoom As Integer, X As Long, Y As Long, TransparentColor As Long)
MyScreenHDC = MyScreen.hdc
TransparentBlt MyScreenHDC, X, Y, Fwidth * Zoom, Fheight * Zoom, MyBitmapsSourceHDC, Fx, Fy, Fwidth, Fheight, TransparentColor
End Sub
'//Dibuja un bitmap en la posicion (x,y) de la pantalla cambiando su anchura y altura tomando como transparente el color (TransparentColor)
Public Sub PutBitmapElastic(Fx As Long, Fy As Long, Fwidth As Long, Fheight As Long, NewWidth As Long, NewHeight As Long, X As Long, Y As Long, TransparentColor As Long)
MyScreenHDC = MyScreen.hdc
TransparentBlt MyScreenHDC, X, Y, NewWidth, NewHeight, MyBitmapsSourceHDC, Fx, Fy, Fwidth, Fheight, TransparentColor
End Sub
'//Dibuja un bitmap en la posicion (x,y) de la pantalla tomando como transparente el color (TransparentColor)
Public Sub PutBitmap(Fx As Long, Fy As Long, Fwidth As Long, Fheight As Long, X As Long, Y As Long, TransparentColor As Long)
MyScreenHDC = MyScreen.hdc
TransparentBlt MyScreenHDC, X, Y, Fwidth, Fheight, MyBitmapsSourceHDC, Fx, Fy, Fwidth, Fheight, TransparentColor
End Sub
'//Carga en la matriz GDKBitmaps un bitmap especifico
Public Sub LoadBitmap(Handle As Long, SourceX As Long, SourceY As Long, SourceWidth As Long, SourceHeight As Long)
ReDim Preserve GDKBitmaps(0 To Handle)
GDKBitmaps(Handle).Handle = Handle
GDKBitmaps(Handle).SourceX = SourceX
GDKBitmaps(Handle).SourceY = SourceY
GDKBitmaps(Handle).SourceWidth = SourceWidth
GDKBitmaps(Handle).SourceHeight = SourceHeight
'Recargar el bitmap vacio
GDKBitmaps(0).Handle = 0
GDKBitmaps(0).SourceX = 0
GDKBitmaps(0).SourceY = 0
GDKBitmaps(0).SourceWidth = 0
GDKBitmaps(0).SourceHeight = 0
End Sub
'//Coloca un bitmap sin dibujo a un objeto. Se emplea a la hora de borrar un objeto
Public Sub PutEmptyBitmap(Solid As Solid)
Solid.Bitmap = 0
End Sub
'//Dibuja un bitmap que esta guardado en la matriz GDKBitmaps pasandole el handle, en la posicion (X,Y)
Public Sub PutBitmapFromHandle(Handle As Long, X As Long, Y As Long, TransparentColor As Long)
MyScreenHDC = MyScreen.hdc
TransparentBlt MyScreenHDC, X, Y, GDKBitmaps(Handle).SourceWidth, GDKBitmaps(Handle).SourceHeight, MyBitmapsSourceHDC, GDKBitmaps(Handle).SourceX, GDKBitmaps(Handle).SourceY, GDKBitmaps(Handle).SourceWidth, GDKBitmaps(Handle).SourceHeight, TransparentColor
End Sub
'//Carga un bitmap al objeto empleado como recurso de bitmaps
Public Sub LoadBitmapFromFile(BitmapFile As String)
MyBitmapsSource.Picture = LoadPicture(BitmapFile)
MyBitmapsSourceHDC = MyBitmapsSource.hdc
End Sub
'//Carga un bitmap al objeto empleado como pantalla para fondo
Public Sub LoadBitmapForBackground(BitmapFile As String)
MyScreen.Picture = LoadPicture(BitmapFile)
MyScreenHDC = MyScreen.hdc
End Sub
'//Se emplea para ver los bitmaps dibujados una vez establecidos con ZoomPutBitmap, PutBitmapElastic o PutBitmap
Public Sub SeeScreen()
MyScreen.Refresh
End Sub
'//Se emplea para limpiar la pantalla antes de actualizarla con mas bitmaps
Public Sub ClearScreen()
MyScreen.Cls
End Sub