Suporte ao desenvolvimento de jogos!


    [Resolvido]---Renderizar na tela ao lado do nome[dx7]

    Compartilhe
    avatar
    Akio
    Membro Ativo
    Membro Ativo

    Mensagens : 324
    Créditos : 24

    Ficha do personagem
    Nível: 1
    Vida:
    30/30  (30/30)
    Energia:
    0/0  (0/0)

    [Resolvido]---Renderizar na tela ao lado do nome[dx7]

    Mensagem por Akio em Sab Set 29, 2018 12:41 pm

    Eae galera, seguinte to estudando a parada de renderizar coisas na tela e etc, essa parte ja deu bom, ja to conseguindo manipular isso, agora to com uma duvida, tentei ontem algumas vezes e não deu, mas o que eu quero fazer é basicamente isso>

    renderizar um icone ou algo, ao lado do nome de um npc especifico ou player,
    por exemplo se o player for admin ficar um icone em cima dele, deu pra entender, então é isso me ajudem pf Very Happy

    Ex:
     mais ou menos isso...


    Última edição por Akio em Dom Set 30, 2018 12:11 pm, editado 1 vez(es)
    avatar
    Nãner
    Iniciante
    Iniciante

    Mensagens : 58
    Créditos : 16

    Re: [Resolvido]---Renderizar na tela ao lado do nome[dx7]

    Mensagem por Nãner em 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.
    avatar
    Akio
    Membro Ativo
    Membro Ativo

    Mensagens : 324
    Créditos : 24

    Ficha do personagem
    Nível: 1
    Vida:
    30/30  (30/30)
    Energia:
    0/0  (0/0)

    Re: [Resolvido]---Renderizar na tela ao lado do nome[dx7]

    Mensagem por Akio em Dom Set 30, 2018 12:10 pm

    Perfeito! vlw mano!
     +1cred <3

    Conteúdo patrocinado

    Re: [Resolvido]---Renderizar na tela ao lado do nome[dx7]

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Ter Out 23, 2018 6:28 am