Spriteprobleme

Anfängerfragen zum Programmieren mit PureBasic.
Darkblade
Beiträge: 12
Registriert: 20.09.2006 18:40
Wohnort: Heilinghausen
Kontaktdaten:

Spriteprobleme

Beitrag von Darkblade »

Servus
Ich schreib gerade mein erstes RPG-Spiel hab allerdings jetzt ein Problem, nämlich gibt es jedesmal wenn ich den Character anzeigen lassen will eine Meldung (#sprite object not initialized) obwohl es gestern noch funktionierte. :(

Könnt ihr mir bitte versuchen zu helfen?
Hab die 4.2 Version
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Das ist easy!

So, warte.

* Ahhh, uhmmm, grummhu.. *

Ok Ich habs! Check mal Zeile 45! :freak:

PS: Quelltext bitte!
Windows 10 Pro, 64-Bit / Outtakes | Derek
Darkblade
Beiträge: 12
Registriert: 20.09.2006 18:40
Wohnort: Heilinghausen
Kontaktdaten:

Beitrag von Darkblade »

O.K.

Hier sind die Codes:

Code: Alles auswählen

If InitSprite()=0
  MessageRequester(#ERRMSG,"Could not initialize DirectDraw",0):End
EndIf
If InitSprite3D()=0
  MessageRequester(#ERRMSG,"Could not initialize Direct3D",0):End
EndIf
If InitKeyboard()=0
  MessageRequester(#ERRMSG,"Could not initialize Keyboard",0):End
EndIf
If InitMouse()=0
  MessageRequester(#ERRMSG,"Could not initialize Mouse",0):End
EndIf
If InitSound()=0
  MessageRequester(#ERRMSG,"Could not initialize Sound",0):End
EndIf
If fullscreen
  If InitMovie()=0
    MessageRequester(#ERRMSG,"Could not initialize Music",0):End
  EndIf
EndIf

...
...
...

;+++++++++++-Grafiken laden-+++++++++++

Procedure Load()

LoadSprite(2, "G:\Figur.bmp", 0)
   
EndProcedure

;+++++++++++-Grafiken, Hintergrund, usw. anzeigen-+++++++++++

Procedure Screen()

  
  CreateSprite(0, 50, 50)
  StartDrawing(SpriteOutput(0))
    Box(0, 0, 50, 50, RGB(30, 130, 100))
  StopDrawing()
  
  CreateSprite(1, 50, 50)
  StartDrawing(SpriteOutput(1))
    Box(0, 0, 50, 50, RGB(90, 20, 170))
  StopDrawing()

DisplayTransparentSprite(2, x, y) 
 
  For a = 0 To (#SCREEN_W/#SPRITE_W)/2
  For b = 0 To (#SCREEN_H/#SPRITE_H)/2 
    DisplaySprite(0,          backX+a*#SPRITE_W*2,backY+b*#SPRITE_H*2) 
    DisplaySprite(1,#SPRITE_W+backX+a*#SPRITE_W*2,backY+b*#SPRITE_H*2)
    DisplaySprite(1,          backX+a*#SPRITE_W*2,#SPRITE_H+backY+b*#SPRITE_H*2) 
    DisplaySprite(0,#SPRITE_W+backX+a*#SPRITE_W*2,#SPRITE_H+backY+b*#SPRITE_H*2)
  Next b 
  Next a   

EndProcedure
PS: Zeile 45 war nix
Hab die 4.2 Version
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Code: Alles auswählen

If fullscreen 
...was soll das?

in dem code ist kein OpenScreen() drin....

bitte nen beispielcode posten, der funktioniert und bei dem der fehler reproduziert wird.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Darkblade
Beiträge: 12
Registriert: 20.09.2006 18:40
Wohnort: Heilinghausen
Kontaktdaten:

Beitrag von Darkblade »

Ich hab da jetzt nur nen Teil des Codes Geschrieben indem das Problem ist, aber hier ist alles:

Code: Alles auswählen

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++-Variablen und Konstanten-+++++++++++

#ERRMSG="Error"
#SPRITE_W = 50 
#SPRITE_H = 50 
#SCREEN_W = 1024 
#SCREEN_H = 768 


;++++++++++++-Laden-++++++++++++
If InitSprite()=0
  MessageRequester(#ERRMSG,"Could not initialize DirectDraw",0):End
EndIf
If InitSprite3D()=0
  MessageRequester(#ERRMSG,"Could not initialize Direct3D",0):End
EndIf
If InitKeyboard()=0
  MessageRequester(#ERRMSG,"Could not initialize Keyboard",0):End
EndIf
If InitMouse()=0
  MessageRequester(#ERRMSG,"Could not initialize Mouse",0):End
EndIf
If InitSound()=0
  MessageRequester(#ERRMSG,"Could not initialize Sound",0):End
EndIf
If fullscreen
  If InitMovie()=0
    MessageRequester(#ERRMSG,"Could not initialize Music",0):End
  EndIf
EndIf


;+++++++++-Menü-++++++++++++++++


OpenWindow(0,(getsystemmetrics_(#SM_CXSCREEN)/2)-(200/2),(getsystemmetrics_(#SM_CYSCREEN)/2)-(140/2),200,140,#PB_WINDOW_SYSTEMMENU,"Hauptmenü")
CreateGadgetList(WindowID())
  ButtonGadget(0,10,10,180,30,"Starten")
  ButtonGadget(1,10,50,180,30,"Steuerung")
  ButtonGadget(2,10,100,180,30,"Beenden")
  
Repeat
  event=WaitWindowEvent()
  Delay(1)
  Select event
    Case #PB_EVENT_GADGET
      Select EventGadgetID()
        Case 0
          continue=1:fullscreen=1
        Case 1
        MessageRequester("Steuerung", "Bewegen: Pfeiltasten"+Chr(10)+"Angreifen: Linke Maustaste"+Chr(10)+"(Nur 1 Feld in 1 Richtung)"+Chr(10)+"Zaubern: Rechte Maustaste"+Chr(10)+"Pausieren (Für Zielen): Leertaste"+Chr(10)+"Zielen (Für Zauber): Mausrad", 0)
        Case 2
          CloseWindow(0)
          End
      EndSelect    
    Case #WM_CLOSE
      CloseWindow(0)
      End
  EndSelect
Until continue
CloseWindow(0)

;+++++++++++-Grafiken laden-+++++++++++

Procedure Load()

LoadSprite(2, "G:\Figur.bmp", 0)
   
EndProcedure

;+++++++++++-Grafiken, Hintergrund, usw. anzeigen-+++++++++++

Procedure Screen()

  
  CreateSprite(0, 50, 50)
  StartDrawing(SpriteOutput(0))
    Box(0, 0, 50, 50, RGB(30, 130, 100))
  StopDrawing()
  
  CreateSprite(1, 50, 50)
  StartDrawing(SpriteOutput(1))
    Box(0, 0, 50, 50, RGB(90, 20, 170))
  StopDrawing()

;Hier sollte eigentlich der Cha angezeigt werden, aber Fehler
  
  For a = 0 To (#SCREEN_W/#SPRITE_W)/2
  For b = 0 To (#SCREEN_H/#SPRITE_H)/2 
    DisplaySprite(0,          backX+a*#SPRITE_W*2,backY+b*#SPRITE_H*2) 
    DisplaySprite(1,#SPRITE_W+backX+a*#SPRITE_W*2,backY+b*#SPRITE_H*2)
    DisplaySprite(1,          backX+a*#SPRITE_W*2,#SPRITE_H+backY+b*#SPRITE_H*2) 
    DisplaySprite(0,#SPRITE_W+backX+a*#SPRITE_W*2,#SPRITE_H+backY+b*#SPRITE_H*2)
  Next b 
  Next a   

EndProcedure


;+++++++++++-überprüft, ob z.B. eine Taste gedrückt wird-+++++++++++

Procedure checkControls()

   ExamineKeyboard()
   ExamineMouse() 


       If KeyboardPushed(#PB_Key_Up) 
         backY + 2 
       EndIf 
       If KeyboardPushed(#PB_Key_Down) 
         backY - 2 
       EndIf 

       If KeyboardPushed(#PB_Key_Right) 
         backX - 2 
       EndIf 

       If KeyboardPushed(#PB_Key_Left) 
         backX + 2 
       EndIf


       If backY <= ((-(#SPRITE_H*2))-1) : backY + #SPRITE_H*2: EndIf 
       If backY => 1   : backY - (#SPRITE_H*2) : EndIf 
        
       If backX <= ((-(#SPRITE_W*2))-1) : backX + #SPRITE_W*2 : EndIf 
       If backX => 1   : backX - (#SPRITE_W*2) : EndIf 


       If KeyboardReleased(#PB_Key_Escape)
         End
       EndIf


EndProcedure


;+++++++++++-in dieser Schleife werden die einzellnen Proceduren (Schleifen) zusammengefügt-+++++++++

    Load()

Procedure gameloop()

      Screen()
      checkControls()

      FlipBuffers()
      ClearScreen(0,0,0)
      Delay(0)
      
EndProcedure





;++++++++++++-Hauptschleife-+++++++++++++




If FullScreen = 1
  If OpenScreen(1024, 768, 32, "Mysthic Dungeon")


    Repeat

      gameloop()

    ForEver

  EndIf
EndIf


End
Hab die 4.2 Version
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

argl.. du hast ja 3.30.. hab die signatur übersehen.
also kann ich eh nich testen.

mach als erstes mal das CreateSprite aus dem GameLoop raus.
du solltest die sprites nur einmal erzeugen, also pack den block mal in die Load-Procedure.
das könnte die ursache für die fehlermeldung sein.....

weiterhin:
backY und backX veränderst du innerhalb von checkControls(), aber sie sind den anderen programmteilen nicht zugänglich.
ich würde das alles nicht so extrem aufsplitten, sonst brauchst du viel zu viele globale Variablen.

und dein

Code: Alles auswählen

If fullscreen
  If InitMovie()=0
bringt immer noch nix:
zu beginn ist fullscreen = 0, dein InitMovie wird also niemals ausgeführt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Darkblade
Beiträge: 12
Registriert: 20.09.2006 18:40
Wohnort: Heilinghausen
Kontaktdaten:

Beitrag von Darkblade »

Vielen dank Kaeru Gaman.Den Tipp hat Geholfen un es funktioniert wieder alles wie gewohnt. :mrgreen:
PS: If fullscreen
If InitMovie()=0
MessageRequester(#ERRMSG,"Could not initialize Music",0):End
EndIf
ist jetzt weg
Hab die 4.2 Version
Benutzeravatar
Knight_Rider_2000
Beiträge: 145
Registriert: 05.02.2007 20:46
Kontaktdaten:

Beitrag von Knight_Rider_2000 »

Man sollte auch überlegen ob man erst ein screen öffnet dann erst das Sprite lädt das kann sonst auch nicht funktionieren
PB 4.20,Blitz3D 1.98,Microsoft Visual Studio 2005 Professional, Microsoft Visual Studio 2008 Professional
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Bild
Antworten