¿por que se repite un sprite?

Hola tengo otro de mis problemas... (perdon _-_)

La cosa es que creo un largemap con las pa_lib y todo eso para el "ya famoso"(por el numero de preguntas que hago) juego de estrategia... o algo que estoy haciendo...

Despues creo unos sprites que son torres, como podeis ver en el archivo que adjunto...

mi problema es que cuando creo un sprite y me muevo con el scroll, me doy cuenta que este se repite por la pantalla, provadlo si podeis, poneis una torre (dando un "tic" con el stylus al boton y despues en una casilla y despues mopveros con los cursores, vereis qu een la pantalla hay mas torres...)

si alguien sabe algo, y me puede orientar por enesima vez, gracias...

[Gracias a todos/as los que siempre estan ahi para ayudar]


el sprite lo creo asi:

PA_CreateSprite(0,i+1,(void*)Torre_def_1_Sprite,OBJ_SIZE_32X64,1,0,lista_torres[i].casilla_x-scrollx,lista_torres[i].casilla_y-scrolly);//pantalla, numero sprite...

Adjuntos

como no puedo ver el source no te lo puedo decir seguro.

Pero es posible que a cada iteracion en la que creas el sprite de la torre, mires si ya está creado o no la torre, y como no está creada la torre la creas en la posicion (x,y), pero al desplazar el scroll vuelves a crear la torre en la posicion(x,y) (que está en otra posicion)

Lo que tendrías que hacer es crear el primer sprite, y despues moverlo por la pantalla.

No se si me explico.

Si puedes pegar un poco mas de código quizá te pueda ayudar un poco mas.
la DS tien 192 pixels de alto (creo, no m acuerdo exactamente), si esta en la posicion 0 se mostrara en la posicion 0 pero si está en la 292, se mostrará en la 100,.. es decir, si pruebas a hacer una loop que vaya moviendo el sprite todo el rato hacia abajo podrás ver que cuando llega abajo de la pantalla sale otra vez por arriba, así que pon esto al mover el mapa:

if(lista_torres[i].casilla_y>192)PA_SetX(0,i+1,192);

no me acuerdo si era PA_SetX exactamente :S
No logro solucionar el tema con lo que has dicho... no se si he captado la idea pero he provado varias cosas y nada...

dejo aqui todo el codigo fuente de la parte de las casillas para ver si alguien sabe que puede ser... (si alguien quiere los graficos o algo mas, que lo pida ^^)

Adjuntos

lo que digo yo es en la parte de mover el mapa, pon el codigo para mover el mapa y eso ^^
Buenas, yo lo único que te puedo decir que lo de create sprite si lo haces muchas veces, no le acaba de gustar mucho a las PALib. Lo tengo comprobado con mi juego. Yo te recomendaria que en vez de usar un CreateSprite, uses lo siguiente:
u16 PA_CreateGfx     (      bool       screen,
      void *     obj_data,
      u8     obj_shape,
      u8     obj_size,
      u8     color_mode
   )     

Con eso crearias el recurso gráfico en cuestion, una sola vez (Ten en cuenta que el crear el recurso, no quiere decir que lo pinte por pantalla, por eso no recibe coordenadas). Una vez creado el recurso, ya puedes utilizar la siguiente función:
inline void PA_CreateSpriteFromGfx     (      bool       screen,
      u8     obj_number,
      u16     obj_gfx,
      u8     obj_shape,
      u8     obj_size,
      u8     color_mode,
      u8     palette,
      s16     x,
      s16     y
   )     [inline]

Esa función ya si que crearía y dibujaría un sprite en pantalla a partir de ese recurso. De todas formas aun así tampoco es una solución realmente buena. Lo que deberias hacer es crear una vez el sprite, y luego moverlo si te interesa con un:
inline void PA_SetSpriteXY     (      bool       screen,
      u8     sprite,
      s16     x,
      s16     y
   )     [inline]


Cuentanos si has logrado solucionarlo. Saludos.
He provado con lo de: u16 PA_CreateGfx y me pasa lo mismo, los sprites se repiten por la pantalla.... >_<


En cuanto a lo de moverlos, tambien se repiten y ademas, como solo puedo mover la x y la y , pero no la z (la profindidad... ) pues esta continua siendo el orden en que dibuajas las torres, y claro, aunque la pongas delante, saldra detras.... de otra previamente dibujada, continuo provando cositas, pero empiezo a pensar que esto no tiene solucion en las palib.... Y_Y
El problema no es que crees los sprites con una funcion o otra.

El problema es que al comparar la posicion_x y posicion_y algo haces mal. He estado mirando tu código, pero ahora estoy un poco espeso (son las 8:00 de la mañana)

Mira de revisar la que la torre.x torre.y está dentro de la ventana donde estás ahora.

Digamos que tienes el mapa de tamaño maxX e maxY, tendrás 2 variables que diran en que posicion del mapa estas:
scrollx y scrolly. Intento dibujarlo

######################
#@ =======#############
#=========#############
#==T======#############
#=========#############
######################
#####################$

Lo que está en (#) es tu mapa, @ = scrollx y scrolly $ = max, maxy, T= torre

Suponemos que la torre está en la posicion x1,y1.

Pues para pintarla tienes que mirar que
(x1>=scrollx) && (x1
(y1>=scrolly) && (x1
Espero que te sirva de ayuda.

Nota: Por cierto, la comprobación que tienes mal es la vertical (scrolly) porque en horizontal no se te repite.
Ya lo he provado jandujar y si que funciona, creia que ya lo habia mirado antes, pero... Muchas Gracias a todos ^^

Ale, ahora me piro, pero esta noche ya podre continuar metiendo mas menus, mas edificios y todo eso... ^^

gracias
8 respuestas