memory errors caused bu looping
BlitzMax Forums/BlitzMax Beginners Area/memory errors caused bu looping
| ||
Graphics 640,480,0
Global instance_count=0
Include "Enemy.bmx"
Include "Tplayer.bmx"
Include "shot.bmx"
Include "fragment.bmx"
Include "star.bmx"
SeedRnd MilliSecs ()
SetBlend LIGHTBLEND
SetAlpha 1
Player.Create(400,240,90)
'___________________________________variables____________________________________________________
rings_position#=1
cycletimer#=0
Global score=0
Global game_state=0 '0=title,1=game,2=gasme over
'____________________________________functions____________________________________________________
' draw rect unfilled
Function draw_rect_hollow#(x1#,y1#,width#,Height#)
DrawLine x1,y1,x1+width-1,y1
DrawLine x1,y1,x1,y1+Height-1
DrawLine x1+width-1,y1,x1+width-1,y1+Height-1
DrawLine x1,y1+Height-1,x1+width-1,y1+Height-1
EndFunction
' draw circle unfilled
Function draw_ellipse_hollow#(x1#,y1#,width#,Height#,segments:Int,rotation#)
Local center_x#=x1+(width/2)
Local center_y#=y1+(Height/2)
Local x_radius#=((width-1)/2)
Local y_radius#=((Height-1)/2)
Local angle#=360/segments
For i=0 To segments-1 Step 1
DrawLine center_x+Sin((i*angle)+rotation)*x_radius,center_y+Cos((i*angle)+rotation)*y_radius,center_x+Sin(((i+1)*angle)+rotation)*x_radius,center_y+Cos(((i+1)*angle)+rotation)*y_radius
Next
EndFunction
' draw lines from center
Function draw_ellipse_lines#(x1#,y1#,width#,Height#,segments:Int)
Local center_x#=x1+(width/2)
Local center_y#=y1+(Height/2)
Local x_radius#=((width-1)/2)
Local y_radius#=((Height-1)/2)
Local angle#=360/segments
For i=0 To segments-1 Step 1
DrawLine center_x+Sin(i*angle)*x_radius,center_y+Cos(i*angle)*y_radius,center_x,center_y
Next
EndFunction
' compute the distance between two points
Function point_distance#(x1#,y1#,x2#,y2#)
Local x_distance#=x1-x2
Local y_distance#=y1-y2
Local distance#=Sqr((x_distance*x_distance)+(y_distance*y_distance))
Return distance
EndFunction
'compute the angle between 2 points
Function point_direction#(x1#,y1#,x2#,y2#)
Local Angle# = ATan2(y2-y1,x2-x1)
If angle<0
angle:+ 360
End If
Return angle
End Function
While not KeyDown(KEY_ESCAPE)
While game_state=0
Cls
' set the general crapps
SetColor 255,255,255
DrawText"Instances"+instance_count,0,0
'draw background color
SetColor 0,0,0
DrawRect 0,0,640,480
' set the positions of the flamming burrons
' 1st button
start_button_x=320+Cos(270)*64
start_button_y=240+Sin(270)*64
SetColor 255,255,255
If point_distance(start_button_x,start_button_y,MouseX(),MouseY())<48
fragment.Create(start_button_x,start_button_y,3,270,90,96,8,16,24,60,-1.5)
Else
fragment.Create(start_button_x,start_button_y,3,270,90,96,5,5,5,60,-1.5)
EndIf
SetColor 255,255,255
'2nd button
option_button_x=320+Cos(150)*64
option_button_y=240+Sin(150)*64
If point_distance(option_button_x,option_button_y,MouseX(),MouseY())<48
fragment.Create(option_button_x,option_button_y,3,150,90,96,24,8,16,60,-1.5)
Else
fragment.Create(option_button_x,option_button_y,3,150,90,96,5,5,5,60,-1.5)
EndIf
'3rd button
quit_button_x=320+Cos(30)*64
quit_button_y=240+Sin(30)*64
If point_distance(quit_button_x,quit_button_y,MouseX(),MouseY())<48
fragment.Create(quit_button_x,quit_button_y,3,30,90,96,16,24,8,60,-1.5)
Else
fragment.Create(quit_button_x,quit_button_y,3,30,90,96,5,5,5,60,-1.5)
EndIf
' check to see what the player has selected
If MouseDown (MOUSE_LEFT)=True and point_distance(start_button_x,start_button_y,MouseX(),MouseY())<48
game_state=1
End If
' update fragments
For Local m:fragment=EachIn fragment.fragment_list
m.Update()
Next
Flip
Wend
'____Main Game_Loop_________________________________________________
While game_state=1 ' make sure the user hasn't quit
Cls
'FPS_Counter <> Runs And displays the FPS
'--------------------------------------------
SetRotation 0 'Undo rotation
SetScale 1,1 'Undo scale
FPS_Counter=FPS_Counter+1
If FPS_Counter_time+1000 =< MilliSecs()
FPS=FPS_Counter' <- Frames/Sec
FPS_Counter=0
FPS_Counter_time=MilliSecs()
EndIf
DrawText ""+score,20,20
'--------------------------------------------
' draw step
' draw background
SetColor 2,6,73
DrawRect 0,0,640,480
SetColor 45,56,68
draw_ellipse_hollow(160,0,480,480,36,0)
draw_ellipse_lines(160,0,480,480,36)
draw_ellipse_hollow(400-rings_position,240-rings_position,rings_position*2,rings_position*2,18,0)
'the font please
SetScale 2,2
DrawText "Instances: "+instance_count,0,0
SetScale 1,1
' make the enemies
If cycletimer=0
Enemy.Create(400,240,Rand(360)+RndFloat(),1)
EndIf
' make the stars
Star.Create(400,240)
' update enemy
For Local E:Enemy=EachIn Enemy.Enemy_List
E.Update()
Next
' update player
For Local f:Player=EachIn Player.Player_List
f.Update()
Next
' update shots
For Local g:Shot=EachIn Shot.shot_list
g.Update()
Next
' update fragments
For Local k:fragment=EachIn fragment.fragment_list
k.Update()
Next
' update stazrs
For Local l:Star=EachIn Star.Star_list
l.Update()
Next
' set the cycle timer +1
If cycletimer<10
cycletimer:+1
Else
cycletimer=0
EndIf
rings_position:*1.03
' draw the movement lines
If rings_position>240
rings_position=1
EndIf
Flip
Wend
Wend
I hate to throw that whole thing at you at once but now it's doing it again, I think it's happening in the lower while loops. the global game_state value is first set to 0 then in the firsst while loop it execuces code untill the player presses a button which sets game_state to 1. This should exit the first while loop and move to the second while loop. But it never does and it says there is a memory error and shuts down. |
| ||
| 1. Stop posting code questions if you are unable to use [ code ] or [ codebox ] tags ... No one is wasting its time to reformat your mess (I'm sorry, thats what it actually is) 2. Don't post anything unless you tested it with strict. In most cases its caused by wrongly written variables that are automatically intialized with 0. Especially when using local, you must use it, otherwise variable scopes do NOT work (ie a variable within a loop is not local to that loop only *unless this changed in some new version since 1.12*) 3. On your problem: Where are start_button_x and _y defined? perhaps you just compare to the wrong position ... like: you did not try in the top left corner, where you should for a test in [0,0] - [48,48] box. And you don't need to use =true ... either it is or is not ... :-) (if true then just mousedown(mouse_left) else not mousedown(mouse_left) ) |
| ||
| A little harsh Dreamora. For a list of commands (including the [code] tags Dreamora was talking about, use this link: www.blitzbasic.com/faq/faq_entry.php?id=2 I've been looking for that [code] tag for a while. The list of command is on the FAQ on the main www.blitzbasic.com homepage not anywhere on the forum. Sin |
| ||
| Oh thanks! I just don't know the code for the forum commands. I'm using the BLide compiler: ![]() Maybe the prolem lies in vars, I still feel like I don't know enough about bmax, do I need to declare every var as local or global? The while loops work in a small demo I made but it doesn't work in my game which is getting to be like spagetti code. I noticed i strict mode everything is going wrong, which mean's i have been using horrid syntax and poor declarations. Hopefully I can find the problem, everything was going great until now. I'm really not used to BASIC, i do use my TI-83 calc but this is very new to me syntax wise. I kind of miss all those curly braces. |
| ||
| Okay to add to what Dreamora said: 1) Please provide examples that can compile (add a link to any includes or media you're using). 2) Please use indentation consistently. Anyway, I don't see anything obviously wrong with your code (but I can't compile it so it's hard to say for sure). In any case it looks to me like you have DebugMode switched off? Try enabling it, and see if you don't get a more meaningful error. |
| ||
| Ok I'll upload all dependant files here is the folder http://s6.exoload.com/uploads/506/1148423329.zip Thanks for your help, I know n00bs are annoying, but I have to start somewhere... |
| ||
| I had a quick look at your code but I cant really work out what it is doing. In the first loop you are creating the buttons... but you are creating buttons in every frame and then cycling through the fragment_list to display them. Well... if Create is creating a new item in the list then surely every frame is creating 3 more fragments. Or have I missed something and the fragment_list is being cleared down every frame ? |
| ||
| The error is in Shot.Update, as debugger says. Further checking the debugger data shows, that size in Draw is over 200 millions The x position is something like - 250million and other things like that. Hope that helps you to find out where to start :) |
| ||
| Tip of the day :) Run in debug mode, when you get the exception error click ok, then double click on the last item in the debug window, it should show you the line where the error happend. |
| ||
| No there are no button objects, they are just place values. I'll have to look into the rest thanks for now guys! |
| ||
Here is the problem (in TPlayer.bmx):Function Create(x,y,angle=90) Local temp_player:Player= New Player temp_player.x=400+Tan(270)*240 temp_player.y=240+Cos(270)*240 temp_player.angle=angle ListAddLast(Player_List,temp_player) instance_count:+1 EndFunctionthe fix: Function Create(x,y,angle=90) Local temp_player:Player= New Player temp_player.x=400+Sin(270)*240 temp_player.y=240+Cos(270)*240 temp_player.angle=angle ListAddLast(Player_List,temp_player) instance_count:+1 EndFunctionNice work BTW, for some reason it doesn't quit here when you hit escape tho'. I know n00bs are annoying No they aren't. They give the rest of us an oppertunity to look big and clever. |
