Mover Sprite

Página 2/2
1 |

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

23-10-2014, 09:31

Hola de nuevo. Sigo con mis avances. Una preguntilla. Si hago con el tiny sprites un sprite con 2 colores me crea un banco para cada color. Osea me genera 2 sprites?? Si hago lo del tutorial me dice que cojo el sprite 1 y el otro y para moverlos?
Nonpueden formar parte del mismo sprite y moverlos en conjunto??

Por Guillian

Prophet (3438)

Imagen del Guillian

23-10-2014, 12:03

No, los sprites los tienes que superponer y mover a la vez para que parezca que se trata de un único sprite con varios colores.
Échale un ojo al ejemplo que te puse en la página anterior. En él se usan dos sprites para conseguir 3 colores por línea.

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

23-10-2014, 22:56

ok manu
lo miro. aunque sea en screen 5 funciona en screen 2?? . es para no liarme

Por theNestruo

Champion (296)

Imagen del theNestruo

01-11-2014, 09:26

Hola!

Otra opción es, partiendo de la copia en RAM de la SPRATR, tener una rutina que le pases un puntero a una posición de esa tabla, le digas el número de sprites y:
- 1. Lea las coordenadas y el patrón del primer sprite
- 2. Avance hasta el siguiente sprite, vuelque las mismas coordenadas y el patrón que había leído más 4
- 3. Volver a 2 mientras queden sprites por actualizar
De esta forma tu código estaría tocando los atributos del primer sprite y al finalizar toda la lógica de juego, esta rutina te actualizaría el resto de sprites consecuentemente.
Tiene sus limitaciones, claro: todas las animaciones tienen que tener el mismo número de sprites, etc. pero seguro que en la mayoría de los casos esto es así.

Te paso la rutina que utilizo yo actualmente. Es básicamente eso que te he contado con la salvedad de que las coordenadas que maneja mi lógica de juego están en otro sitio y son coordenadas "lógicas" (apuntan al pie del muñeco, por así decirlo) así que además de lo que te he contado antes, vuelcan esas coordenadas lógicas a coordenadas físicas de los sprites (suma -8,-17).

; -----------------------------------------------------------------------------
; Modifica las coordenadas de un sprite en el buffer de spratr
; param hl: puntero al sprite a modificar en el buffer de la spratr
; param de: puntero a las coordenadas del objeto (par yx, dos bytes)
; param b: número de sprites
PUT_SPRITE_XY:
	djnz	@@MULTI

@@DO_PUT_SPRITE_XY:
; spratr y = coordenada y -16 -1
	ld	a, [de]
	add	-16 -1
	ld	[hl], a
; spratr x = coordenada x -8
	inc	de
	inc	hl
	ld	a, [de]
	add	-8
	ld	[hl], a
	ret
	
@@MULTI:
; primer sprite
	push	de ; preserva las coordenadas del objeto
	call	@@DO_PUT_SPRITE_XY
	pop	de ; restaura las coordenadas del objeto
; lee el patrón del sprite
	inc	hl
	ld	a, [hl]
@@LOOP:
; guarda el patrón del sprite en c
	ld	c, a
; siguiente sprite
	push	de ; preserva las coordenadas del objeto
	inc	hl ; avanza hasta el buffer de la spratr del siguiente sprite
	inc	hl
	call	@@DO_PUT_SPRITE_XY
	pop	de ; restaura las coordenadas del objeto
; escribe el siguiente patrón (c + 4)
	inc	hl
	ld	a, 4
	add	c
	ld	[hl], a
	djnz	@@LOOP
	ret
; -----------------------------------------------------------------------------

Si la utilizas es importante que, a la hora de declarar las variables en RAM, vaya antes la Y que la X (y seguidas, claro):

; Coordenadas lógicas del jugador (en píxeles)
player_xy:
player_y:
	.byte
player_x:
	.byte

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

03-11-2014, 19:28

gracias
lo probare a ver

Página 2/2
1 |