por Nãner Dom Set 30, 2018 1:49 am
Já que iremos renderizar um ícone, usaríamos um gráfico novo. Portanto, começamos por declarar nosso novo gráfico no módulo do DirectX.
Você verá códigos parecidos com esses, tente encaixá-los próximos aos já existentes. Usarei o nome Icone nos meus códigos.
- Código:
Public DDS_Icone As DirectDrawSurface7
&
- Código:
Public DDSD_Icone As DDSURFACEDESC2
Continuando, precisamos fazer com que o gráfico seja carregado. Então na Sub InitSurfaces encaixaremos isso:
(
OBS: Aqui indicamos onde está o nosso arquivo gráfico, no exemplo na pasta graphics)
- Código:
If FileExist(App.Path & "\data files\graphics\icone.bmp", True) Then Call InitDDSurf("icone", DDSD_Icone, DDS_Icone)
(verifica se o arquivo gráfico existe -> envia-o para inicialização)É importante que também saibamos quando devemos "desligar" o gráfico do aplicativo. Então entraremos na Sub DestroyDirectDraw (utilizada ao fechar o jogo) e adicionaremos:
- Código:
Set DDS_Icone = Nothing
ZeroMemory ByVal VarPtr(DDSD_Icone), LenB(DDSD_Icone)
A partir de aqui já temos nosso gráfico declarado e inicializando corretamente. Só precisamos renderizar.
Como exemplo, usaremos para renderizar em cima de jogadores Admin. Sendo assim, poderíamos utilizar a Sub
DrawPlayerName para facilitar tudo?
Não. Nas engines dx7 temos um bloqueio onde devemos primeiro desenhar os gráficos e então desenhar os textos. Então podemos utilizar da sub bltplayer, ou como prefiro, criar uma nova sub e
chamá-la no mesmo local onde chamos a Sub BltPlayer.Aqui está um exemplo da nova Sub, esta está responsável por desenhar o nosso Ícone, nela controlamos o X, Y, e, mais importante, o tamanho do ícone (do nosso arquivo gráfico). Nesse exemplo utilizei um ícone 32x32.
- Código:
Sub BltPlayerIcone(ByVal Index As Long)
Dim rec As DxVBLib.RECT
Dim x As Long, y As Long
Dim Name As String
If Index <= 0 Then Exit Sub ' Evita erros
If GetPlayerAccess(Index) < 2 Then Exit Sub ' Apenas jogadores com acesso igual ou maior que 2 continuam na Sub
' // Determina como pegamos o gráfico //
rec.top = 0
rec.Bottom = 32 ' 32 de Altura
rec.Left = 0
rec.Right = 32 ' 32 de Largura
' Calcula X e Y baseado no Nome
Name = GetPlayerName(Index)
x = ConvertMapX(GetPlayerX(Index) * PIC_X) + Player(Index).XOffset + (PIC_X \ 2) - getWidth(TexthDC, (Trim$(Name))) + 32
If GetPlayerSprite(Index) < 1 Or GetPlayerSprite(Index) > NumCharacters Then
y = ConvertMapY(GetPlayerY(Index) * PIC_Y) + Player(Index).YOffset - 16
Else
y = ConvertMapY(GetPlayerY(Index) * PIC_Y) + Player(Index).YOffset - (DDSD_Character(GetPlayerSprite(Index)).lHeight / 4) + 16
End If
' Renderiza
Call Engine_BltFast(x, y, DDS_Icone, rec, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY)
End Sub
Fim.