locked
Problema en cuadro actual de sprite sheet RRS feed

  • Pregunta

  • Hola, veran tengo X sprite sheet el cual parace que los sprites estan bien distribuidos. El problema que tengo esque a la hora de dibujar me dibuja el sprite pero tambien una parte del sprite que sigue y necesito que me dibuje sprite por sprite. He visto que muchas personas hacen esto:

    AnchoFrame = Sprite.Width / totalCuadros, eso te va a dar un flotante dependiendo el numero, es una muy buena forma de saber el ancho de cada frame, pero el metodo del spritebatch.Draw()a la hora de indicarle el rectagunlo(Sprite) de la imagen que quiero dibujar no me acepta valores flotantes porque es un rectangle y si lo convierto a int no me da error pero los valores no serian exactos y sucederia lo mismo.

    En conclusion alguien tiene alguna forma de dibujar correctamente el sprite sin importar el tamaño de cada cuadro? o obtener exactamente el ancho de cada cuadro de un spritesheet?. Gracias!


    ß_Vito_ß
    miércoles, 25 de agosto de 2010 5:33

Respuestas

  • Buenas,

    Lo ideal en un spritesheet es que todos los sprites tengan el MISMO tamaño. Entonces, si sabes que tienes un spritesheet de 100px de ancho y cada sprite interno tiene 25px (eso lo tienes que saber), pues sabes que para "pintar" la animación tienes que ir recorriendo frameactual * anchosprite.

    En mi antiguo blog tengo un artículo que te explica cómo funciona esto.


    Jesús Bosch Aiguadé
    http://geeks.ms/blogs/jbosch
    http://uoc.dotnetclubs.com
    • Propuesto como respuesta Jesús Bosch miércoles, 25 de agosto de 2010 6:26
    • Marcado como respuesta Jorge _VITO_ miércoles, 25 de agosto de 2010 18:43
    miércoles, 25 de agosto de 2010 6:26
  • Como dice Jesús, debes saber la dimencion de cada sprite de ante mano.

    Para realizar correctamente la animacion de un spritesheet y utilizo un array de rectangulos, no hago ningun calculo dinaico para sacar la dimencion de cada sprite,

    Directamente creo un array con rectangulos donde seteo la dimencion de cada sprite, de esta manera utilizando una variable auxiliar (int selectedIndex) que te permita saber cual rectangulo corresponde dibujar.

    Es decir, que en tu metodo draw dibujaras el rectangulo " SourceRectangle[selectedIndex] " y en el metodo update tendrias el metodo que cambie ese indice para que se muestre como una animacion.

    P/D: Quisas este metodo se confunda con "harcodear" los valores, solamente seteas estos valores cuando creas el objeto, despues puedes hacer el resto dinamco, de tal forma que si cambias el spriteSheet solo deberias modificar estas lineas

    Saludos.


    Si la respuesta fue de utilidad por favor vote. Tec. Agustin Rosso http://www.bfxstudio.net
    • Marcado como respuesta Jorge _VITO_ miércoles, 25 de agosto de 2010 18:43
    miércoles, 25 de agosto de 2010 14:20
  • Todavía no he tenido tiempo de subirlo, pero mientras tanto, echa un vistazo a esta interesante utilidad relacionada con el tema:

    http://msdn.microsoft.com/es-es/ee942213.aspx


    Jesús Bosch Aiguadé
    http://geeks.ms/blogs/jbosch
    http://uoc.dotnetclubs.com
    sábado, 28 de agosto de 2010 8:34

Todas las respuestas

  • Buenas,

    Lo ideal en un spritesheet es que todos los sprites tengan el MISMO tamaño. Entonces, si sabes que tienes un spritesheet de 100px de ancho y cada sprite interno tiene 25px (eso lo tienes que saber), pues sabes que para "pintar" la animación tienes que ir recorriendo frameactual * anchosprite.

    En mi antiguo blog tengo un artículo que te explica cómo funciona esto.


    Jesús Bosch Aiguadé
    http://geeks.ms/blogs/jbosch
    http://uoc.dotnetclubs.com
    • Propuesto como respuesta Jesús Bosch miércoles, 25 de agosto de 2010 6:26
    • Marcado como respuesta Jorge _VITO_ miércoles, 25 de agosto de 2010 18:43
    miércoles, 25 de agosto de 2010 6:26
  • Como dice Jesús, debes saber la dimencion de cada sprite de ante mano.

    Para realizar correctamente la animacion de un spritesheet y utilizo un array de rectangulos, no hago ningun calculo dinaico para sacar la dimencion de cada sprite,

    Directamente creo un array con rectangulos donde seteo la dimencion de cada sprite, de esta manera utilizando una variable auxiliar (int selectedIndex) que te permita saber cual rectangulo corresponde dibujar.

    Es decir, que en tu metodo draw dibujaras el rectangulo " SourceRectangle[selectedIndex] " y en el metodo update tendrias el metodo que cambie ese indice para que se muestre como una animacion.

    P/D: Quisas este metodo se confunda con "harcodear" los valores, solamente seteas estos valores cuando creas el objeto, despues puedes hacer el resto dinamco, de tal forma que si cambias el spriteSheet solo deberias modificar estas lineas

    Saludos.


    Si la respuesta fue de utilidad por favor vote. Tec. Agustin Rosso http://www.bfxstudio.net
    • Marcado como respuesta Jorge _VITO_ miércoles, 25 de agosto de 2010 18:43
    miércoles, 25 de agosto de 2010 14:20
  • Bueno me parecen muy buenas respuestas, gracias a los dos. La idea de crear un array de retangules es genial asi no te preocupas por el tamaño ^^.Voy a visitar el link de Jesus.
    ß_Vito_ß
    miércoles, 25 de agosto de 2010 18:43
  • He desarrollado una clase a la que le pasas N spritesheets por parámetro y te los reproduce todos (uno detrás de otro), en breve la cuelgo en mi blog.

     

    Saludos


    Jesús Bosch Aiguadé
    http://geeks.ms/blogs/jbosch
    http://uoc.dotnetclubs.com
    viernes, 27 de agosto de 2010 8:00
  • Todavía no he tenido tiempo de subirlo, pero mientras tanto, echa un vistazo a esta interesante utilidad relacionada con el tema:

    http://msdn.microsoft.com/es-es/ee942213.aspx


    Jesús Bosch Aiguadé
    http://geeks.ms/blogs/jbosch
    http://uoc.dotnetclubs.com
    sábado, 28 de agosto de 2010 8:34
  • Esta interesante la aplicacion muchas gracias voy a probarlo ojala me sea de ayuda.

    Saludos!


    ß_Vito_ß
    lunes, 30 de agosto de 2010 16:38