sprite 3d transparenz

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

sprite 3d transparenz

Beitrag von diGGa »

hi
es gibt ja
displaytransparentsprite()
gibts das auch für sprite3d oder wie funktioniert das da?

einfach so:
TransparentSpriteColor(-1, 255, 0, 255)
LoadSprite(#imgPlayer, "player.png", #PB_Sprite_Texture)
CreateSprite3D(#imgPlayer, #imgPlayer)
DisplaySprite3D(#imgPlayer, tail.playertail(i)\x, tail.playertail(i)\y, 80)

gehts ja nich :/
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ruf mal das PB-interne Beispiel zu Sprite3D auf. :allright:
Ich weiß nicht warum dein Code nicht geht. :?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

nicht verzagen nco2k fragen: :lol:

Code: Alles auswählen

If InitSprite() And InitSprite3D() And OpenWindow(0, 0, 0, 640, 480, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "test") And OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0) 
  
  If CreateSprite(0, 128, 128, #PB_Sprite_Texture) And StartDrawing(SpriteOutput(0)) 
    Box(0, 0, 128, 128, RGB(255, 0, 0)) 
    Box(32, 32, 64, 64, RGB(0, 255, 0)) 
    StopDrawing() 
    TransparentSpriteColor(0, 0, 255, 0) 
    CreateSprite3D(0, 0) 
  EndIf 
  
  While WaitWindowEvent() <> #PB_Event_CloseWindow 
    ClearScreen(32, 32, 192) 
    If IsSprite3D(0) And Start3D() 
      DisplaySprite3D(0, 200, 200) 
      Stop3D() 
    EndIf 
    FlipBuffers() 
  Wend 
  
EndIf
um die ausgewählte farbe auf allen sprites transparent zu machen, verwende einfach #PB_Any als SpriteID.

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

Beitrag von diGGa »

ja aber du erstellst ein sprite.. du machst ja sonst nichts anders als ich. bei mir gehts nich :/

hier mal mein code:

Code: Alles auswählen

Procedure DrawPlayer()
        DisplaySprite3D(#imgPlayer, spieler.player\x, spieler.player\y)
EndProcedure

Procedure DrawPlayerTail()
        transparency.w = 100
        faktor.w = #cfgPlayerTailLength/100
        For i = 0 To #cfgPlayerTailLength
                transparency = transparency - faktor
                DisplaySprite3D(#imgPlayer, tail.playertail(i)\x, tail.playertail(i)\y, transparency)
        Next
EndProcedure

LoadSprite(#imgPlayer, "player.png", #PB_Sprite_Texture)
TransparentSpriteColor(#imgPlayer, 255, 0, 255)
CreateSprite3D(#imgPlayer, #imgPlayer)
(jetzt halt rauskopiert nicht genauso)

und in der hauptschleife
Start3D()
DrawPlayerTail()
DrawPlayer()
Stop3D()

und dann bleibt noch die frage, warum funzt drawplayertail() nicht richtig? ich wollte eigentlich jedem stück ein wenig weniger transparenz geben so das der schweif quasi ausläuft... aber die haben alle die gleiche transparenz, jedenfalls wirkt es so.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Hast du dir denn das Beispiel im PB-Examples Ordner angesehen?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

Beitrag von diGGa »

hatte es bis eben vergessen, aber irgendwie ist der code da genauso wie bei mir aber trotzdem funktioniert es nicht... (im beispiel schon aber nicht in meinem code)
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

was spielt es für eine rolle ob ich das sprite erstelle oder lade?! beides geht genauso gut. ich habs in dem beispiel jetzt nur mal eben erstellt, dass du nicht ein bild suchen musst.

was für eine version von pb benutzt du??

edit: vielleicht hast du einfach den falschen rgb-wert eingegeben, öffne mal dein bild in einem grafikprogramm und finde den exakten wert.

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

Beitrag von diGGa »

ne is der korrekte wert.. ohne sprite3d also nur mit sprite befehlen geht es ja... das is ja das merkwürdige... ich benutz 3.92
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

hmm und mein beispiel ging bei dir auch nicht?!

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

Beitrag von diGGa »

doch das ist ja das merkwürdige.. deins und das pb example gehen aber meins nicht.. ich poste mal den ganzen code.

Code: Alles auswählen

; ###########################
;
; Projekt Titel: Mouse Avoider
; Autor: Jaap 'Thoniel.NET' Groeneveld
; Beginn: 10.1.06
; Idee: http://www.actionflash.com/mouseavoider2.php
;
; ###########################

;{/ ----- Initialisieren -----
InitSprite()
InitSprite3D()
InitMouse()
InitKeyboard()
UsePNGImageDecoder() 

OpenWindow(#PB_Any, 10, 10, 640, 480, #PB_Window_ScreenCentered|#PB_Window_SystemMenu, "Mouse Avoider by Thoniel.NET /minigames")
OpenWindowedScreen(WindowID(),0,0,640,480, 1,0,0)
; OpenScreen(640,480,32,"Mouse Avoider")
;} ----- Initialisieren -----

;{/ ----- Variablen -----
; ----- Variablen Deklarieren -----
Global mx.f,my.f, Event
Global imgPlayer
; ----- Variablen Laden -----
#cfgPlayerTailLength = 4
Enumeration
        #imgPlayer
EndEnumeration

;} ----- Variablen Ende -----

;{/ ----- Strukturen -----
Structure player
        x.f
        y.f
        oldx.f
        oldy.f
EndStructure
Global spieler.player\x, spieler.player\y

Structure playertail Extends player
        remains.w
EndStructure
Dim tail.playertail(#cfgPlayerTailLength)


;} ----- Strukturen Ende -----

;{/ ----- Prozeduren -----
Procedure UpdateEngines()
        FlipBuffers()
        
        ;maus
        If GetFocus_() = WindowID()
                If WindowMouseX()>0 And WindowMouseX()<640-1 And WindowMouseY()>0 And WindowMouseY()<480-1
                        ExamineMouse()   
                        If captured = 0
                                ReleaseMouse(0)
                                captured = 1
                                MouseLocate(WindowMouseX(),WindowMouseY())
                        EndIf
                Else
                        ReleaseMouse(1)
                        captured = 0
                EndIf
        Else
                ReleaseMouse(1)
                captured = 0
        EndIf
        ; /maus      
        ExamineKeyboard()
        ClearScreen(0,0,0)    
        
        Event = WindowEvent()         
        mx=WindowMouseX()
        my=WindowMouseY()  
EndProcedure

Procedure UpdatePlayerPosition()
        spieler.player\oldx = spieler.player\x
        spieler.player\oldy = spieler.player\y
        spieler.player\x = mx
        spieler.player\y = my
EndProcedure

Procedure UpdatePlayerTail()
        Shared spieler.player\oldx, spieler.player\oldy
        For i=0 To #cfgPlayerTailLength
                tail.playertail(i)\oldx = tail.playertail(i)\x
                tail.playertail(i)\oldy = tail.playertail(i)\y 
        Next
        
        
        tail.playertail(0)\x = spieler.player\oldx
        tail.playertail(0)\y = spieler.player\oldy
        
        For i = 1 To #cfgPlayerTailLength
                tail.playertail(i)\x = tail.playertail(i-1)\oldx
                tail.playertail(i)\y = tail.playertail(i-1)\oldy
        Next
EndProcedure

Procedure DrawPlayer()
        DisplaySprite3D(#imgPlayer, spieler.player\x, spieler.player\y)
EndProcedure

Procedure DrawPlayerTail()
        transparency.w = 100
        faktor.w = #cfgPlayerTailLength/100
        For i = 0 To #cfgPlayerTailLength
                transparency = transparency - faktor
                DisplaySprite3D(#imgPlayer, tail.playertail(i)\x, tail.playertail(i)\y, transparency)
        Next
EndProcedure
;} ----- Prozeduren Ende -----

;{/ ----- Start Prozeduren -----

;} ----- Start Prozeduren Ende -----

;{/ ----- Mediendaten Laden -----

LoadSprite(#imgPlayer, "player.png", #PB_Sprite_Texture)
CreateSprite3D(#imgPlayer, #imgPlayer)
TransparentSpriteColor(#imgPlayer, 255, 0, 255)

;} ----- Mediendaten Laden Ende -----

;{/ ----- Hauptschleife -----
Repeat
        UpdateEngines()

        UpdatePlayerPosition()
        UpdatePlayerTail()
        
        Start3D()
        DrawPlayerTail()
        DrawPlayer()
        Stop3D()
Until KeyboardPushed(#PB_Key_Escape) Or Event = #PB_Event_CloseWindow
End
;} ----- Hauptschleife Ende -----


;{/ ----- Datenfelder -----

;} ----- Datenfelder -----

(ich weiss das man eigentlich erst mit der engine anfängt und danach mit den effekten, aber ich hab das so nebenbei gemacht weil ich hier im forum noch auf antworten bzgl. leveln warte ;))
Zuletzt geändert von diGGa am 11.01.2006 16:50, insgesamt 1-mal geändert.
Antworten