Aplicando FourSpriter en mi juego "Defector"

Soporte técnico sobre los lanzamientos de MojonTwins y comentarios sobre los güegos. Ofrecemos soporte técnico con Fourspriter, te ayudamos con ZX Basic o Z88DK, te damos pistas some cómo saltarse un bicho y cosas así.

Moderador: na_th_an

Avatar de Usuario
NeilParsons
Mensajes: 122
Registrado: Vie, 20 Ago 2010, 23:55

Aplicando FourSpriter en mi juego "Defector"

Mensajepor NeilParsons » Sab, 18 Feb 2012, 20:54

Para empezar, me surgen varias dudas. :geek:

La primera: El tema de los disparos aleatorios de los sprites enemigos, así como los que efectua mi propia nave, ¿cómo podría aplicar las rutinas dedicadas a estos efectos e imprimir los disparos de forma que no afecte a la velocidad de ejecución del bucle principal? En el actual programa, los disparos enemigos se efectúan al mismo tiempo que van moviéndose los demás elementos que hay en pantalla y eso mismo podría hacer con los disparos propios (hasta ahora, llamaba a una rutina donde se producen los disparos pero sin mover nada más). Solo que tendría que imprimirlos como UDGs en movimiento y no como sprites. Y el caso es si tendría sentido detectar si las coordenadas de los disparos (FX, FY) van a coincidir con las de los enemigos, en varias posiciones al mismo tiempo (EX1, EY1), (EX2, EY2) y (EX3, EY3), usando ATTR.

Por otro lado, pensaba en aplicar un fondo estelar con atributo 1 (ink de color azul marino sobre paper negro) desde una rutina de impresión de dicho fondo o por medio de una pantalla SCREEN$, pero el problema está en usar precisamente los disparos sin que se tenga que borrar nada del mismo, lo que sí se consigue con el Fourspriter cuando mueves los hasta cuatro sprites dentro de la zona del juego (los cuales serían tanto mi nave como los de los enemigos).

Bueno, me callo no vaya yo a liarla más. :chiton:

Me supongo que entendéis lo que quiero hacer. Y si no, pues lo vuelvo a repetir con otras palabras... :cafe:
Última edición por NeilParsons el Sab, 18 Feb 2012, 22:53, editado 1 vez en total.
Tengo una vah-ka leshera
pechis y muy besuquera...
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Aplicando FourSpriter en mi juego "Defector"

Mensajepor na_th_an » Sab, 18 Feb 2012, 22:16

Ahora no tengo rato de pensar en ello en profundidad (no estoy en casa) pero el lunes le echamos un ojete :)
Como diría Rorshach: "Urm..."
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Aplicando FourSpriter en mi juego "Defector"

Mensajepor na_th_an » Lun, 20 Feb 2012, 09:16

Veamos, ante todo, fourspriter no está diseñada para soportar importantes cambios en el fondo, ya que funciona como una rutina de sprites estática, esto es, en cada iteración hace esto:

1.- Restaura el fondo en CX, CY (anteriores coordenadas)
2.- Almacena el nuevo fondo que hay en X, Y (coordenadas actuales)
3.- Dibuja el sprite en X, Y
4.- Hace CX = X, CY = Y.

Si entre llamada y llamada modificas el fondo de la pantalla, en el paso 1 se restaurará el trozo almacenado, que será diferente al actual.

Me refiero a que si pones de fondo un SCREEN$ o un dibujo generado de cualquier forma con una escena espacial (que puedes realizar a todo color sin temer clashing), mientras que este fondo sea estático, todo irá bien :-) (tendríamos problemas si el fondo fuera un "starfield" en movimiento).

Sobre la detección de colisiones de disparos con enemigos o con el jugador, utiliza mejor coordenadas. Así no te limitas la parte artística y, además, obtienes código más legible y modificable.

De todos modos, si sólo hay un disparo enemigo y un disparo amigo, además de un enemigo y el personaje principal en pantalla, puedes usar cada uno de los cuatro sprites de fourspriter. El tiempo que se tarda en procesar cada sprite es mínimo, apenas notarás diferencia entre tener uno, dos, tres o cuatro activos, sobre todo si estás llamando a las rutinas desde BASIC. El problema es que los sprites de fsp son de 16x16 sí o sí.

En el caso de tener que usar UDG aparte, se puede usar el siguiente truco:

1.- Los UDG se imprimen y eliminan con un PRINT en OVER 1, para no cargarnos la parte bitmap del fondo.
2.- Antes de imprimir, almacenamos el atributo que hubiera en el lugar que ocupará el UDG, y luego imprimimos el UDG con un color brillante.
3.- A la hora de borrarlo para cambiarlo de sitio, POKEamos el color almacenado.

Algo así. Sean DX, DY las coordenadas del udg y CDX, CDY las coordenadas de su posición anterior...

$this->bbcode_second_pass_code('', '1000 LET DX = INT (RND * 16): LET DY = 0: LET CDX = X: LET CDY = 0: LET OLDA = PEEK (22528 + DY * 32 + DX): PRINT OVER 1; INK 8; PAPER 8; AT DY, DX; "A"
1090 REM bucle:
1100 LET DY = DY + 1: IF DY = 22 THEN LET DY = 0: LET DX = INT (RND * 16)
1110 LET A = PEEK (22528 + DY * 32 + DX): PRINT OVER 1; AT DY, DX; INK 7; "A"
1120 PRINT OVER 1; AT CDY, CDX; "A": POKE (22528 + CDY * 32 + CDX), OLD A
1130 LET CDY = CY: LET CDX = X: LET OLDA = A
1140 GOTO 1100')
Como diría Rorshach: "Urm..."
Avatar de Usuario
NeilParsons
Mensajes: 122
Registrado: Vie, 20 Ago 2010, 23:55

Re: Aplicando FourSpriter en mi juego "Defector"

Mensajepor NeilParsons » Mié, 22 Feb 2012, 02:12

En cuanto tenga algo más de tiempo, trataré de modificar el juego y en cuanto tenga algún que otro progreso con el mismo, lo iré poniendo por aquí. De todas formas, respecto del fondo gráfico, por supuesto hablaba de usar uno completamente estático.

Gracias Nath. :)

PD: Se me olvidaba. Para los que no lo sepan todavía, hay una primera versión del juego descargable en Internet. Os dejo el enlace:

DESCARGA

Qué despiste el mio... :mrgreen:

Por supuesto, en cuanto empiece a usar el Fourspriter va a mejorarse muchísimo.
Tengo una vah-ka leshera
pechis y muy besuquera...

Volver a “Ayuda”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 36 invitados