Ir al contenido

publicidad

Foto

Problema movimiento de sprite en pantalla.


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
12 respuestas en este tema

  • sercotel

  • Yojimbo

  • vida restante: 100%
  • Registrado: 08 ago 2005
  • Mensajes: 557
#1

Escrito 16 enero 2010 - 11:34

Hola,
Ayer empece a trastear con el xna de microsoft. Junto con un amigo dibujamos un simple monigote y siguiendo un tutorial intentamos hacer que se moviera por pantalla. El resultado en si es bastante nefasto. Eh conseguido dibujar el sprite en pantalla asi como el fondo pero, el juego se cuelga obligandome a abrir el adminstrador de tareas y finalizarlo. Al ejectutarlo tambien se me queda el personaje entrecortado y no se puede mover. Os adjunto el codigo a ver si alguno sabe que esta passando. Gracias por adelantado.
Spoiler

Spoiler

Tambien si conoceis paginas de tutoriales para principiantes me hariais un favor.
Gracias saludos

  • Ellolo17

  • Zodiark

  • vida restante: 100%
  • Registrado: 16 nov 2006
  • Mensajes: 6.208
#2

Escrito 16 enero 2010 - 19:18

De XNA no se, pero leyendo el codigo te doy unos consejos sobre lo que puede ser:

1_ Fullscreen. Intenta dejarlo para mas tarde. Asi si se dan estos problemas no tienes porque irte al administrador de tareas. Ponlo como ventana. Ademas puede que el problema este en el ponerlo a modo pantalla completa.

2_ ¿Cuando se te cuelga? ¿Al renderizarse todo la primera vez? ¿Al pasar los 50 milisegundos de refresco? Segun donde ocurra mira el codigo para ver a que pueda deverse. Por ahora por lo que he leido el fallo debe encontrarse por :
protected override void Draw(GameTime gameTime)
o por
public void Draw(SpriteBatch spriteBatch)

porque son las que se dedican a dibujar las cosas.

3_ Usa el debugger para ver donde falla el codigo. Al pararse o antes de pararse debe darte una idea de por donde puede estar mal el codigo. Usa breakpoints, vigila las variables, esas cosas.

Con eso debe salir mas o menos. De todas formas ese no es todo el codigo, ¿no? Me parece que faltan un par de cosillas y todo eso. Yo el XNA y el c# repito que no los he tocado -si he tocado el visual basic y se como es el .net- pero supongo que le faltan un par de lineas de codigo que llaman a esas funciones. Mira a ver si el fallo puede encontrarse ahi.

Ya nos diras -y seguramente se pase por aqui alguien que sepa y nos saque de dudas-

Un saludo.

  • sercotel

  • Yojimbo

  • vida restante: 100%
  • Registrado: 08 ago 2005
  • Mensajes: 557
#3

Escrito 16 enero 2010 - 20:06

De XNA no se, pero leyendo el codigo te doy unos consejos sobre lo que puede ser:

1_ Fullscreen. Intenta dejarlo para mas tarde. Asi si se dan estos problemas no tienes porque irte al administrador de tareas. Ponlo como ventana. Ademas puede que el problema este en el ponerlo a modo pantalla completa.

2_ ¿Cuando se te cuelga? ¿Al renderizarse todo la primera vez? ¿Al pasar los 50 milisegundos de refresco? Segun donde ocurra mira el codigo para ver a que pueda deverse. Por ahora por lo que he leido el fallo debe encontrarse por :
protected override void Draw(GameTime gameTime)
o por
public void Draw(SpriteBatch spriteBatch)

porque son las que se dedican a dibujar las cosas.

3_ Usa el debugger para ver donde falla el codigo. Al pararse o antes de pararse debe darte una idea de por donde puede estar mal el codigo. Usa breakpoints, vigila las variables, esas cosas.

Con eso debe salir mas o menos. De todas formas ese no es todo el codigo, ¿no? Me parece que faltan un par de cosillas y todo eso. Yo el XNA y el c# repito que no los he tocado -si he tocado el visual basic y se como es el .net- pero supongo que le faltan un par de lineas de codigo que llaman a esas funciones. Mira a ver si el fallo puede encontrarse ahi.

Ya nos diras -y seguramente se pase por aqui alguien que sepa y nos saque de dudas-

Un saludo.

Hola,
Gracias por contestar, a ver por partes:
Eh canviado el parametro de fullscreen y sigui sin ir pero al menos lo puedo cerrar directamente.

Se cuelga justo despues de cargar las texturas, es decir lo muestra todo en pantalla y se cuelga. Eh usado la herramienta de debug y me da error en esta linea:

spriteBatch.Draw(SpriteMov[FrameActual], new Rectangle(Xpos, Ypos, SpriteMov[FrameActual].Width, SpriteMov[FrameActual].Height), null, Color.White, Angulo, Origen, SpriteEffects.None, 0f);

El error que me da es:
"" el indice (señalando a [FrameActual]) estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la collecion. Nombre del parametro :index

El problema esta en que ahora no lo se solucionar a ver si alguien sabe mas o menos que passa.
Gracias por tu colaboracion
saludos

#4

Escrito 16 enero 2010 - 20:13

public void UpdateMov() // actualitza la animacio
{
if (FrameActual < 2)

FrameActual = FrameActual + 1;
else
FrameActual = 0;

}


En el "if (FrameActual < 2) ", prueba a meter esto:

if (FrameActual < 1)

  • sercotel

  • Yojimbo

  • vida restante: 100%
  • Registrado: 08 ago 2005
  • Mensajes: 557
#5

Escrito 16 enero 2010 - 20:18

public void UpdateMov() // actualitza la animacio
{
if (FrameActual < 2)

FrameActual = FrameActual + 1;
else
FrameActual = 0;

}


En el "if (FrameActual < 2) ", prueba a meter esto:

if (FrameActual < 1)


Ahora lo acabo de intentar tambien pero no me funciona se queda igual que antes.. Si puedes mirar lo que eh escrito en el mensaje de arriba del tuyo tal vez te ayude en algo. Gracias
saludos

#6

Escrito 16 enero 2010 - 20:32

Dime lo que tengas en la carpeta imagenes

  • sercotel

  • Yojimbo

  • vida restante: 100%
  • Registrado: 08 ago 2005
  • Mensajes: 557
#7

Escrito 16 enero 2010 - 20:56

Dime lo que tengas en la carpeta imagenes

Hola,
En la carpeta Imagenes tres imagenes en formato .png y el fondo tambien en .png. Nada mas.
Gracias
saludos

#8

Escrito 16 enero 2010 - 20:59

Dime lo que tengas en la carpeta imagenes

Hola,
En la carpeta Imagenes tres imagenes en formato .png y el fondo tambien en .png. Nada mas.
Gracias
saludos


YO te recomendaria que no cargaras las imagenes con un "for", sino una por una

  • sercotel

  • Yojimbo

  • vida restante: 100%
  • Registrado: 08 ago 2005
  • Mensajes: 557
#9

Escrito 16 enero 2010 - 21:09

Dime lo que tengas en la carpeta imagenes

Hola,
En la carpeta Imagenes tres imagenes en formato .png y el fondo tambien en .png. Nada mas.
Gracias
saludos


YO te recomendaria que no cargaras las imagenes con un "for", sino una por una

Hola,
Entonces para cargarlas una a una seria Content.Load... A parte de esto sabes de algun tutorial o alguna manera mas facil de hacer la animacion?
Gracias

  • Ellolo17

  • Zodiark

  • vida restante: 100%
  • Registrado: 16 nov 2006
  • Mensajes: 6.208
#10

Escrito 16 enero 2010 - 21:36

"" el indice (señalando a [FrameActual]) estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la collecion. Nombre del parametro :index

El fallo indica que te has pasado de los limites de un array. El fallo esta en que "llamas" a una posicion del array "SpriteMov[]" que no existe.

Prueba a ampliar el tamaño del array.

Y luego tambien te digo: Las imagenes en vez de tener 3 imagenes en archivos separados createlo en una sola imagen tipo spritesheet -algo como esto: http://img178.images...espriteswb3.gif -

Luego por codigo haces que se renderize solo el tamaño de cada dibujo. En el ejemplo que he puesto cada monigote ocupa "solo" 128 de alto por 64 de ancho -no se si es cierto, lo he dicho asi a ojo, no he medido-. y la funcion se va recorriendo la imagen grande y renderiza solo la parte que interesa.

No se las funciones de XNA, pero en DarkBasic es con "offset sprite". Y luego hay un comando que a partir de un sprite sheet te divide la imagen gorda en varias pequeñas segun lo que le metas y te lo convierte en uno animado automaticamente, apuesto a que el XNA tiene uno equivalente. Para que te hagas a la idea la descripcion de ese comando en DarkBasic es:

The command automatically builds a sequence of animation frames from an image file by cutting up the image into a grid specified by the Across and Down Values. The Image Number will be used to hold the complete image. Use the PLAY SPRITE command to see the individual frames of this image. The parameters should be specified using integer values.


Aunque yo lo que hago es crearme un gif animado, cargarme el gif completo y que se vaya reproduciendo segun se va necesitando XD

Y ya ni eso porque desde que tengo el Multimedia Fusion 2 los juegos 2d los hago ahi y me ahorro bastantes cosas de estas.

Asi que mis consejos son -en resumen de lo de antes-:
1_ Haz mas grande el array. Con eso deberia dejarte de dar ese fallo de que te sales de el. Puede que con esto solo se solucione.

2_ Lo normal para hacer juegos 2d es hacerse un spritesheet y que por codigo haga todo.

3_ Y si no te sale bien el spritesheet, hazte un gif animado y ve cargando las cosas. Puede que pierdas algo de calidad de imagen pero para correr un juego de 600 x 400 a pantalla completa tampoco se nota mucho.

Un saludo.

#11

Escrito 16 enero 2010 - 21:56

Dime lo que tengas en la carpeta imagenes

Hola,
En la carpeta Imagenes tres imagenes en formato .png y el fondo tambien en .png. Nada mas.
Gracias
saludos


YO te recomendaria que no cargaras las imagenes con un "for", sino una por una

Hola,
Entonces para cargarlas una a una seria Content.Load... A parte de esto sabes de algun tutorial o alguna manera mas facil de hacer la animacion?
Gracias


A ver, yo lo que hago es una clase sprite, donde se acumulan todos los frames. Y no haria importar imagen por imagen, sino un spritesheet como dice Ellolo, que viene a ser esto:

http://www.smbhq.com...spritesheet.gif

Y con un rectangle lo que hago es ponerlo en posicion fila y columna del que quiero dibujar, le asigno el tamaño del sprite del spritesheet, esperamos un tiempo, y luego dibujamos el siguiente. Es un tema complicado, pero por suerte hay tutoriales:

http://www.xnafusion...orial-beginner/

Esta en ingles, pero el codigo seguro que lo entenderas.

Aqui otros:

http://www.dotnetclu...ums/t/1509.aspx

  • revolink

  • Meteor

  • vida restante: 100%
  • Registrado: 12 may 2006
  • Mensajes: 7.755
#12

Escrito 02 febrero 2010 - 00:27

Una pregunta, cual es el turorial que estas usando? si está en español me interesa, pues recien me estoy metiendo en este terreno. De momento estoy trasteando el Blender, pero el xna me interesa también un montón.

Saludos

  • The_Hans

  • Anima

  • vida restante: 100%
  • Registrado: 27 ene 2004
  • Mensajes: 7.490
#13

Escrito 02 febrero 2010 - 13:31

Me da que en la lista de texturas SpriteMov sólo has cargado una textura, por lo cual es normal que pete para índices mayores de 0. Además, si no cargas el resto de texturas no tienes animación XD


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad