1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Sprite control VB6

Discussão em 'Programação' iniciada por Cambalinho, 24 de Dezembro de 2008. (Respostas: 3; Visualizações: 763)

  1. Cambalinho

    Cambalinho Power Member

    eu ando a construir 1 objecto para facilitar a construção de jogos, o Sprite.
    eu ando a tentar fazer transparencia no objecto(não numa cor, mas em todo o objecto). eu ja tentei fazer pixel a pixel, functionou mas dava-me 1 aspecto pixel(via pontos em branco):
    transformava alguns pixel na cor que queria fazer desaparecer e depois fazia desaparecer essa cor.
    eu ja tentei a função API Aphablend() mas sem resultados :( .
    agora estou a fazer 1 metodo diferente: somo a imagem á cor que quero que desapareça, mas estou a receber 1 erro:
    Código:
    If blnTransparentImage = True Then
            For Y = 0 To UserControl.Height
                For X = 0 To UserControl.Width 'aqui uso a função para somar as 2 cores
                    SetPixel UserControl.hdc, X, Y, PlusColorTransparency(GetPixel(UserControl.hdc, X, Y), GetPixel(UserControl.hdc, 0, 0), 75)
                Next X
            Next Y
        End If
    a função que soma as cores:
    Código:
    Private Type Color
        Red As Long
        Green As Long
        Blue As Long
    End Type
     
    Private Function RGBValues(Color As Long) As Color 'find the rgb color values of a color
        Dim ReturnColor As Color
        With ReturnColor
            .Red = Fix(Color And 255)
            .Green = Fix((Color And 65535) / 256)
            .Blue = Fix(Color / 65536)
        End With
        RGBValues = ReturnColor
    End Function
     
    Public Function PlusColorTransparency(Color1 As Long, Color2 As Long, Transparency As Long) As Long
        Dim DistColor As Color
        Dim SourceColor As Color
        If Transparency < 0 Then Transparency = 0
        If Transparency > 100 Then Transparency = 100
        Transparency = (255 * Transparency) / 100
        SourceColor = RGBValues(Color1)
        DistColor = RGBValues(Color2)
        DistColor.Red = SourceColor.Red * (Transparency / 255) + DistColor.Red * (0.1 - (Transparency / 255))
        DistColor.Green = SourceColor.Green * (Transparency / 255) + DistColor.Green * (0.1 - (Transparency / 255))
        DistColor.Blue = SourceColor.Blue * (Transparency / 255) + DistColor.Blue * (0.1 - (Transparency / 255))
        PlusColorTransparency = RGB(DistColor.Red, DistColor.Green, DistColor.Blue)'aqui da-me erro
    End Function
    menssagem de erro: "Run-Time Error '5': Invalide procedure call or argument"
    alguem me pode ajudar a resolver o problema?
    obrigado
     
  2. _Neo__

    _Neo__ Power Member

    Tenta este modulo é velhinho e muito desactualizado mas ainda estava numa fase em que as coisas eram simples, deve ser um bom ponto de partida para o que queres fazer

    DirectX 7 XP
     
  3. Cambalinho

    Cambalinho Power Member

    desculpa, mas alem de eu n perceber nd do directx, o projecto dá-me erro ao entrar.
    eu posso meter aqui 1 função que funciona mt bem. transforma alguns pixels em 1 cor que quero faze-la desaparecer. o problema desta função é dá 1 estilo pixel(ve-se em "pontinhos").
    Código:
    [LEFT]i = 0
            For Y = i - 1 To UserControl.Height
                For X = i To UserControl.Width Step 2
                    If GetPixel(UserControl.hdc, X, Y) <> -1 Then SetPixel UserControl.hdc, X, Y, UserControl.BackColor
                Next X
                If i = 0 Then
                    i = 1
                Else
                    i = 0
                End If
            Next Y 'depois de trabalhar com a imagem(deste e outros processos) eu meto 1 cor transparente usando a propriedade maskcolor.[/LEFT]
    
    este codigo funciona, mas funcionava mt melhor se fosse por percentagem e se fosse possivel trabalhar com outra escala. assim conseguia dar + perfeição ao meu resultado.
    podes dar-me dicas?
    obrigado
     
  4. Cambalinho

    Cambalinho Power Member

    apartir do codigo, no post anterior, eu posso alterar a scala do UC e dar melhor aspecto ao resultado final?
    eu estou a utilizar a escala pixel, mas queria ver se posso alterar para uma scala maior.
    obrigado
     

Partilhar esta Página