Seite 1 von 1

Spriteprobleme

Verfasst: 12.04.2007 20:19
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?

Verfasst: 12.04.2007 20:48
von Fluid Byte
Das ist easy!

So, warte.

* Ahhh, uhmmm, grummhu.. *

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

PS: Quelltext bitte!

Verfasst: 13.04.2007 13:56
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

Verfasst: 13.04.2007 14:08
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.

Verfasst: 13.04.2007 14:19
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

Verfasst: 13.04.2007 14:33
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.

Verfasst: 15.04.2007 13:37
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

Verfasst: 15.04.2007 15:55
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

Verfasst: 15.04.2007 16:27
von MVXA