my programs very slow

BlitzPlus Forums/BlitzPlus Programming/my programs very slow

ngi(Posted 2004) [#1]
I am new and my programs run very slow , I have a fast computer , any tips to incrase the speed of my games??
thx


Warren(Posted 2004) [#2]
Are you using the "text" command? On certain video cards with certain driver versions, that command is the death of performance.


Pongo(Posted 2004) [#3]
I think you will need to specify a little more about your program before anyone can really help you.

Is it 2d or 3d? Guessing 2d since this is in blitzplus. What resolution are you running at? How many graphics are you loading? If you are drawing tiles, How many? Are you running with debug on?

If 3D, how many polys? How many entities?,...


Rimmsy(Posted 2004) [#4]
I think you might be doing something like loading an image inside a loop. Can you post your code? or your loop?


ngi(Posted 2004) [#5]
Graphics 200,400
Const UPKEY = 200,LEFTKEY = 203, RIGHTKEY = 205, DOWNKEY = 207 , SPACEBAR = 57
Const ship1$ = "<>"
Const bullet1$ = "."
Const enemy1$ = "<><>"

Type ship
Field x,y
End Type

Type bullets
Field x,y
End Type

Type enemys
Field x,y
Field movx,movy
End Type

Global player.ship = New ship
Global enemy.enemys = New enemys



While Not KeyDown(1)
SetBuffer BackBuffer()
Cls
If KeyHit(LEFTKEY)
player\x = player\x - 3
EndIf

If KeyHit(RIGHTKEY)
player\x = player\x + 3
EndIf

If KeyHit(UPKEY)
player\y = player\y - 3
EndIf

If KeyHit(DOWNKEY)
player\y = player\y + 3
EndIf

If KeyHit(SPACEBAR)
bullet.bullets = New bullets
bullet\x = player\x
bullet\y = player\y
EndIf
drawship()
testbullets()
drawenemy()
Flip
Wend





Function drawship()
Text player\x,player\y,ship1$
If player\x < 2
player\x = 5
EndIf

If player\x > 193
player\x = 190
EndIf

If player\y < 0
player\y = 5
EndIf

If player\y > 390
player\y = 389
EndIf
End Function

Function testbullets()
For bullet.bullets = Each bullets
bullet\y = bullet\y - 5
If bullet\y < 0
Delete bullet
Else Text bullet\x,bullet\y,bullet1$
EndIf
Next
End Function

Function drawenemy()
enemy\x = 100
enemy\y = 100
enemy\movx = Rnd(-3,3)
enemy\movy = Rnd(-3,3)
enemy\x = enemy\x + enemy\movx
If enemy\x < 0 Or enemy\x > 200
enemy\movx = -enemy\movx
EndIf

Text enemy\x,enemy\y,enemy1$
End Function



well thats my code, remember im a newb , and any tips and stuff I appreciate them . Also any tips to improve I appreciate 'em also.


Warren(Posted 2004) [#6]
You don't need to "SetBuffer" every frame. Just once at the start is fine since you aren't changing it...

And I see that you ARE using the text command. If you remove those, does the program speed up?


Hotcakes(Posted 2004) [#7]
He must also have debug on because I don't know of any gfx cards that will boot into a fullscreen mode of 200x400 =]

I'd be willing to bet quite a bit that it's the Text command that's screwing things up. SetBuffer doesn't slow things down, although it is unneccessary to have it in the main loop.

Problem for him though Epic, is that it's a text game. =]

What you're gunna need to do, ngi, is use graphics in place of the text. The plus side to that is, you're not limited to the ASCII charset =]


ngi(Posted 2004) [#8]
Okay I will try to do a game with graphics and see if it is faster. thx =)


cbmeeks(Posted 2004) [#9]
This runs real fast for me...even with text.

Keep in mind people, just because there is a few text commands doesn't mean the program will slow to a crawl...text is ok for small things like what he is doing.

Also, you had the wrong scancode for the down arrow.

Const scr_w = 640
Const scr_h = 480

Graphics scr_w, scr_h,32,1
SetBuffer BackBuffer()

Const UPKEY = 200,LEFTKEY = 203, RIGHTKEY = 205, DOWNKEY = 208 , SPACEBAR = 57
Const ship1$ = "<V>"
Const bullet1$ = " ."
Const enemy1$ = "<><>"

Type ship
	Field x,y
End Type

Type bullets
	Field x,y
End Type

Type enemys
	Field x,y
	Field movx,movy
End Type

Global player.ship = New ship
Global enemy.enemys = New enemys

enemy\x=100
enemy\y=Rnd(200,400)

While Not KeyDown(1)
	Cls

	If KeyDown(LEFTKEY)
		player\x = player\x - 3
	EndIf

	If KeyDown(RIGHTKEY)
		player\x = player\x + 3
	EndIf
	
	If KeyDown(UPKEY)
		player\y = player\y - 3
	EndIf
	
	If KeyDown(DOWNKEY)
		player\y = player\y + 3
	EndIf
	
	If KeyHit(SPACEBAR)
		bullet.bullets = New bullets
		bullet\x = player\x
		bullet\y = player\y
	EndIf

	drawship()
	testbullets()
	drawenemy()

	Flip
Wend





Function drawship()

	Color 0,255,0

	Text player\x,player\y,ship1$
	If player\x < 0
		player\x = 0
	EndIf

	If player\x > scr_w
		player\x = scr_w
	EndIf

	If player\y < 0
		player\y = 0
	EndIf

	If player\y > scr_h
		player\y = scr_h
	EndIf
	
End Function

Function testbullets()
	For bullet.bullets = Each bullets
		bullet\y = bullet\y + 5
		If bullet\y > scr_h
			Delete bullet
		Else
			Color 255,255,255
			Text bullet\x,bullet\y,bullet1$
		EndIf
	Next
End Function

Function drawenemy()
	enemy\movx = Rnd(-3,3)
	enemy\movy = Rnd(-3,3)
	enemy\x = enemy\x + enemy\movx
	If enemy\x < 0 Or enemy\x > scr_w
		enemy\movx = -enemy\movx
	EndIf
	
	Color 255,255,0
	Text enemy\x,enemy\y,enemy1$
End Function 



-cbmeeks


ngi(Posted 2004) [#10]
great! that one works perfect thx man


Hotcakes(Posted 2004) [#11]
So what were the differances meeks?


cbmeeks(Posted 2004) [#12]
Well, first of all, he had the wrong scancode for the DownArrow. That may have botched some stuff up.

I also changed KeyHits to KeyDowns (except for fire).

Plus, full screen with larger area and I changed some colors for a neater look.

Oh, and like everyone else said, took the SetBuffer BackBuffer() out of the main loop.

cb