Computer Science Canada

Out of id numbers?

Author:  PmEe [ Tue Dec 14, 2004 3:30 pm ]
Post subject:  Out of id numbers?

When i run my program for 1-2 minutes an error pops up Cannot allocate items: out of id numbers (max 1000)


how do i fix this

Author:  Delos [ Tue Dec 14, 2004 3:34 pm ]
Post subject: 

It would really help if you posted your code so that we could see why this is happening.

I have a feeling you're using Pic.New() functions in a loop without using Pic.Free(), but until i see the code I can't be sure.

Author:  PmEe [ Tue Dec 14, 2004 3:36 pm ]
Post subject: 

Yeah I am I was just about to post the code but the problem i had using pic.free with loops was it would exit the run and say variable was freed


code:
process movement
    loop
        Pic.Draw (grass1, 0, 0, picCopy)
        Input.KeyDown (chars)
        if chars ('w') then
            y (1) := y (1) + 2
            view := 1
            Pics (1) := Pic.FileNew ("char1.bmp")
            if x (1) < x (2) + 27 and x (1) > x (2) - 27 and y (1) > y (2) - 27 and y (1) < y (2) + 27 then
                y (1) := y (1) - 5
            end if
        end if
        if chars ('d') then
            x (1) := x (1) + 2
            view := 2
            Pics (1) := Pic.FileNew ("charright1.bmp")
            if x (1) < x (2) + 27 and x (1) > x (2) - 27 and y (1) > y (2) - 27 and y (1) < y (2) + 27 then
                x (1) := x (1) - 5
            end if
        end if
        if chars ('a') then
            x (1) := x (1) - 2
            view := 3
            Pics (1) := Pic.FileNew ("charleft1.bmp")
            if x (1) < x (2) + 27 and x (1) > x (2) - 27 and y (1) > y (2) - 27 and y (1) < y (2) + 27 then
                x (1) := x (1) + 5
            end if
        end if
        if chars ('s') then
            y (1) := y (1) - 2
            view := 4
            Pics (1) := Pic.FileNew ("charfront1.bmp")
            if x (1) < x (2) + 27 and x (1) > x (2) - 27 and y (1) > y (2) - 27 and y (1) < y (2) + 27 then
                y (1) := y (1) + 5
            end if
        end if
        if chars ('.') and doo = 20 then
            fork attack
        end if
        doo += 1
        if doo > 20 then
            doo := 20
        end if
        if x (1) >= 640 then
            x (1) := x (1) - 40
        end if
        if x (1) <= 0 then
            x (1) := x (1) + 40
        end if
        if y (1) >= 480 then
            y (1) := y (1) - 40
        end if
        if y (1) <= 0 then
            y (1) := y (1) + 40
        end if
        Pic.Draw (Pics (1), x (1), y (1), picMerge)
        View.Update
        delay (10)
        cls
    end loop
end movement

Author:  Tony [ Tue Dec 14, 2004 4:56 pm ]
Post subject: 

you're declearing too many pictures... I not quite sure how you possibly managed to do that, since you have a grand total of four Confused

how about trying to use 4 different variables to hold 4 different pictures?

Author:  SuperGenius [ Tue Dec 14, 2004 5:33 pm ]
Post subject: 

I got the same error when I was using a Font.Draw command inside a loop to increase the colour attribute each time the loop ran. It would work fine for a few seconds and then crash. I never got around to fixing that though.

Author:  Delos [ Tue Dec 14, 2004 9:22 pm ]
Post subject: 

Hmm...try this:

Set up a seperate procedure that refreshes your pictures...
This will first of all Free the picture (given that a pic already exists w.r.t. that var)
Then it will recreate the pic.

Ensure that all your creation references (Pic.FileNew() etc) are out of the loop, then call them within the loop.
Also, don't use processes!!!!!. You've got the right idea, just set it up in a looping procedure instead, it will make your life easier.

Author:  pluckster [ Wed Dec 15, 2004 1:53 pm ]
Post subject: 

i see your problem. i did it while making my antAI thing
Quote:
loop
Pic.Draw (grass1, 0, 0, picCopy)
Input.KeyDown (chars)
if chars ('w') then
y (1) := y (1) + 2
view := 1
Pics (1) := Pic.FileNew ("char1.bmp")


if you have Pic.FileNew in a loop then it will make a new picid for each time it makes that picture even iif youve already done it before. just put all of those before the loop and youll be fine.


: