Seite 1 von 1

Image auf ein Sprite zeichnen. Geht das ?

Verfasst: 13.07.2005 18:07
von teachco
Hallo,

ich hatte vor, ein Image zu laden und das dann auf ein Sprite zu zeichnen neben einigen anderen Dingen, z.B. Text mit DrawText.
Leider scheint das nicht zu funktionieren. Das Bild wird einfach ignoriert.
Hat jemand eine Idee?

Andi

Code: Alles auswählen

Global id0x.l ,id0y.l, id1x.l ,id1y.l
id0x = 200
id0y = 200

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
  MessageRequester("System-Error","Kann DirectX nicht laden",0) 
  Else
  ;MessageRequester("Kontrolle","DirectX okay.",0) 
EndIf 

WinProperties.l = #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_SizeGadget 
If OpenWindow(0, 5, 5, 1024, 1024/16*9+2, WinProperties , "T-Constructor") = 0
Else
;MessageRequester("Kontrolle","Window okay",0)
ImageID1 = LoadImage(#PB_Any,"testbild.bmp")
;MessageRequester("Kontrolle",Str(ImageID1),0)


If OpenWindowedScreen(WindowID(),4, 50, 1024 - 85, 1024/16*9 - 74, 0, 0, 0) = 0
Else
SpriteID0 = CreateSprite(#PB_Any, 20, 20)
If StartDrawing(SpriteOutput(SpriteID0))
   DrawingMode(1 | 4)
   FrontColor(230,230,230)
   Box(1,1,19,19)
   StopDrawing()
EndIf
SpriteID1 = CreateSprite(#PB_Any, 300, 300)
If StartDrawing(SpriteOutput(SpriteID1))
   DrawingMode(1 | 4)
   FrontColor(230,230,230)
   Box(1,1,299,299)
   FrontColor(0,0,100)
   ;MessageRequester("Kontrolle",Str(ImageID1),0)
   DrawImage(ImageID1, 10, 10 ) 
   DrawText("Dieses ist ein Text, der angezeigt wird.")
   StopDrawing()
EndIf
Repeat 
    FlipBuffers(): ClearScreen(255,255,255) 
    If StartDrawing(ScreenOutput())
       ;DrawingMode(0)
       ;FrontColor(255,0,0)
       ;Box(0, 0, 1024 - 85, 1024/16*9 - 74) 
       ;FrontColor(255,0,255)
       ;DrawText("Blabla")
       ImageID10 = CreateImage(#PB_Any, 50, 50)
       DrawImage(ImageID1, 100, 100 )
       StopDrawing()
    EndIf
    ;FlipBuffers() 


  
    DisplayTransparentSprite(SpriteID1, id1x ,id1y)
    DisplayTransparentSprite(SpriteID0, id0x ,id0y)
    ;DisplayTransparentSprite(SpriteID0, 100, 100)
 
    Delay(1)
    
    id0x = WindowMouseX()
    id0y = WindowMouseY()-50
    
    If SpriteCollision(SpriteID0,  id0x ,id0y, SpriteID1, id1x ,id1y) And LButtondownOn
       SpriteCollisionOn = 1
    EndIf

       If LButtondownOn And SpriteCollisionOn
          ;MessageRequester("Kontrolle","Kollision",0)
           id0x = WindowMouseX()
           id0y = WindowMouseY()-50
           id1x = WindowMouseX()
           id1y = WindowMouseY()-50
          ;DisplayTransparentSprite(SpriteID0, id0x ,id0y)
       Else
          ;DisplayTransparentSprite(SpriteID1, WindowMouseX(), WindowMouseY()-50)
          ;DisplayTransparentSprite(SpriteID0, id0x ,id0y)    
       EndIf

    EventID.l = WindowEvent()
    If EventID = #WM_LButtonDown
       ;MessageRequester("Kontrolle","link. Mousebutton down",0)
       LButtondownOn = 1

    EndIf
    If EventID = #WM_LButtonUp
       ;MessageRequester("Kontrolle","link. Mousebutton down",0)
       LButtondownOn = 0
       SpriteCollisionOn = 0

    EndIf
    
    If EventID = #PB_Event_CloseWindow
           quit = 1
    EndIf
Until quit=1    
EndIf


EndIf

Verfasst: 13.07.2005 18:09
von benpicco
mit useimage() gehts

Code: Alles auswählen

...
DrawImage(UseImage(ImageID1), 100, 100 ) 
...
(der debugger meldet sich sonst auch)

Verfasst: 13.07.2005 18:37
von teachco
Vielen Dank!
Da bin ich aber erstaunt.

Code: Alles auswählen

ImageID1 = LoadImage(#PB_Any,"testbild.bmp")
Mit #PB_Any sorgt man dafür, dass als Ergebnis, also nach ImageID1 die Bild-ID geschrieben wird.
Demnach dürfte man bei

Code: Alles auswählen

DrawImage(UseImage(ImageID1), 10, 10 )
UseImage GERADE NICHT anwenden, da ImageID1 die ID ja schon hat.

Code: Alles auswählen

Syntax
Ergebnis = UseImage(#Image)

Beschreibung
Ändert das aktuelle Bild in das angegebene neue Bild '#Image'. 'Ergebnis' enthält die ImageID des neuen aktuellen Bildes. 
Die funktionierende Lösung ist also irgendwie doppelt, nach dem Motto die ID von der ID.
Das muss man wohl nicht verstehen. Oder ?

Oder die Beschreibung anpassen:
Für #Image kann man auch die Bild-ID angeben, um zu erreichen, dass dieses Bild zum aktuellen wird.

Ich finde das auf jeden Fall irreführend.

Verfasst: 14.07.2005 21:01
von benpicco
Ja, das tue ich auch und hab´s am Anfang auch immer vergessen und mich gewundert :o warum das denn nicht geht...
Enzwichen hab ich mich dran gewöhnt, es wird wohl seine Grund haben, warum das so ist...:roll: