What do you mean by "...instead of using arrays"? should I use arrays for objects? how?
By using arrays you can simulate objects, which is TONS faster that using a lot of objects. You will agree with me when you master this technique.
For example, simulating movement for 100 virtual objects (by using simulation by arrays):
i = -1;
repeat 100
begin
i += 1;
object_x[i] += object_x_speed[i];
object_y[i] += object_y_speed[i];
end;
PS: Saying "I got 1.8 GB on my video card" isn't saying much, since it's the speed that really counts. For example, my GTX 275 896 MB is tons better than a 8800GTX with 2 GB. It's all in the speed.
PPS: Do realise that your i7 has 8 calculating threads, and GM can only use 1 of them. Single, dual, quad or octo core doesn't matter a thing, GM will only use 1 thread.
My array knowledge is low and exclusive to java (even though it's more or less the same concept). What that snippet of code is doing is this:
Firstly, think of i as a variable, one that usually counts (IE i = 0, i = 1, i = 2, ect). So this counting variable is starting at -1.
Next, repeat 100 will execute the code between the begin and end (like the drag and drop brackets kind of, or just the { } in code). What's that repeated code doing? Well i is being increased by 1 each time, so again, i is acting as a "counting variable".
Now I'm not entirely sure what's going on with object_x[i] += object_x_speed[i]; But, i is counting right? Well what this does is allows you to store data into an array.
For example, say you have this code (we'll ignore the concept of i)
array[0] = 'Bob'
array[1] = 100
array[2] = 4
array[3] = 20
array[4] = 'Bob is a cool guy, sometimes...'
This is storing information into 'array' (just the name a picked, you can call it walnutfeces if you want...it doesn't matter). So at position (what's in the [ ] ) 0 so [0] is a name which is a string. At [1] is hp, at [2] could be movement or speed, [3] is attack, [4] is a description. Notice how you can store different types of stuff in arrays (Actually, I'm not sure on this...in java arrays have types like a string array or an integer array...I've used GM arrays with different types of data though).
So when using i, you can move through the array "automatically" so to speak, count through it.
Like by using a for loop (or the repeat)
for (i = 0; i < 5; i += 1){
draw_text(0,0+i*16,string(array[i]));
}What the above code will do (put into a draw event) will loop 5 times. i starts at 0, it checks to see if i is less than 5 (if you started on 1, you'd want it to be less than or equal to 5 or less than 6) and it increases i by 1 each loop.
Inside the loop (done 5 times) it will draw text at 0,0+i*16 so when i = 0 (on the first loop) it will draw it at 0,0+0*16 so at 0,0. On the 2nd loop (i is now 1) it will draw the text at 0,0+1*16 so at 0,16...and so on.
What it draws will be what is stored in array 'array'. So when i = 0, it will draw 'Bob', when it is 1 it will draw 100, and so on (see what I stored in it above).
I understand some of this stuff won't work (I don't know if you can draw with a for loop, it sounds like a bad idea) but you get the picture. I added a string(...) to it because some of the data is not a string.
object_x[i] += object_x_speed[i]
So basically what this would do, what I think anyways is that
it's increasing the speeds of individual objects by what they are set to increase.
It's 2 arrays, object_x which is a list of objects and object_x_speed which is a list of speeds for those objects (to increase by).
So on i = 0, object_x[0] (whatever is stored there, could be an id could be an object name, whatever). increases by object_x_speed[0]...which doesn't make sense.
Perhaps
object_x[i].hspeed += object_x_speed[i];
? That way it's hspeed is increasing, not it's id or whatever. Granted, I may not undestand what's really going down here.
Well I hope this rough tut on arrays helped. Also for lowering the FPS, make sure anything out of the room is either destroyed or not visible. Don't bog down the draw events either.