Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - fasst007

76
Preguntas y respuestas / Re:de valor X a valor X
Julio 29, 2015, 06:04:10 PM
En el caso de que cada 10 puntos se ejecute la misma acción, este código sería como preguntar:
¿la cantidad de puntos es divisible por 10 y no es cero ? en caso afirmativo hacer algo.
Para que haga algo a los 10, 20, 30, 40, 50, 60, etc puntos. Si queremos poner un límite se podría poner otro "and" agregando si es menor a "x".


if (((frac(global.puntos / 10)) == 0) and (global.puntos != 0)) {
  "haz algo" }


y en este código cuando supera los 100 puntos ya no ejecuta más nada:

if (((frac(global.puntos / 10)) == 0) and (global.puntos != 0) and (global.puntos <= 100)) {
  "haz algo" }


Para saber en que decena se haya:

decena = floor(global.puntos / 10);

si decena es 0 -> va de 0..9
si decena es 1 -> va de 10..19

supongamos que en cada decena la velocidad aumente en "2", entonces:

decena = floor(global.puntos / 10);
velocidad_personaje = velocidad_inicial + (decena * 2);





77
Haz un efecto de "sharpen" a cada imagen, en las opciones de edicion.
Edit background -> menu imagen -> Sharpen
Edit spritr -> menu imagen -> sharpen
78
Para ir a la izquierda simplemente haz esto:

if (x < xprevious)
     sprite_index = spr_izquierda


para arriba:

if (y < yprevious)
     sprite_index = spr_arriba


para abajo:

if (y > yprevious)
     sprite_index = spr_abajo


y para ir a la derecha si bien ya se dijo mas arriba, lo vuelvo a poner:

if (x > xprevious)
     sprite_index = spr_derecha

79
Te hice un código nuevo que funciona para los bloques inicio y fin distantes.
Te adjunto el archivo fuente. Al fondo de todo está el link para descargarlo


El error me parece que es por esto:

Creo que el problema del planteo anterior no estaba en el código en sí sino en una limitación impuesta por Game Maker Studio. El código que vos habías hecho era ingenioso y con las pocas herramientas de código prefabricadas que trae GMS no había mucho margen para buscar otras alternativas. Pero te explico el por qué del error (a mi entender).

Que el código funcione perfectamente a distancias cortas pero no a distancias largas parece ilógico, pero lo que sucede es que el código genera: "recursividad" y parece ser que Game Maker Studio le puso límite a ello.

Cuando se crea el primer objeto "inicio", se ejecuta un código en su evento "create", pero el código en un momento dado crea otro objeto: "inicio" que a su vez tiene el mismo código al ser el mismo objeto. La instancia 1 de "inicio" queda en espera a que la instancia 2 de "inicio" termine de crearse para poder proseguir con las instrucciones de código, pero a su vez la instancia 2 crea una instancia 3 y debe igualmente esperar a que ésta termine de crearse para proseguir con sus instrucciones y así sucesivamente una cantidad "n" de veces.

En realidad lo que está sucediendo es que un código se llama a sí mismo porque en una parte del código "create" de una instancia crea otra ejecutando el mismo código (porque son instancias del mismo objeto). A eso se le llama recursividad. Debido a que la instancia 1 no puede proseguir la ejecución de su código hasta que la instancia 2 termine de crearse pero a su vez esta no puede proseguir hasta que la instancia 3 siga de crearse, etc. esto hace que la primera instancia "inicio" en terminar de ejecutar todo su código sea la "instancia n" (la última instancia inicio en crearse que es la que encuentra la instancia fin) cuando éste termina recién ahí puede retornar el control la instancia penúltima "n-1" y así sucesivamente hasta que el control lo tenga la primera instancia creada.

En palabras simples todas las instancias de "inicio" ejecutan su código a medias quedando en espera y recién la última instancia es la que puede ejecutar todo su código y recién ahi puede retornar a la penúltima para que termine de ejecutar su código y así sucesivamente hasta que llegue el control a la primera instancia y terminar. Pero para ello Game Maker debe ir guardando todos los datos internos necesarios para cada retorno.

Cuando se hacen muchos llamados recursivos la "pila" (que es donde se guardan los datos de retorno en una aplicación) se va llenando al almacenar tantos datos. Y pueden haber dos problemas: 1) que la pila se desborde colgando la aplicación o 2) ¿cómo sabe el compilador que esa recursividad va a tener fin? nosotros lo sabemos porque sabemos que hay un objeto fin y que finalmente lo va a encontrar, pero el compilador no tiene forma de saberlo sino es ejecutando todo el código hasta que se de el corte. Pero por precaución Game Maker Studio cuando ya se hizo una cantidad determinada de llamadas recursivas lo corta para evitar "llamadas infinitas" porque si se llamó como 50 veces y no corta (y tampoco sabe si en un futuro se va a cortar) entonces por precaución da el error.

En lenguajes de programación más potentes esto no daría error, pero Game Maker Studio al ser una herramienta de juegos para usuarios no tan avanzados no está orientada al soporte recursivo, digamos que no está hecho para eso, y por eso le da un margen pequeño a la recursividad porque es un potencial problema si no se sabe bien lo que uno está haciendo. Por eso en lenguajes más profesionales esto se permite sin tanto problema porque se supone que el programador es experto y estos temas los maneja mejor y además que el potencial que el lenguaje debe brindar debe ser mayor.

Esta explicación es una suposición mía, nada más, pero me parece que el problema pasa por ahí.
80
Quiero vender un juego en google play pero no tengo ni idea de como hacerlo y antes de ponerme a hacer el juego para android quisiera saber si lo voy a poder vender.

No se absolutamente nada sobre eso, algunas cosas vi googleando pero no me quedo nada claro.

Alguien que me aclare los pasos para hacerlo desde cero (solo tengo una cuenta de correo gmail). Quiero publicar una demo gratuita y otro full de pago.

Si alguien lo puede explicar desde cero, aunque no sea detallado, marcando los items de los pasos generales necesarios ya me ayudaría bastante.

Y si alguien es de argentina le pido el favor de que me explique como es el tema del cobro, ya que en este país es todo un problema. Y si hay que crear una cuenta bancaria ¿con que banco trabajar para no tener problemas?, ¿que tipo de cuenta?, creo que se puede hacer en pesos argentinos o cuentas en dólares.
Yo no tengo tarjeta de ningún tipo, ni cuenta bancaria por eso no tengo ni idea de como funciona todo eso, por ello voy a pedir que mi hermano o alguien me la proporcione pero ni siquiera se que necesito para vender en google play.



Saludos!
81
Preguntas y respuestas / Re:Instancias en Colisiones
Julio 27, 2015, 10:56:07 PM
Te respondo rapidamente porque tengo que irme al cine  XD
Creo que el problema de que la animación se queda en el primer fotograma radica en que cuando el personaje colisiona con la puerta el evento colisión no entra una sola vez sino que el evento entra 30 veces por segundo (si tenés el juego con 30 frames por segundo) porque creo que entraría en cada paso (step) porque si lo dejas junto a la puerta el evento colisión se verificaría porque sigue colisionando por ese motivo se vuelve a crear una instancia de animacion_e y cuando quiere hacer la animación vuelve a crear otra desde el principio y así siempre quedando en el primer fotograma, pero cuando te alejás ya no entra más en el evento colisión y deja de crear decenas o centenas de instancias del objeto animacion_e y deja a la última creada que termine (esto es solo una suposición).

Entonces tendrías que hacer algún código que en el momento de colisionar en la puerta ejecute una sola vez el código de colisión. Podrías tener una variable que la uses como "bandera" o "marca". Por ejemplo una variable llamada: "corriendo_animacion_e" que en el inicio esté valuada en 0 (o el valor que quieras) y que cuando colisione pregunte ¿la variable "corriendo_animacion_e" es igual a 0 (o el valor que quieras)? si es así que ejecute todo el código de crear la instancia,, etc. y al final cambie esa variable a otro valor por ejemplo "1".
Entonces en el próximo step vuelve a entrar en el evento colisión haciendo la misma pregunta: ¿la variable "corriendo_animacion_e" es igual a 0? en este caso no es cierto porque es "1" entonces no ejecuta el código. De esta forma el código entraria una sola vez en lugar de 30 veces por segundo. Luego al alejarse de la puerta tendría que volver su valor a 0.

Y con respecto a que no se destruye fijate en el código de la alarma o algo de eso debe estar mal o quizás por lo dicho en el párrafo anterior puede ser que si se destruyen pero queda otra animación_e debajo porque se crearon un montón aunque no creo que sea por eso.

Conclusión: Lo primero que tenés que asegurar es que si tenés el jugador junto a la puerta y lo dejas ahí, que se ejecute una sola vez el código de colisión. Fijate en asegurar bien eso y después seguimos avanzando en lo otro.
82
Preguntas y respuestas / Re:Juego de Plataformas
Julio 27, 2015, 08:24:23 PM
Podrias poner un código que verifique si el personaje tiene espacio libre debajo y que su velocidad sea cero (es decir se haya parado en el aire), en ese caso que caiga hasta que haga colisión con algún objeto sólido. Ese código verificador ponerlo en cada evento step.
83
Preguntas y respuestas / Re:Instancias en Colisiones
Julio 27, 2015, 04:32:11 PM
Es que si no te toma la colisión porque no sale el display message que te dije nisiquiera ejecuta el código de crear la instancia porque ese código y la alarma y todo lo demás está dentro del evento colision entonces no se ejecuta nada. Lo que tenés que hacer es ver las máscaras y revisar si pones el objeto correcto para detectar la colisión.
84
Preguntas y respuestas / Re:Instancias en Colisiones
Julio 27, 2015, 06:48:12 AM
Ah y lo olvidaba... tenés que acomodar la propiedad "depth" del objeto animacion_e para que quede por encima de todo, porque quizás la instancia se crea pero queda debajo de otra. Para asegurarte de eso puedes poner una profundidad (depth) negativa.

Otra cosa, ¿la animación dura 40 pasos en total? porque si es así puedes usar un evento dentro del mismo objeto animacon_e que se encuentra en other->"animation end" y luego poner un código de destrucción. En otras palabras el mismo objeto animado puede llevar incorporado un evento de autodestrucción cuando termine lo que simplificaría las cosas
85
Preguntas y respuestas / Re:Instancias en Colisiones
Julio 27, 2015, 06:38:53 AM
Todo parece bien, pero primero hay que asegurarse que tome la colision.
Entonces en el evento colisión pone algun "display mensaje" con algun mensaje. Porque si sale el mensaje quiere decir que tomó la colisión pero si no sale ningun mensaje es porque no lo está detectando.

86
Preguntas y respuestas / Re:Juego de Plataformas
Julio 27, 2015, 06:23:45 AM
Pasa una captura de imagen para ver como queda
87
Preguntas y respuestas / Re:Registrarse en Yoyo
Julio 27, 2015, 04:11:33 AM
Compralo de nuevo
88
Preguntas y respuestas / Re:Instancias en Colisiones
Julio 27, 2015, 03:15:42 AM
Haz un evento colision en el personaje con el objeto "puerta" y en el código usa un create_instance(x, y-100, animacion_e) por citar un ejemplo
89
Hola, pasa el archivo fuente y veo si te lo puedo hacer yo. Saludos
90
(ANTES DE LEER: ADJUNTO PROYECTO FUNCIONANDO POR SI TE INTERESA IR DIRECTAMENTE PARA BAJARLO Y PROBARLO)

PRIMERA SOLUCION:
Dentro del objeto: "inicio", en el código del evento "create", dentro del bloque "else" vos creas dos instancias de "inicio" y deben ser de "bloque". Entonces cambia la opción object y elige: "bloque" en esas dos líneas.
También cambia el depth del objeto bloque a "-10" (u otro valor menor a cero). Y anda!!

SEGUNDA SOLUCION:
Pero de la forma anterior quedan los objetos "inicio" y "fin" existiendo debajo de los objetos "bloque" lo ideal es que estos objetos no existan más. Para ello podrías cambiar el código de la siguiente manera:

1) La primera línea correspondiente al "if" o "check object" dejarla tal cual está
2) En el primer star of block borrar lo que hay allí dentro y hacer lo siguiente:
    poner un "create instance" marcando "self", object "inicio", x: 32, y:0 y marcando "relative"
    Luego debajo poner un change_instance, elegir "self" y en change into: "bloque"

Luego en el "else" entrar al "start of a block" y borrar el código que tiene dentro y hacer:
1) Destroy instance con "self" , x:32, y:0, marcando "relative"
2) Create instance marcando "self", luego object: bloque, x:32,y:0 y "relative"
3)Luego poner un change instance: "self" y en change into: "bloque"


Listo! y nisiquiera debes modificar el depth del objeto "bloque"

ADJUNTO PROYECTO CON LA SEGUNDA SOLUCION

Saludos!