Seite 1 von 1

Probleme mit Grabsprite !!!!

Verfasst: 15.03.2011 16:29
von Darky
Hallo ihr Lieben ... Da ich lange zeit nicht mit PB gearbeitet habe und mich nun wieder einarbeiten will wollt ich ein kleines schiebepuzzl programmieren...

Nun hab ich folgendes Problem :O Ich lade ein Bild und versuch es mittels Grabsprite in 9 Teile zu unterteilen :angry: doch werden die Sprites zwar geladen aber angezeigt wird nur ein Schwarzes sprite :(

Ihr müsst den Orginalbild.s pfad anpassen um zu sehen was ich meine :( Hier der code--.

Code: Alles auswählen

InitSprite()

InitKeyboard()
OpenWindow(1,0,0,800,600,"",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(1),0,0,800,600,0,0,0)
UseJPEGImageDecoder()

Global ORGINALBILD.l
Global SPR_ARROW.l

Structure Images_
  id.l ; Img id 
  Datas.l  ; Preserved sprite 
EndStructure
Global NewList Image.images_()

Structure PuzzleFields
  x.l
  y.l
  img.l
  org_img.l
  Slider.b
EndStructure
Global NewList Puzzle.Puzzlefields()
Declare LoadPuzzle(Image.s="$STANDART")
LoadPuzzle()

ORGINALBILD=LoadImage(#PB_Any,"C:\Users\moni\Pictures\2011-02-12 001\IMG_0011.jpg")

Procedure.l GetSprite(xid.l)
  ;Debug "CHECK..."
  ForEach image()
    If image()\id = xid.l 
      ;If IsSprite(image()\id)
        ;Debug "SUCCESS"
        ProcedureReturn image()\datas
      ;EndIf 
    EndIf 
  Next     
EndProcedure  
Procedure DrawTestGrid()
  cl=0
   StartDrawing(ScreenOutput())
      DrawImage(ImageID(ORGINALBILD),0,0,600,600) 
       DrawingMode(#PB_2DDrawing_Outlined)
   For i = 0 To 400 Step 200
    
     For ii = 0 To 400 Step 200
       cl=cl+1
     

      
       
       Box(ii,i,199,199,RGB(255,0,0))
       CT$=Str(cl)
       DrawText(i+(199/2),ii+(199/2),CT$)
       
         
     Next
     
   Next
   DrawText(100,100,Str(GetSprite(2)))
 StopDrawing() 
EndProcedure
Procedure LoadPuzzle(Image.s="$STANDART")
  ct=0
  ;If Image.s="$STANDART"
    
    StartDrawing(ScreenOutput())
    DrawImage(ImageID(ORGINALBILD),600,600)
    StopDrawing()
 
    If IsImage(ORGINALBILD)
      For i = 0 To 400 Step 200
        For ii = 0 To 400 Step 200
         ct=ct+1
          AddElement(image())
          
            image()\id = ct 
            image()\datas = GrabSprite(#PB_Any,ii,i,200,200,#PB_Sprite_Memory)
            ;Debug Str(ii)+" x "+Str(i)
            ;Debug "....ID  >" +Str(\id) 
            ;Debug "....DATA>"+Str(\datas)
            ;Debug "...CHECK>"+Str(IsSprite(\datas))
          

          AddElement(Puzzle())
          
            Puzzle()\x=ii
            Puzzle()\y=i
            Puzzle()\org_img= ct
            Puzzle()\img = ct
                    
        Next 
      Next     

    Else
      MessageRequester("","Puzzlebild konnte nicht Geladen werden")
    EndIf 
  
  ;EndIf 
  
EndProcedure



;CallDebugger
Debug GetSprite(3)
Repeat
  ExamineKeyboard()
   FlipBuffers()
  ClearScreen(0)
 
  DrawTestGrid()
  DisplaySprite(GetSprite(3),10,10)
  

  ev=WindowEvent()
 
  Delay(10)
Until KeyboardReleased(#PB_Key_Escape)
ForEach image()
  FreeSprite(image()\datas)
Next 

End


vielleicht weiss jemand von euch wieso die funktion Getsprite nicht funktioniert :( und wenn ich image\datas als sprite angebe direct gibt es auch keine ausgabe,....




MFG

Darky :)

Re: Probleme mit Grabsprite !!!!

Verfasst: 15.03.2011 18:22
von Bisonte
Ich habe das mal probiert, und nachdem ich ERST das Bild lade, UND DANN die Funktion LoadPuzzle()
aufrufe, wird mir was angezeigt.
Das Original in 9 Teile geteilt wobei Feld 1 Schwarz ist.
123
456
789

Ist es das was Du wolltest ?

Re: Probleme mit Grabsprite !!!!

Verfasst: 16.03.2011 18:05
von Darky
Nein leider nicht ,,,,...

Es geht darum wenn ich versuche ein Sprite anzuzeigen also zbs mit

Code: Alles auswählen

 displaysprite(getsprite(1)) 
wird nur ein Schwarzes Feld angezeigt anstatt des "Stückes" das angezeigt werden soll....

Die Funktion "Loadpuzzle()" soll ja ids. Ein Bild laden und in Stücke als sprite zerschneiden !

=(

Re: Probleme mit Grabsprite !!!!

Verfasst: 16.03.2011 21:01
von Drago

Code: Alles auswählen

Procedure LoadPuzzle(Image.s="$STANDART")
  ct=0
  ;If Image.s="$STANDART"
  
  StartDrawing(ScreenOutput())
  DrawImage(ImageID(ORGINALBILD),0,0,600,600);<--------------------- Hier lag der Fehler.. :) 
  StopDrawing()
  
  If IsImage(ORGINALBILD)
    For i = 0 To 400 Step 200
      For ii = 0 To 400 Step 200
        ct=ct+1
        AddElement(Image())
        
        Image()\id = ct
        Image()\Datas = GrabSprite(#PB_Any,ii,i,200,200,#PB_Sprite_Memory)
        ;Debug Str(ii)+" x "+Str(i)
        ;Debug "....ID  >" +Str(\id)
        ;Debug "....DATA>"+Str(\datas)
        ;Debug "...CHECK>"+Str(IsSprite(\datas))
        
        
        AddElement(Puzzle())
        
        Puzzle()\x=ii
        Puzzle()\y=i
        Puzzle()\org_img= ct
        Puzzle()\img = ct
        
      Next
    Next     
    
  Else
    MessageRequester("","Puzzlebild konnte nicht Geladen werden")
  EndIf
  
  ;EndIf
  
EndProcedure

Re: Probleme mit Grabsprite !!!!

Verfasst: 16.03.2011 21:26
von Darky
:bounce: :bounce: :bounce: :lurk: :bluescreen: :bluescreen: :lol: :lol: :lol:


L O L ... echt dickes dankeschön :D hammerkrass so ein dummer fehler und mir fiel er nicht auf !!! :oops: :oops: :oops:



Danke ! :doh: