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 - quiero aprender

1
Muy buenas.
Tengo pensado cambiarme a windows 8 0 10 pero creo que si me cambio a windows 10 necesito una licensia UWP y pues cuesta pero no se si se necesita algo más si quiero cambiarme a windows 8.


Me podrían orientar al respecto?

Muchas gracias.
2
Cita de: Clamud en Enero 14, 2018, 04:28:22 PM
Se puede guardar en un buffer cada cierto tiempo o cada vez que ocurra un cambio.

Al principio crea una surface y un buffer con el tamaño necesario para almacenar la surface. El tamaño del buffer se da en bytes y por cada pixel se necesitan 4 bytes, entonces el tamaño del buffer debe ser w*h*4, donde w y h son la anchura y la altura de la surface.
[gml]
sf = surface_create( 10, 10 );
bf = buffer_create( 400, buffer_fixed, 4 );
[/gml]
Cuando ocurra un cambio copia la surface al buffer
[gml]
buffer_get_surface(bf, sf, 0, 0, 0);
[/gml]
Antes de dibujar revisa si la surface existe. Si no existe crea una nueva surface y copia el contenido del buffer
[gml]
if not surface_exists(sf){
   sf = surface_create(w,h);
   buffer_set_surface(bf, sf, 0, 0, 0);
}
draw_surface(sf, 0,0);
[/gml]
Muchas gracias, funciona de maravilla.
3
Cita de: TheJaj en Enero 13, 2018, 10:50:51 PM
Ahora funciona como debería, pero ¿por que se elimina la surface al agrandar la pantalla?
Creo que sucede eso porque cuando "suspendes" tu juego, Game Maker no actualiza la surface o mas bien la elimina y por lo que siempre es necesario crear una sentencia de que si no existe volver a crearla.

Soy algo inexperto y tal vez esa no es la respuesta pero es lo que me imagino.
4
La surface la creas solo en un evento create?

Ya que si es así, en donde dibujas la surface puedes poner esto:
if (!surface_exists(Oscuridad)) {
Oscuridad = surface_create(room_width, room_height);
draw_surface(Oscuridad,0,0);
} else {
draw_surface(Oscuridad,0,0);
}


5
Muy buenas.
En mi juego tengo un objeto que crea una surface que sirve como un "lienzo" para dibujar en el pero cuando salgo del juego o bloqueo el celular para después entrar en el juego nuevamente, lo que he dibujado anteriormente se pierde, ya no está.

obj_Surface:
Create evenet
surf = surface_create(room_width,room_height);

Room end y Room Start:
if (surface_exists(surf))
    surface_free(surf);


Draw Event:
if surface_exists(surf)
    draw_surface_stretched(surf,0,0, room_width, room_height);
else{
    surf = surface_create(room_width,room_height);
    draw_surface_stretched(surf,0,0, room_width, room_height);
}


Y cuando Dibujo:
obj_paint: Step Event
if place_meeting(x,y,obj_block){
    surface_set_target(obj_Surface.surf);
     
    draw_sprite_ext(spr_paint_splatter, choose(0, 1), x, y, 0.2, 0.2, image_angle, color, 1);
     
     ///se borra todo menos la parte que se dibujo
     draw_set_blend_mode(bm_subtract);
     draw_sprite(obj_game.nivel,0,0,0);
     draw_set_blend_mode(bm_normal);
     surface_reset_target();   
     
        instance_destroy();
}


Lo que quisiera es que cuando salgas del juego (pero sin quitarlo en segundo plano) o si se suspende el celular, guardar y mostrar lo que se ha dibujado en pantalla.

Gracias por su ayuda.
6
Cita de: desplo en Enero 09, 2018, 08:02:01 PM
Cita de: quiero aprender en Enero 09, 2018, 07:49:47 PM
Cita de: desplo en Enero 09, 2018, 07:09:51 AM
En algunos casos cuando hay un problema de compilacion se genera un archivo html que te muestra las razones por la cual no se genera el apk.

Ve a /Documentos/Gamemaker/Cache/tuproyecto/Android/Default/com.company.name/build/outputs
luego abre el archivo lint-results-debug.html. Abrira una pagina donde te mostrara las advertencias, errores y recomendaciones para compilar el apk.
MissingPermission: Missing Permissions

../../src/main/java/com/yoyogames/runner/RunnerJNILib.java:1938: Missing permissions required by ConnectivityManager.getActiveNetworkInfo: android.permission.ACCESS_NETWORK_STATE
1935         ConnectivityManager conMan = (ConnectivityManager) ms_context.getSystemService(Context.CONNECTIVITY_SERVICE);
1936         if(conMan!=null)
1937         {
1938 NetworkInfo activeNetwork = conMan.getActiveNetworkInfo();

1939 return (activeNetwork != null) && activeNetwork.isConnected();
1940 }

Note: This issue has an associated quickfix operation in Android Studio/IntelliJ
Priority: 9 / 10
Category: Correctness
Severity: Error
Explanation: Missing Permissions.
This check scans through your code and libraries and looks at the APIs being used, and checks this against the set of permissions required to access those APIs. If the code using those APIs is called at runtime, then the program will crash.

Furthermore, for permissions that are revocable (with targetSdkVersion 23), client code must also be prepared to handle the calls throwing an exception if the user rejects the request for permission at runtime.

More info:

To suppress this error, use the issue id "MissingPermission" as explained in the Suppressing Warnings and Errors section.

Es lo que dice, pero la verdad no se que signifique todo esto.

Al parecer dice que es necesario activar el permiso ACCESS_NETWORK_STATE
Ve a Global Game Setting / Android / Permissions y activa ACCESS_NETWORK_STATE
Gracias, Ya he podido compilar y luego escribí en Min SDK: 19 que de esa api empieza el android kit kat y trate de instalar en un celular Gingerbread y en otro celular Jelly bean y ya no se puede instalar en esas versiones.

Ya esta listo, muchas gracias.
7
Cita de: Arcadian en Enero 09, 2018, 01:34:15 PM
Prueba a desactivar el check para hacer lint code analisis, que suele ser una tocada de pelotas casi siempre, y luego vuelves a compilar.
Como se desactiva  :-[ no me aparece esa opción o donde se encuentra.
8
Cita de: desplo en Enero 09, 2018, 07:09:51 AM
En algunos casos cuando hay un problema de compilacion se genera un archivo html que te muestra las razones por la cual no se genera el apk.

Ve a /Documentos/Gamemaker/Cache/tuproyecto/Android/Default/com.company.name/build/outputs
luego abre el archivo lint-results-debug.html. Abrira una pagina donde te mostrara las advertencias, errores y recomendaciones para compilar el apk.
MissingPermission: Missing Permissions

../../src/main/java/com/yoyogames/runner/RunnerJNILib.java:1938: Missing permissions required by ConnectivityManager.getActiveNetworkInfo: android.permission.ACCESS_NETWORK_STATE
1935         ConnectivityManager conMan = (ConnectivityManager) ms_context.getSystemService(Context.CONNECTIVITY_SERVICE);
1936         if(conMan!=null)
1937         {
1938 NetworkInfo activeNetwork = conMan.getActiveNetworkInfo();

1939 return (activeNetwork != null) && activeNetwork.isConnected();
1940 }

Note: This issue has an associated quickfix operation in Android Studio/IntelliJ
Priority: 9 / 10
Category: Correctness
Severity: Error
Explanation: Missing Permissions.
This check scans through your code and libraries and looks at the APIs being used, and checks this against the set of permissions required to access those APIs. If the code using those APIs is called at runtime, then the program will crash.

Furthermore, for permissions that are revocable (with targetSdkVersion 23), client code must also be prepared to handle the calls throwing an exception if the user rejects the request for permission at runtime.

More info:

To suppress this error, use the issue id "MissingPermission" as explained in the Suppressing Warnings and Errors section.

Es lo que dice, pero la verdad no se que signifique todo esto.
9
Cita de: desplo en Enero 09, 2018, 02:01:23 AM
Por alguna razón Gamemaker no compila con todos las api, build tools y support lib. La verdad es un misterio la razón pero en mi opinion no creo que debería de ser asi.

Yo utilizo la version 27.0.2 de Build tools, 25.3.1 de Support Lib y Utilizo la api 27 para compilar.

Y no he tenido ningún problema para exportarlo.
He intentado con tu combinación y me da el mismo error y he intentado con otras combinaciones y tampoco me ha resuelto el problema.
10
Cita de: desplo en Enero 08, 2018, 06:01:20 AM
Ve a global game setting, en android cambia Min SDK por uno superior
Acabo de descargarme los api del android más actual y cambie por 11 y cuando volví a intentar me salió este error:

Fix the issues identified by lint, or add the following to your build script to proceed with errors:
...
android {
    lintOptions {
        abortOnError false
    }
}
...

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.


Volví a djar todo como estaba y aún así me esta dando error. Estuve buscando otras alternativas y la configuración que tengo es esta:
Build tools: 23.0.2
Support lib: 23.0.1

Target SDK: 23
Min SDK: 11
Compile SDK: 23

Y sigo teniendo el mismo error.
11
Hola de nuevo :).
En mi curso por crear un juego para android, he notado que a partir la versión de kit kat mi juego corre de maravilla pero celulares de anteriores generaciones tienen problemas de rentilización haciendo imposible de jugar mi juego comodamente, la verdad me gustaría que más dispositivos puedan correr mi juego pero ya voy como 3 revisiones de código, paquetes de textura, revisar en varios foros para optimizar y es imposible.

Entonces quisiera limitar la api que usa mi juego pero no sé que api configurar el el global game configuaration en la pestaña de android.

Aunque es cierto que la versión de android no garantiza la potencia de un dispositivo, es mejor limitar hasta cierta versión de android en la hay una mayor posibilidad de que pueda correr mi juego a que pueda ser descargado por todos y que el juego sea mal valorado y con comentarios del mal rendimiento.

Gracias por su ayuda.
12
Preguntas y respuestas / Re:Delta time en salto
Noviembre 04, 2017, 09:12:14 PM
Creo que ya a quedado resuelto.
En el código de nick agrego esto:
/***************************************************
  Vertical Movement
***************************************************/
if yVel != 0
{
    yVelSub    += yVel * global.frame_delta; /////Aquí agrego el delta time///////////////////////////////////////////////////////////////
    vyNew       = round(yVelSub);
    yVelSub    -= vyNew;
    var ydir    = sign(vyNew)
   
    // Check our direction (up or down)
    if ydir == 0
        var coll = noone
    else if ydir == 1
        var coll = collision_rectangle(bbox_left, bbox_top, bbox_right, bbox_bottom + vyNew, obj_block, true, false)
    else if ydir == -1
        var coll = collision_rectangle(bbox_left, bbox_top + vyNew, bbox_right, bbox_bottom, obj_block, true, false)
    // If there's a collision, move to contact
    if coll
    {
        while (!collision_rectangle(bbox_left, bbox_top + ydir, bbox_right, bbox_bottom + ydir, obj_block, true, false))
        {
            y += ydir;
        }
       
        // Once in contact, set the speeds to 0
        vyNew   = 0
        yVel    = 0
    }
    else // If no contact, move freely
        y += vyNew;
}
}

on_ground = collision_rectangle(bbox_left, bbox_bottom +1 , bbox_right, bbox_bottom +1, obj_block, true, true)

if (yVel < 10){
yVel += grav * global.frame_delta;
}

if on_ground {
    if keyboard_check_pressed(vk_up){
        //yVel = -5.4 * global.frame_delta
        yVel = -jump;
        sprite_index = spr_jump;
    }
}

Las variables grav y jump las declaro en el evento create y ajusto los valores a los que necesito.

Existe una pequeña variación de 2 o 3 pixeles cuando esta a 10 fps a comparación a 60 fps pero por lo menos es estable y nunca se reduce el salto si los fps cambian repentinamente.

Y creo que sería todo.
13
Preguntas y respuestas / Re:Delta time en salto
Octubre 30, 2017, 06:09:13 PM
No estoy muy seguro de como implementarlo.
Buscando información me encontré este vídeo: https://www.youtube.com/watch?v=c4b9lCfSDQM
Donde están las formulas de posición previa:
pos = pos + velocidady * dt
Y velocida previa:
velocidady = velocidady + grav * dt

Entonces en el evento step con las variables ya declaradas en el evento create tengo esto:

grav = 0.2;
pos = yVel;
pos = pos + vsp * global.frame_delta;
vsp = vsp + grav * global.frame_delta;

on_ground = collision_rectangle(bbox_left, bbox_bottom +1 , bbox_right, bbox_bottom +1, obj_block, true, true)

if (!on_ground)
yVel += grav;
else
if keyboard_check(vk_up){
yVel = -(pos + vsp * global.frame_delta + grav*global.frame_delta*global.frame_delta/2); //El código que escribiste
}


Y no me resulto

En que estoy fallando.

Por cierto el código: yVel = -(2 * (139 - (global.frame_delta * global.frame_delta)) / room_speed); solo sirve para cuando el fps sea estable porque cuando baja muy rápido el salto disminuye.
14
Preguntas y respuestas / Re:Delta time en salto
Octubre 27, 2017, 02:02:05 AM
Creo que ya lo he conseguido  :).
Para crear la gravedad según el frame rate es así:
grav = 0.01*60*(global.frame_delta * global.frame_delta);
if (!on_ground)
yVel += grav;

Donde 0.01 es la gravedad, se puede aumentar o disminuir al gusto y 60 es la velocidad de FPS máxima.
Esa formula la encontré de https://www.reddit.com/r/gamemaker/comments/5vvxmr/platformer_gravity_with_delta_time/
Pero falta el impulso y estuve buscando formulas para implementar el salto y así me quedó:
yVel = -(2 * (139 - (global.frame_delta * global.frame_delta)) / room_speed);

Lo encontre en: https://gamedev.stackexchange.com/questions/68559/how-to-obtain-gravity-and-initial-impulse-given-desired-time-to-reach-max-h

Y uso la formula: gravity = -2 * h / (t * t)
Donde gravity en mi caso es yVel, h es la longitud del salto y t es el delta time que sería el tiempo pero como ven relizé una modificación. El único problema es que existe una pequeña variación del salto como de 1 pixel, es decir que cuando está a 60 fps salta la longitud correcta pero cuando va a 30 o 10 fps salta 1 pixel o 2 más arriba pero es mínimo el efecto.

Para implementar es así:
Evento create.
grav = 0;
yVel = 0;
on_ground = 0;


Evento step:(Va después del código de colisiones).
grav = 0.01*60*(global.frame_delta * global.frame_delta);
on_ground = place_meeting(x,y+1,obj_solido);
if (!on_ground)
yVel += grav;
else
if keyboard_check_pressed(vk_up)
yVel = -(2 * (139 - (global.frame_delta * global.frame_delta)) / room_speed);


Es bienvenida cualquier complementación del código, solo quedaría el problema de la pequeña variación pero no es muy notable al fin al cabo pero que más que mejore el código.

Cuando estaba buscando cosas relacionadas con delta time no encontraba mucha información al respecto con la gravedad y el salto o eran temas que no se resolvían, ojalá que con las mejoras que se puedan hacer a este código ayude a resolver esto.
15
Preguntas y respuestas / Delta time en salto[Resuelto]
Octubre 24, 2017, 05:32:26 PM
Hola a todos.
Tengo un problema con el delta time a la hora de saltar. He encontrado en la página: https://nikles.it/2017/gamemaker-tutorial/optimizing-collision-code/ una forma de optimizar el código de colisiones y va de maravilla lo recomiendo bastante y he conseguido agregar el delta time en velocidad horizontal pero no en velocidad vertical.

En el evento create del Delta time tengo esto: 
//Variables delta time
desired_fps = 30;
global.frame_delta = 30 / 1000000 * delta_time;


En el evento begin step:
global.frame_delta = desired_fps / 1000000 * delta_time;

Y funciona el delta time.

En el evento jugador:
/***************************************************
  Vertical Movement
***************************************************/
if yVel != 0
{
    yVelSub    += yVel;
    vyNew       = round(yVelSub);
    yVelSub    -= vyNew;
    var ydir    = sign(vyNew)
   
    // Check our direction (up or down)
    if ydir == 0
        var coll = noone
    else if ydir == 1
        var coll = collision_rectangle(bbox_left, bbox_top, bbox_right, bbox_bottom + vyNew, obj_block, true, false)
    else if ydir == -1
        var coll = collision_rectangle(bbox_left, bbox_top + vyNew, bbox_right, bbox_bottom, obj_block, true, false)
    // If there's a collision, move to contact
    if coll
    {
        while (!collision_rectangle(bbox_left, bbox_top + ydir, bbox_right, bbox_bottom + ydir, obj_block, true, false))
        {
            y += ydir;
        }
       
        // Once in contact, set the speeds to 0
        vyNew   = 0
        yVel    = 0
    }
    else // If no contact, move freely
        y += vyNew;
}
}

on_ground = collision_rectangle(bbox_left, bbox_bottom +1 , bbox_right, bbox_bottom +1, obj_block, true, true)

if !on_ground{
    yVel += 0.3 * global.frame_delta;
}
else{
    if keyboard_check(vk_up){
        yVel = -9.5 * global.frame_delta;
    }
}


A la hora de aplicar por ejemplo 10 fps no es proporcional el salto de 60 fps, ya intente de varias formas pero actualmente lo tengo así.

Gracias por su ayuda.