Dark Bit Factory & Gravity
PROGRAMMING => Other languages => Blitz => Topic started by: Hotshot on August 13, 2009
-
I have convert from Blitz 3D to BlitzMax but some of part code isnt working for reason.....could you tell me why please? ???
' specail thanks to therevills for Tsprite and Tplayer
SuperStrict
Graphics 800,600,0
Cls
'create player image
SetColor 255,255,255
DrawRect 0,0,50,30
Global playerImg:TImage=CreateImage(50,30,1,DYNAMICIMAGE|MASKEDIMAGE)
GrabImage playerImg,0,0
MidHandleImage playerImg
Type TSprite
Field x#,y#
Field dx#,dy#
Field yspeed#
Field image:TImage
Field w%,h%
Field w2%,h2%
Method draw()
DrawImage image, x, y
End Method
End Type
Global FirstX:Int =0
Global LastX :Int=100
Global Firsty:Int=0
Global lastX :Int=100
Type TPlayer Extends TSprite
Function Create:TPlayer(x#,y#)
Local p:TPlayer = New TPlayer
p.x = x
p.y = y
p.yspeed = 3
p.image = playerImg
p.w = ImageWidth(playerImg)
p.h = ImageHeight(playerImg)
p.w2 = p.w/2
p.h2 = p.h/2
Return p
End Function
Method update()
If KeyDown(KEY_UP)
y =y-yspeed
EndIf
If KeyDown(KEY_DOWN)
y =y+yspeed
EndIf
If y<=15 Then y=15
If y>=585 Then y=585
End Method
End Type
Type Rock
Field x#,y#
Field destroyed%
Function Make_Rock(r.x,r.y)
For i = 0 To 150
r.rock = New Rock ' Create rocks
r.x = Rand(FirstX,LastX) ' The starting X
r.y = Rand(FirstY,LastY) ' The starting Y
r.destroyed = False
Next
End Function
Method Update()
' Set color For the rocks
SetColor 255,80,10
' --------------Draw rocks----------------
For r.rock = Each Rock
DrawRect r.x,r.y,20,20
r.x = r.x - 10
If r.x < 0 Then ' If the rocks reaches the Left
r.x = Rand(580,950) ' of the screen, draw
r.y = Rand(1,580) ' it at the Left
EndIf
If RectsOverlap(p.x,p.y,30,15,r.x,r.y,20,20) Then
lifes = lifes - 1
If lifes =< 0 Then
p.x = -100
p.y = -100
EndIf
EndIf
If RectsOverlap(bullet_x,bullet_y,5,2,r.x,r.y,20,20) Then
Score=Score+1
' Delete r.rock
bullet_enabled = False
bullet_x = x + 5
bullet_y = y + 10
EndIf
Next
' if the rock go off the screen then kill it :)
If r.x<=0 Then r.destroyed = False
End Method
End Type
SetColor 255,255,255
SetBlend SOLIDBLEND
Global player:TPlayer = TPlayer.Create(30,200)
Make_Rock(r.x,r.y)
While Not AppTerminate()=1 And Not KeyHit(KEY_ESCAPE)
Cls
player.update()
player.draw()
rock.update()
rock.draw()
Flip
Wend
edited by rbz: added code tag
-
I dont have BMAX on me at present, I think you need to do the same as you've done for the player global, and add it to a TList.
-
Well, you really should consider making a global list for each type. Each type should have a function that returns a new instance of that type and adds it to a global list. Also, you might consider making an update method in the type which will move and draw the type. You want your objects stored in some container or they will get deleted as soon as all references to them go out of scope. Bmax has automatic garbage collection. If you use "new" you must store a reference to that new object either in a list or other structure. Or it will be deleted automatically.
You then can do something like this.
global ship_list:tlist = new tlist
type ship
field x:float, y:float
function construct(x_pos:float, y_pos:float)
local s:ship = new ship
s.x=x_pos
s.y =y_pos
listaddlast(ship_list,s)
endfunction
method draw()
'draw sprite here
endmethod
method move()
'move ship here
endmethod
method update()
move()
draw()
endmethod
method destroy()
listremove(ship_list,self)
endmethod
endtype
For local s:ship = eachin(ship_list)
s.update()
next
-
You might also get a lot from a visit to this page, which list a lot of blitzmax tutorials:
http://www.2dgamecreators.com/blitzmax/resources/ (http://www.2dgamecreators.com/blitzmax/resources/)
-
Pixel_Outlaw : that code example was interesting and worth learning from it.
You might also get a lot from a visit to this page, which list a lot of blitzmax tutorials:
http://www.2dgamecreators.com/blitzmax/resources/
zawran : thanks for link ;D