n00b question: #Sprite Object not initialized

Just starting out? Need help? Post your questions and find answers here.
gas01ine
User
User
Posts: 10
Joined: Sat Aug 02, 2003 5:12 pm
Location: Austria / EU

n00b question: #Sprite Object not initialized

Post by gas01ine »

Hi folks. It's been quite a while since my last PB project and I seem to have troubles with the basics. I am messing around with my little program (see below) and just can't get past the "#Sprite Object not initialized" Error. Any ideas?

Code: Select all

Enumeration
#windowMain
#sprite_PlayerIdle01
EndEnumeration

; the usual init stuff here
If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

; opening a window...
If OpenWindow(#windowMain,20,30,640,480,"Test") = 0
  MessageRequester("Error","Window",0)
EndIf

; setting up a windowed screen 
  If OpenWindowedScreen(WindowID(#windowMain),5,5,320,300,0,0,0)
  LoadSprite(#sprite_PlayerIdle01, "imgs\playerSprite01.png", 0)
 ; ^ yes, the filename is valid.
  
      Repeat
      FlipBuffers()
      ; i know, the order is a bit awkward but that's not my problem (or is it?)
              ClearScreen(RGB(0,0,0))

       DisplaySprite(#sprite_PlayerIdle01, 100, 100)   
       ;^ Here's the ERROR: "#Sprite Object not initialized." wtf?
    
        ExamineKeyboard()

        If KeyboardPushed(#PB_Key_Up)
          Quit = 1
        EndIf 
     Until Quit = 1
  EndIf 
Thanks in advance!
Phil
User avatar
nco2k
Addict
Addict
Posts: 1344
Joined: Mon Sep 15, 2003 5:55 am

Post by nco2k »

you just forgot:

Code: Select all

UsePNGImageDecoder()
but i have modified your code a little. maybe it will become usefull:

Code: Select all

UsePNGImageDecoder(); (NEW) use the png image decoder if you need *.png support

Enumeration
  #windowMain
  #sprite_PlayerIdle01
EndEnumeration

; the usual init stuff here
If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

; opening a window...
If OpenWindow(#windowMain,20,30,640,480,"Test") = 0
  MessageRequester("Error","Window",0)
  End; (NEW) it failed and we cant keep going, so lets just end the app
EndIf

; setting up a windowed screen
If OpenWindowedScreen(WindowID(#windowMain),5,5,320,300,0,0,0)
  If LoadSprite(#sprite_PlayerIdle01, "imgs\playerSprite01.png", 0); (NEW) check if the loading was successful
    
    Repeat
      
      ;(NEW) flush window events
      Repeat
        WinEvent = WindowEvent()
        If WinEvent = #PB_Event_CloseWindow
          Quit = 1
        EndIf
      Until WinEvent = 0
      
      ; check user input
      ExamineKeyboard()
      If KeyboardPushed(#PB_Key_Up)
        Quit = 1
      EndIf
      
      ; do the calculations here
      ; ...
      
      ; display stuff
      ClearScreen(RGB(0,0,0))
      DisplaySprite(#sprite_PlayerIdle01, 100, 100)
      FlipBuffers()
      
    Until Quit = 1
    
  EndIf
EndIf
c ya,
nco2k
If OSVersion() = #PB_OS_Windows_ME : End : EndIf
gas01ine
User
User
Posts: 10
Joined: Sat Aug 02, 2003 5:12 pm
Location: Austria / EU

Post by gas01ine »

nco2k wrote:you just forgot:

Code: Select all

UsePNGImageDecoder()
just lol! figuring out that myself would have taken me another 8 hours of banging my head against the keyboard first (if InitKeyboard() <> 0) ;).

and thanks heaps for the now neatly organized code! i just luv the PB-community!
wolfwood2x
User
User
Posts: 76
Joined: Sun Oct 02, 2005 5:08 am

Post by wolfwood2x »

I am having a similar issue. It has been a while since I have tried to use graphics in PB and I am having a few issues remembering how to get this working.

Code: Select all

nitSprite()
InitKeyboard()

OpenWindowedScreen(1, 2,2,800,600,0,0,0)

UseJPEGImageDecoder()

LoadSprite(1000, "image2.jpg", 0) 
         DisplaySprite(1000,0,0)

Repeat
         FlipBuffers()
         ClearScreen(0)
         ExamineKeyboard()
         
Until KeyboardPushed(#PB_Key_Escape)

The program dies on Display sprite and states that #Sprite Object not initialized.
Help me out here what am I doing wrong?
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4322
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Post by Rook Zimbabwe »

Just a guess:
nitSprite()
InitKeyboard()
should be InitSprite()

all else looks OK except you

OpenWindowedScreen(1, 2,2,800,600,0,0,0)

there is no window to open the screen into and you request 0 color mode?

try: OpenScreen(Width, Height, Depth, Title$)

Code: Select all

InitSprite()
InitKeyboard()

OpenScreen(800,600,16,"GAME 0") 

UseJPEGImageDecoder()

LoadSprite(1000, "image2.jpg", 0)


Repeat
         ClearScreen(0)
         DisplaySprite(1000,0,0)
         FlipBuffers()

         ExamineKeyboard()
         
Until KeyboardPushed(#PB_Key_Escape)

instead...
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
wolfwood2x
User
User
Posts: 76
Joined: Sun Oct 02, 2005 5:08 am

Post by wolfwood2x »

the nitSprite was a cut and paste error it is actually correct in the code..

If I change it to OpenScreen instead it still does the same thing. The screen or window opens, it tries to load the sprite and then the program crashes and I get the error #Sprite object not initialized.
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4322
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Post by Rook Zimbabwe »

OK the only thing I can think of is that the image is NOT in the dirtectory with the code when you run it.

Try this:

Code: Select all


Enumeration
    #Sprite
    #Cursor
EndEnumeration


If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
    MessageRequester("Error", "DirectX 7 Fail!", 0)
    End
EndIf

wide = 800
High = 600

If OpenScreen ( wide, High,32,"Standard") = 0
    MessageRequester("Error", "No screen could be Initialized...", 0)
    End
EndIf

LoadSprite(#Sprite, "door2.bmp",0)

LoadSprite(#Cursor, "zcursor5.bmp",#PB_Sprite_Memory)

Maus.Point

Repeat
    ClearScreen(RGB(0,0,0))
    
    ExamineMouse()
    ExamineKeyboard()
    
    Maus\x = MouseX() - 16
    Maus\y = MouseY() - 16
    
    If KeyboardPushed(#PB_Key_Left) Or KeyboardPushed(#PB_Key_A)
        SPRITEX = SPRITEX - 3
    EndIf
    If KeyboardPushed(#PB_Key_Right) Or KeyboardPushed(#PB_Key_D)
        SPRITEX = SPRITEX + 3
    EndIf
    ;
    If KeyboardPushed(#PB_Key_Up) Or KeyboardPushed(#PB_Key_W)
        SPRITEY = SPRITEY + 2
    EndIf
    If KeyboardPushed(#PB_Key_Down) Or KeyboardPushed(#PB_Key_S)
        SPRITEY = SPRITEY - 2
    EndIf
    
    ; you are going to have to put in off screen trapping routines
    
    DisplaySprite(#Sprite, SPRITEX, SPRITEY)
    
    
    DisplayTransparentSprite(#Cursor, Maus\x, Maus\y)
    
    FlipBuffers()
    
    If KeyboardPushed(#PB_Key_Escape)
        Quit = 1
    EndIf
    
    Delay(3)
Until Quit

Use the wasd or arrow buttons on your sprite and have a transparent BMP for the cursor... Start with BMP images first... at the size of a sprite there isn't really any size savings!

8)

Transparent BMP color is RGB(0,0,0) = BLACK BLACK... this can be altered...
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4322
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Post by Rook Zimbabwe »

Eeeeps! I made a dyslexic mistake again:

Code: Select all

    If KeyboardPushed(#PB_Key_Up) Or KeyboardPushed(#PB_Key_W)
        SPRITEY = SPRITEY - 2
    EndIf
    If KeyboardPushed(#PB_Key_Down) Or KeyboardPushed(#PB_Key_S)
        SPRITEY = SPRITEY + 2
    EndIf
That will move it up and down... r at an agle if you hold 2 keys!
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
User avatar
Kaeru Gaman
Addict
Addict
Posts: 4826
Joined: Sun Mar 19, 2006 1:57 pm
Location: Germany

Post by Kaeru Gaman »

wolfwood2x wrote:I am having a similar issue. It has been a while since I have tried to use graphics in PB and I am having a few issues remembering how to get this working.

Code: Select all

nitSprite()
InitKeyboard()

OpenWindowedScreen(1, 2,2,800,600,0,0,0)

UseJPEGImageDecoder()

LoadSprite(1000, "image2.jpg", 0) 
         DisplaySprite(1000,0,0)

Repeat
         FlipBuffers()
         ClearScreen(0)
         ExamineKeyboard()
         
Until KeyboardPushed(#PB_Key_Escape)

The program dies on Display sprite and states that #Sprite Object not initialized.
Help me out here what am I doing wrong?
1. if you are on Windows, open a Window first, and then put the WindowedScreen onto it, using WindowID(#MyWindow) as first parameter.

Code: Select all

OpenWindow(0,2,2,800,600,"Windowed Screen")
OpenWindowedScreen(WindowID(0),0,0,800,600,0,0,0)
2. make sure you are acessing the right directory and the spritefile is in it.
you can easily check this with

Code: Select all

If Not LoadSprite(1000, "image2.jpg", 0)
  MessageRequester("Error","No Sprite, man!") : End
EndIf
3. you need to display the sprite in each frame, that means between clearing the screen and flipping the buffers.

Code: Select all

Repeat
    ExamineKeyboard()
    ClearScreen(0)
    DisplaySprite(1000,0,0) 
    FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
4. Next time please provide more exactly problem information than "I am having a similar issue." ;)
oh... and have a nice day.
wolfwood2x
User
User
Posts: 76
Joined: Sun Oct 02, 2005 5:08 am

Post by wolfwood2x »

4. Next time please provide more exactly problem information than "I am having a similar issue." Wink
Sorry I thought
The program dies on Display sprite and states that #Sprite Object not initialized.
Help me out here what am I doing wrong?
was pretty exact... What other details should I have included to make diagnosis easier?


PS this is not a flame... i am asking
User avatar
Kaeru Gaman
Addict
Addict
Posts: 4826
Joined: Sun Mar 19, 2006 1:57 pm
Location: Germany

Post by Kaeru Gaman »

well sorry, as stated above you had two other mistakes in your code that would prevent correct execution.

so I think you work on Linux, since you seem not to need a window for the windowed screen in advance, right?

check if the picture is loaded by implementing the check and the msgreq as in 2.

if this loading does not work (= error message pops up), you have to find out why.
most times you are in the wrong current directory, so you have to get the path of your exe first
and change the current dir or provide a complete path parameter for loading the sprite file.

since I only work under Windows, I don't know if there are additional
issues regarding access rights of files to take care of under Linux.

it is also possible that the format the sprite is saved in is not compatible to the implemented image format decoders.
oh... and have a nice day.
wolfwood2x
User
User
Posts: 76
Joined: Sun Oct 02, 2005 5:08 am

Post by wolfwood2x »

Well the image and code worked under 3.9 I believe. But that was in windows and not linux. (you are correct I am working in linux now)I am porting over some old spike code to play with and re-learn this stuff. So unless it is no longer compatible the image should still be alright.

Since I am at work now I can't verify the image was in the same directory although I am pretty sure it was. Ill spike out something in a few and see if maybe that was the issue.
Thanks for the suggestions
wolfwood2x
User
User
Posts: 76
Joined: Sun Oct 02, 2005 5:08 am

Post by wolfwood2x »

Alright I have verified that the issue is not the path to the image. I had it in the same directory with the pb file and even tried putting the full path to the image file there and I still get an error. If I use your code I get the no sprite man pop up message. I have also tried using a different image to ensure there was not something wrong with the file and I set the permissions to 777 on it just to make sure it had nothing to do with file system permissions.
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4322
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Post by Rook Zimbabwe »

So my code did not work for you? I tried Kaeru's code and it works as well...

in windows XP Pro...
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
User avatar
Kaeru Gaman
Addict
Addict
Posts: 4826
Joined: Sun Mar 19, 2006 1:57 pm
Location: Germany

Post by Kaeru Gaman »

ok, try a PNG then and the PNG decoder...

I think you need a decoder in every case since there is no BMP under Linux....?

also, try to open a textfile for reading in the same directory,
to make entirely sure you are accessing the correct dir.


and perhaps alter the Title of the topic to put a fat LINUX into it to make the Linux proggers look into here...
oh... and have a nice day.
Post Reply