Probleme mit Grabsprite !!!!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Probleme mit Grabsprite !!!!

Beitrag 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 :)
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Probleme mit Grabsprite !!!!

Beitrag 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 ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: Probleme mit Grabsprite !!!!

Beitrag 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 !

=(
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Probleme mit Grabsprite !!!!

Beitrag 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
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: Probleme mit Grabsprite !!!!

Beitrag 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:
Antworten