Hola jonas aunque no he mirado mucho el hilo, te explico porque en estó soy un "experto" más que nada porque creo que la mitad de mi vida con GLbasic me he dedicado ha hacer el disparo para los marcianos...
Te explico tienes 2 posibilidades, una es un array Dinámico, creo que por tú tierra los arrays les llamáis arreglos, y luego es hacerlo con un array estático... Te dejo esté ejemplo que te he hecho con array dinámico, el de estático a ver si lo hago mañana, que casi se me acaba la "tinta"

// --------------------------------- //
// Project: shot
// Start: Monday, June 11, 2012
// IDE Version: 10.283
// SETCURRENTDIR("Media") // go to media files
//Esto es para que el array, un único array esté como divido en dos, comparte el Indice, pero tiene x e y, pero en realidad es el mismo array
TYPE SHOT
x;
y;
ENDTYPE
GLOBAL shot[] AS SHOT // Aqui lo que haces es que el Array pueda tener use de las x e y , o sea shot[indice].x o shot[indice.y]
DIM shot[0]
GLOBAL n_Shot AS SHOT // Esta variables es la que utilizamos como contador más adelante, fijate que le sucede igual que al array
// o sea puedes escribir n_Shot.x o n_Shot.y, es necesario ponerlo asi, porque sino no puedes añadir indices
// al array, porque tambien pertenece al TYPE !!!OJO EN EL CÓDIGO MÁS ABAJO PORQUE TE PUEDE CONFUNDIR ALGO!!!
GLOBAL mx,my,b1,b2 //variables para el raton
GLOBAL sx,sy //para la pantalla asi ya tenemos el valor para el límite derecho, ya que es un shoter horizontal
GETSCREENSIZE sx,sy // Cojemos las medidas de la pantalla, por defecto pone la resolucion a 640,480--- me parece
WHILE TRUE
MOUSESTATE mx,my,b1,b2 //function para hacer que el raton funcione
get_Positions() //funcion para cojer las coordenadas de raton y meterselas al array
draw_Shot() //Dibujo el disparo, en este caso solo es un asterisco
SHOWSCREEN
WEND
FUNCTION get_Positions:
IF b1 // Si pulso el boton izquierdo
INC n_Shot.x // incrementa aquella variable que teniamos más arriba en 1, o sea cada vez que le doy suma 1, pero fijate que
// tiene esa .x detras de n_Shot
DIMPUSH shot[], n_Shot //Esto lo que hace es que el array se agranda, como estámos pulsando el boton, pues esté array que tenia
//indice 0, pasa a tener indice 1, indice 2, indice 10, 30 .... ETC
shot[n_Shot.x-1].x = mx //Esto es importante, lo que te hace es que cada vez que pulso, mete en el array la coordenada del raton
// en este caso las X del mouse, pero fijate muy importante,
//n_Shot.x-1 , el indice tiene un menos 1, estó porque, porque si no pusieramos un -1 estariamos en el final
//justo del array y el programa simplemente "peta" o sea en cuanto pulses se te cerraria
shot[n_Shot.x-1].y = my // esto es lo mismo, pero para las eje Y del mouse, recuerda -1, esto es realmente importante
ENDIF
ENDFUNCTION
FUNCTION draw_Shot:
//Bien y aqui que pasa
STATIC speed_Shot //pues que declaro está funcion, le he puesto que sea estátic , pero podría ser Local, incluso sería más
//correcto, está variable va a ser a la velocidad que se mueve "la Bala"
speed_Shot = 2 // La variable es un incremento de valor 2
FOREACH item IN shot[] // Este tipo de For´s es algo más inusual pero para mi es la mejor manera de hacer esto te explico:
//Este for dice, Oye para cada item (esto es una variable que podría ser Perico_de_Los_palotes) , o sea, cada cosa que hay dentro
//de array shot[] (nuestro disparo), haz lo siguiente...
// Eso puede ser un poco confuso,
INC item.x , speed_Shot //Este incremento es el que nos hace que la bala se mueva hacia la derecha, fijate que curiosamente
//La variable item, ahora es item.x, esto es debido a que como el array tiene las "propiedades x e y"
// la variable del for las hereda "Esto es suposición mia"
PRINT "*" , _ // Simplemnte dibujamos la bala que es un <asterisco> *
item.x , _ //Fijate que las lineas no está en una sola linea, esto se hace simplemente añadiendo al final , _
item.y
//Free mem
// Y aqui finalmente liberamos de la memoria del ordenador o el mobil, ese array que se iba agrandado
// OJO, es muy pero que muy importante, en el PC, puede tardarte incluso 10 min en ver como el juego se ralentiza
// Pero en el mobil, depende como puedes estar 30 segundos, y notar como empiezan a bajar los FPS, esto es
// porque el array de disparo se va agrandado y va quitando espacio de memoria
IF item.x > sx // Como lo hace es muy sencillo, fijate lo que le decimos, si item.x, o sea la bala, pasa de la posicion mayor
// de la pantalla por la derecha, elimina el "objeto"
DEC n_Shot.x //OJO está linea ES MUY IMPORTANTE, recuerdas arriba que para crear el disparo con el botón derecho
//está variable iba creciendo... pues cuando llega al fina debemos obligar a que baje su valor, o sea
//Si teniamos un valor de 300 pulsaciones del raton, cuando esa vala numero 300 llegue a la derecha valdrá
//por un momento 299, si no haces esta lines el programa petará
DELETE item //Esta linea simplemente te libera de memoria el indice del array, y lo que hará si sueltas el boton, es que
//Cuando desaparezcan todas la balas tu array volverá a valer 0
ENDIF
NEXT
//Y bueno ya está , un "tochaco", pero funciona
ENDFUNCTION