Diciembre 25, 2010, 04:59:28 PM Ultima modificación: Diciembre 25, 2010, 05:02:22 PM por ardilla321
Hola, tengo un problema con sprite_index =
tengo el siguiente codigo :
[gml] sprite_index = sprite7
if hsp>-argument4
hsp-=argument7[/gml]
el problema es que "sprite7" tiene 4 sprites dentro (es una animacion de un personaje caminando) y al usarlo solo me sale la primera imagen de la animacion.
?como hago para que salgan todas las imagenes de la animcaion?



Pero el c?digo que pusiste... ?qu? se supone que hace? parece ser una peque?a parte de un script...
Prob? con image_speed = 1 y image_single = -1. Sino busc? a ver si en alg?n lado pusiste image_index = 0, image_single = 0 o image_speed = 0.
Vim.

busque en todo el script y no, no hay ninguan parte donde diga image_index = 0, image_single = 0 o image_speed = 0 . D:
es por que esta en script?, habra cambios si lo pongo en step?

?seguro que el objeto no tiene algo en el evento draw? No s? cualquier cosa.

No, no te digo que busques en el script, busc? en el objeto. O entr? en el modo debug y fijate que la variable image_single sea -1 y que image_speed no sea 0.

Tambi?n puede ser lo que comenta Masterkey. Si el objeto tiene algo en draw, mostranos.
Vim.

estoy completamente seguro, en el objeto no hay nada. y en el script lo pongo aqui, por si algun argumento por equivocacion significa algo relacionado con ustedes me dicen.
[gml]////////////////////////////////////////////////////////////////////////
//Solid Platform Engine: by jimn346                                   //
//Please give credit                                                  //
//platform_move(up,down,left,right,speed,gravity,jump height,friction)//
////////////////////////////////////////////////////////////////////////

repeat(max(abs(round(vsp)),1)) //this causes place checking for every pixel
{
grounded=place_meeting(x,y+1,par_block) || (place_meeting(x,y+1,par_ghostblock) && !argument1 && !place_meeting(x,y,par_ghostblock) && vsp>=0) //set touching the ground
if grounded && argument0//if jump set
  {
  vsp=-argument6
   //jump
  }
if place_meeting(x,y+sign(vsp),par_block) || (place_meeting(x,y+1,par_ghostblock) && vsp>0 && !argument1 && !place_meeting(x,y,par_ghostblock)) //if colliding
  {
  vsp=0
  sprite_index=spr_player//stop moving //QUIETO SPRITE
  }
y+=sign(vsp) //move
}
if !grounded
sprite_index=spr_block//if in the air // PERSONAJE SALTANDO
{
vsp+=argument5 //use gravity
}
if argument3 //if the character is moving right //PERSONAJE CAMINANDO A LA DERECHA
{
if hsp<argument4 //if the character hasn't reached the max speed
hsp+=argument7 //increase the speed
}
if argument2 //if the character is moving left //CAMINANDO A LA IZQUIERDA
{
if hsp>-argument4 //if the character hasn't reached the max speed
hsp-=argument7
sprite_index=spr_block //increase the speed
}
if !(argument3 || argument2) //if not moving
{
hsp=max(0,abs(hsp)-argument7)*sign(hsp) //slow down
}
repeat(max(abs(round(hsp)),1)) //this causes place checking for every pixel
{
if place_meeting(x+sign(hsp),y,par_block) //if the character is hitting a block
  {
  if place_meeting(x+sign(hsp),y-1,par_block) //if there is not a slope
   {
   hsp=0 //stop moving
   }
  else //if there is a slope
   {
   y-=1 //go up the slope
   }
  }
if grounded && !(place_meeting(x+sign(hsp),y+1,par_block) || (place_meeting(x+sign(hsp),y+1,par_ghostblock) && !argument1)) //if there is a slope
  {
  y+=1 //go down the slope
  }
x+=sign(hsp) //move
}[/gml]

EL SCRIPT no es mio, por eso, no estoy muy seguro y tampoco se muy bien como usarlo.
nos leemos gracias (:

#8 Diciembre 28, 2010, 01:55:35 AM Ultima modificación: Diciembre 28, 2010, 02:02:20 AM por andrey!
Mira encontre una solucion rapida hehe, intenta agregar esto en el codigo step del objeto que usas del personaje:
[gml]image_speed=hsp; // hace que la velocidad de la animacion de caminar, sea igual a la velocidad que tiene el objeto en movimiento
if hsp=0 //si hsp (velocidad horizontal) es igual a 0:
{image_index=0}; //hace que la animacion vuelva a la primera sub imagen, cambia esto por la sub imagen en la que tu animacion queda "detenida"[/gml]

Creo que con eso se soluciona, si no puedes avisame y te paso un ejemplo ;D

PD: Donde dice image_speed=hsp puedes cambiar hsp por la velocidad que quieras que tenga predeterminada tu animacion, yo lo veo mas real con la hsp del objeto haha  :-[

EDIT: Viendo el ejemplo original del Script, el evento Step del objeto quedaria asi:
[gml]platform_move(keyboard_check(vk_up),keyboard_check(vk_down),keyboard_check(vk_left),keyboard_check(vk_right),6,1,12,1)
image_speed=hsp
if hsp=0
{image_index=0};[/gml]

dejo adjunto editable en GM8 (sorry solo ese tengo) del original + una animacion en el personaje para que notes la animacion

muchas gracias, pero sabes, acabo de probarlo, y nose por que , junto a mi sprite no funciona. ya que este esta en determinados tiempos
en animaicon de caminando, quieto, y salto.
pero no me funciona.
mira te dejo tu edit de solid platforma engine, con mis sprites. para que veas el problema

#10 Diciembre 28, 2010, 02:38:08 AM Ultima modificación: Diciembre 28, 2010, 02:52:48 AM por andrey!
dame un momento para editar y hacer unas modificaciones grandes xD ya que lo vi y quieres hacer eso ;D dame unoz 20 minutos hehe y edito

Edit: Ok lo que descubri, es que puedes crear unas variables que guarden la direccion en la que va, por ejemplo si la variable "hsp" es mayor que 0, es cuando se dirige hacia la derecha asi que tendria que estar el sprite viendo hacia la derecha (yo personalmente hago eso con image_xscale) y si la velocidad de hsp es menor a 0, es cuando se dirige hacia la izquierda por lo tanto el sprite debera estar viendo hacia la izquierda (igual con image_xscale, -1 para izquierda y 1 para derecha)

Tambien una variable para cuando esta saltando, pero no podras usar la varibla vsp porque estas usando slopes, y si sube o baja la slope, cambiara el sprite y eso no es lo que quieres, asi que podrias asignar una tecla para que haga el salto y de una vez poder hacer que el sprite cambie ;D

Note que hay problemas con las colisiones de tus sprites, ya que son muy irregulares, asi que te recomiendo aprender a usar las mascaras de los objetos

#11 Diciembre 28, 2010, 02:52:23 AM Ultima modificación: Diciembre 28, 2010, 03:08:47 AM por ardilla321
oka, esperare con ancias ! n.n
EDIT :
como arreglo ese problema de los sprites irregulares?, lo trate de hacer con mascara, pero no me resulto.

#12 Diciembre 28, 2010, 03:11:24 AM Ultima modificación: Diciembre 28, 2010, 03:14:59 AM por andrey!
Ok me puse a revisar completamente el codigo hehe descubri una varible que "sabe" por asi decirlo si el objeto esta en el suelo o no, lo que hice fue trabajar con las mismas variables del script para no tener que modificarlo, y estas extenderlas al uso de los sprites, te dejo una descripcion detallada de cada variable que utilize y el codigo del step, tambien te dejo el editable del juego ;D si surge algo mas tu solo postea que aca te ayudaremos

STEP:[gml]platform_move(keyboard_check(vk_up),keyboard_check(vk_down),keyboard_check(vk_left),keyboard_check(vk_right),6,1,12,1)
// Pieza de codigo      Tipo        Funcion
//     hsp            Variable     Tiene la informacion acerca de la velocidad horizontal, se puede usar para los lads (Valor negativo: Izquierda - Valor Positivo: Derecha )
//   grounded         Variable     Identifica si el personaje esta en el suelo o no
image_speed=.4
if hsp>0
{sprite_index=spr_player_walk image_xscale= 1}; //Si el valor de hsp es positivo (mayor que 0) quiere decir que el objeto va hacia la derecha, el image_xscale cambia la direccion en que "mira" el sprite
if hsp<0
{sprite_index=spr_player_walk image_xscale=-1}; //Si el valor de hsp es negativo (menor que 0) quiere decir que el objeto va hacia la izquierda, el image_xscale cambia la direccion en que "mira" el sprite
if hsp=0
{sprite_index=spr_player_stand}; //Si la velocidad horizontal es igual a 0, el objeto no esta en movimiento, el sprite_index cambia el sprite al sprite de "Stamd"
if !grounded
{sprite_index=spr_player_jump}; //Si la variable grounded es negativa (!) quiere decir que el personaje no esta en el suelo, por lo tanto el sprite index cambia la imagen al sprite del salto[/gml]

PD: Elimina lo del sprite_index=sprite7 por que esta creando conflicto, en el editable que subi esto ya viene corregido  :P

EDIT: Recuerda tambien el uso de las mascaras, asigne el bloque azul como la mascara del objeto player, te recomiendo leer el manual con las especificaciones de esto, y con las especificaciones del uso de variables tambien, tanto las predeterminadas el game maker como las que el script crea, que serian "grounded" "hsp" y "vsp" :D si mal no recuerdo en esta comunidad hay un manual de GML completo en espa?ol, eso te facilitara el trabajo ;D

man osea maximo de gracias ! entendi, quedo bien , todo perfecto !, muchas gracias !  :)

haha la idea es ayudar, pero recuerda debes aprender lo que se arreglo hehe, no zolo copiar y pegar o cambiar sprite xD y un placer haberte servido de mi parte :D suerte, algo mas recuerda que este foro es para eso haha!