Las limitaciones del Basic son principalmente la velocidad, como ya sabes, y el reducido tamaño de la memoria disponible para programar. Es la primera la que te interesa. De principio, prueba a hacer una rutina sencilla, aunque sea lenta. Luego ya irás puliendo.
Ahora imagina que quieres tener 10 SPRITEs de disparos tuyos (una cantidad muy generosa, que disminuirá la velocidad del BASIC en forma proporcional). Cada uno, tiene sus variables de coordenadas X e Y en relación al SPRITE. De tal forma, que para relacionar una cosa con otra haces algo así:
10 DIM Y(10): DIM X(10) ' Máximo de Sprites
20 PUT SPRITE(sprite a mostrar), (x(del sprite a mostrar), y(del sprite a mostrar)), 15
Ahora ya no recuerdo muy bien la sentencia SPRITE, pero sería mas ó menos así (creo). Cuando tu SPRITE (el que sea) tenga que subir un PIXEL en pantalla, se lo sumas asi:
Y(del sprite a mostrar)=y(del sprite a mostrar)+1
La coordenada X en principio debería ser igual, aunque depende de lo que hagas.
Los demas SPRITES estarán donde tienen que estar. Pero piensa que cuantos mas SPRITEs tengas en pantallas, mas veces tendrá que hacer este cálculo, y hasta que no termine de hacerlo, no pasará a otra cosa.
Sapphire, Viejo_archivero y Darth Fistro dirán que te pases al Ensamblador... ¡y yo lo secundo! No tendrás estos problemas
Por otra parte, cuando hablas de:
"cuando he probado con ON STRIG GOSUB... el juego se para, hasta que el proyectil termina su recorrido, esto me parece una putada, ya que si quiero programar un juego para que funcione con el Joystick tendria este problema..."
... das a entender que lo que metes en la rutina de interrupción (que es lo que es ON... GOSUB) es toda la secuencia de movimiento del SPRITE. Algo como esto:
10 ON STRIG GOSUB 1000
...
1000 FOR I=212 TO 0 STEP -1
1010 PUT SPRITE (100, I), 15
1020 NEXT I
1030 RETURN ' Vuelve al programa principal
Da igual que uses un bucle ó una variable autodecrementada. El resultado será el mismo. Hasta que la coordenada Y no sea 0 no parará de moverse (aunque lo demás no se actualiza y claro, no se mueve).
Usala unicamente para sacar una "bala" según las coordenadas X e Y en las que te encuentres, y realiza una rutina principal que se encargue del movimiento de los Sprites (el marcianito, tu nave, y tus mortiferas balas). Un ejemplo:
1000 PUT SPRITEx (x(numero de sprite), y(numero de sprite)), 15
1020 RETURN
Si usas las rutinas de interrupción puedes ganar algo de velocidad y realismo, aunque tampoco demasiado. Mirate las instrucciones "ON (STRIG, STOP, KEY...) GOSUB numero de linea" para aclararte las ideas.
Espero haberte sacado de dudas, cosa que dudo, porque estoy bastante espeso y con un poco de mala leche
Cuando tenga el MSX real, espero poder realizar algun ejemplo, porque en el portatil, el emulador me va a pedo burra.
Salu2.