space shooter no display

BlitzMax Forums/BlitzMax Beginners Area/space shooter no display

technospy(Posted 2015) [#1]
im writting my own space shooter for a personal project. for some reason the graphics dont display. could it be something with the initialization?

Global ste:String = "game"
Global bkd:TImage =LoadImage("C:\Users\MONSTERBUZZ786\Downloads\1 (42).jpg")
Global shipster:TImage = LoadImage("C:\ship.bmp")
Const WIDTH = 640,HEIGHT = 480, DEPTH = 32

Graphics WIDTH,HEIGHT,DEPTH

While Not KeyDown(KEY_ESCAPE)

	Select ste
    	Case menu
		'/rend gui
   		 Case game
			If shipa:ship = Null Then ship.Create(shipa, shipster)
			'/network
   		    '/get input
			Global keys1:Int = KeyDown(KEY_LEFT)
			Global Keys2:Int = KeyDown(KEY_RIGHT)
			Global keys3:Int = KeyDown(KEY_UP)			
			
			If shipa Then shipa.turn(Keys1, Keys2, Keys3, shipa)
    		'/logic
	
	        '/render backdrop
			TileImage(bkd, 0,0,0)
			DrawImage(shipster, 0, 0,0)
	        '/render ship
			ship.render(shipa)
			
			'/render hud
			SetAlpha 1
			SetColor 255,255,255
			DrawText "Score:"+Score+" "+ballcount,2,2

		    '/capture screen shot
		Print("hello")
		    If ste <> "game" Then cap:TImage = LoadImage("C:\ship.bmp")
	    Case batt
	        ste = "game"
	        'music
	    Case dead
			shipa = Null
			ste = "game"
	       	'/rend gui
	        'music
		Case dbug
			'/rend gui
	End Select
Wend
Type ship
	Field x
	Field y
	Field ang
	Field vel
	Field wep
	Field eqp
	Field img:TImage

	Function Create(ships:ship, image:TImage)
		ships.img = image
	End Function
	
	Method turn(keys1, keys2, keys3, ships:ship)
	    If keys1 Then ships.ang:-2
        If keys2 Then ships.ang:+2
        If keys3 Then ships.vel:+5
	End Method
	
	Method move(ships:ship)
	    If ships Then ships.x:+Sin(ships.ang * (ships.vel / 15))
		If ships Then ships.y:+Cos(ships.ang * (ships.vel / 15))
        If ships.vel Then ships.vel:-1
	End Method
	
	Function render(ships:ship)
		DrawImage(ships.img, ships.x, ships.y, 0)
	End Function
End Type 



TomToad(Posted 2015) [#2]
I don't see Flip anywhere in the code. After doing all your rendering, you need to do Flip to switch the backbuffer to the front.


Brucey(Posted 2015) [#3]
A Cls will be nice too.

I've also found (perhaps depending on the platform) that LoadImage() doesn't work very well before Graphics().


technospy(Posted 2015) [#4]
i was using flip but i get the error unhandled exception:attempt to acess field or method of null object, with my public function.
how would you write this in blitzmax?
Function Create(ships:ship, image:TImage)
	ships.img = image
End Function

ship.create(shipa:ship, image:timage)


i want to have the function create the instance, from a type, and set its fields for the user.


Brucey(Posted 2015) [#5]
Your Create function could be something like :
Function Create:ship(image:TImage)
    Local ships:ship = New ship
	ships.img = image
    Return ships
End Function


Note it is returning a new instance of ship.


technospy(Posted 2015) [#6]
now when i use a statement to name the ship, i'm stuck with unable to convert from 'int' to 'ship'.

If shipa:ship = Null Then shipa:ship = ship.Create(shipster)



coffeedotbean(Posted 2015) [#7]
Like....?

SuperStrict
Graphics 640,480,32

' // Images
Global gfx_ship:TImage=LoadImage("path\to\image")

'// Objects
Global myShip:TShip = TShip.Create(gfx_ship,320,240)


' // ----------------------------------------------------
While Not KeyDown(KEY_ESCAPE)
Cls

   myShip.Render
   myShip.Update

Flip
Wend
' // ----------------------------------------------------

' // Ship Type
Type TShip
   Field img:TImage
   Field x:Int
   Field y:Int

   Function Create:TShip(_img:TImage,_x:Int,_y:Int)
      Local a:TShip = New TShip
      a.img = _img
      a.x = _x
      a.y = _y
      Return a
   End Function
   
   Method Render:Int()
      DrawImage(img,x,y)
   End Method

   Method Update:Int()
      x=x+1
   End Method

End Type



Brucey(Posted 2015) [#8]
Try adding Strict or SuperStrict to the top of your program, and fix all the errors it complains about :-)

"shipa" isn't declared anywhere. A non-strict program lets you do bad things like that - with unforeseen consequences (like the error you are currently seeing)