space shooter no display
BlitzMax Forums/BlitzMax Beginners Area/space shooter no display
| ||
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
|
| ||
| 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. |
| ||
| A Cls will be nice too. I've also found (perhaps depending on the platform) that LoadImage() doesn't work very well before Graphics(). |
| ||
| 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. |
| ||
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. |
| ||
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) |
| ||
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
|
| ||
| 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) |