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 - nonoroman

271
Preguntas y respuestas / Re:ALMACENAR DISCOS
Mayo 28, 2017, 06:03:02 PM
Muchas gracias por responder Arcadian, pero justo antes ya lo habia programado. El caso es que al coger el disco 46 no me da ningun error, pero al coger el disco 45 me sale este error. y no entiendo porque.

FATAL ERROR in
action number 1
of Create Event
for object objectMENU_DISCOS:

Push :: Execution Error - Variable Index [0,65] out of range [1,65] - -5.DISCO(100040,65)
at gml_Object_objectMENU_DISCOS_CreateEvent_1 (line 34) -     if (DISCO==true)


Este es el codigo que uso.

CREATE;
//VARIABLES DE LOS DISCOS
globalvar DISCO;
globalvar BOLSILLO_MAXIMO;
BOLSILLO_MAXIMO = 65;
globalvar CODIGO;

for(i=45;i<BOLSILLO_MAXIMO;i++)
{
    DISCO=false;
    CODIGO=0;
}

AL COGER EL DISCO EN COLISION EVENT

if !audio_is_playing(soundDISKETERA_PASANDO)
if (bandera_sonar)
{
    audio_play_sound(soundDISKETERA_PASANDO,1,0);
    bandera_sonar = false;
}

DISCO[numero]= true;

*numero es el numero del disco.

AL CARGAR EL ESPECIE DE INVENTARIO

BOLSILLO_MAXIMO = 65;

for(i=45;i<BOLSILLO_MAXIMO;i++)
{
    if (DISCO==false)
    {
        i++;
    }
   
    if (DISCO==true)
    {
        DISCO_CARGADO = i;
        CODIGO_CARGADO = CODIGO;
    }
}

}

lo guardo todo en dos nuevas variables para usarlo con mas facilidad. El for comienza a partir de 45, solo por motivos de gusto, para no usar disco 1 disco 2, para que suena mas real.
El caso que primero lo probe con el disco 46 y me funciono, pero al poner el disco 45, me sale el error de fuera rango. No entiendo.

Bueno si alguien ve algo que me comente please.




Cita de: Arcadian en Mayo 27, 2017, 03:08:41 PM
Una forma es usando arrays. Empiezas el juego con cero discos, ponemos un objeto para controlar esos datos:

EVENTO CREATE

global.discos=0  // Número de discos en nuestro inventario
for(i=1;i<=50;i+=1) // Loop entre todos los discos, la cifra es sólo orientativa
{
global.disco[i]=0  //  Esta variable nos dirá si tenemos o no un disco en particular en nuestro inventario
}


Y desde ya dibujamos la variable de nuestro total de discos (dentro del objeto controlador, no del disco en si mismo):

EVENTO DRAW
draw_text(x,y,string(global.discos))

Y ahora ya sí pasamos al objeto_disco; añadimos el código que nos dirá qué número de disco es:

EVENTO CREATE
disco=instance_number(objeto_disco)

Cuando el personaje coge el disco, por ejemplo al clicarlo, si no lo tenía ya, añade ese número de disco a su inventario:

EVENTO LEFT PRESSED

if global.disco[disco]=0{global.discos+=1;global.disco[disco]=1}else show_message("Este disco ya lo tengo!");exit}

272
Preguntas y respuestas / ALMACENAR DISCOS
Mayo 26, 2017, 08:07:44 PM
Buenas, pues tengo una cuestion y no se muy bien como plantearla, los que habeis hecho algun tipo de inventario creo que podreis ayudarme.

El caso es el siguiente. El player va recogiendo discos de ordenador, cada disco tendra un numero distinto e ira recogiendo y sumando discos. Cada disco contiene una informacion distinta.

A la hora de chequear los discos, como compruebo los discos que tengo y a la vez visualizarlo.

Como he dicho antes, creo que esto seria lo mas semejante a abrir un inventario, creo yo.

Bueno espero vuestros consejos. Saludos y gracias.  ;)
273
Dices, que tambien debo comparar la altura?? Creo que con el ancho es suficiente. No???

Muchas gracias.

Cita de: Clamud en Mayo 24, 2017, 10:40:43 PM
¿también se compara la altura?
274
Lo dices, por el background. No??
275
Os voy a dejar parte del codigo;

Event Step;

   
    var W = display_get_width();
    var H = display_get_height();
   
    if (surface_get_width(application_surface) != display_get_width())
       surface_resize(application_surface, W, H);
       

Uso un surface, y en el event step, re-escalo el tamaño del surface adaptandolo a la resolucion de la pantalla del dispositivo.

Utilizando las lineas que os he puesto arriba, en el evento step.

El caso es que funciona perfectamente en windows y en adroid tambien, pero este ultimo en un movil de 1280x720 de resolucion.

Sin embargo, al pasarlo a un movil de ultima generacion con una resolucion de 1920x1080, el surfaces sale con las esquinas tanto derecha como abajo, cortadas. Eso si, sale centrado y cubriendo la pantalla completa, pero, con los lados cortados, no llega a dibujar todo el surfaces.

En teoria, todo funciona, el surface coge el tamaño de los dispositivos, pero porque al usarlo en un android de mas resolucion se corta???

Bueno espero que me ayudeis a encontrar el problema. Saludos y gracias.!!! ;)



Cita de: Clamud en Mayo 23, 2017, 07:00:59 AM
Es muy poca información, deberías mostrar el código.
276
Nunca he programado algo asi, pero una vez lei que alguien hizo algo parecido, y el truco esta en usar los bpm de la cancion.

si la cancion esta a 140 bpm (por minuto) es decir, 140 bits por cada 60 segundos.
si la room esta a 60 steps seria, 60 segundos x 60 steps es decir.

140 bpm equivale a 3600 steps por minutos (estando la room a 60)

Creo que con este calculo puedes hacer algo. O eso creo. Suerte!!!  ;)
277
Buenas familia. El problema que tengo ahora es el siguiente.

Tengo un surfaces que se adapta perfectamente a las pantallas en windows, y tambien lo he conseguido que se adapta a la resolucion del movil android.

Pero solo hasta la resolucion 1280x720, a partir de esta resolucion en android hacia arriba, por ejemplo, 1920x1080, me aparece el surfaces centralizado en la pantalla, pero con las esquinas tanto de la derecha como la parte de abajo recortada.

Asi que no entiendo nada???

Si alguien sabe por donde van los tiros, que me comente algo, please.
278
Si, clamud, ya lo resolví.

Vaya tonteria era. Ahora estoy con la rescalada de dimensiones. De todas formas, muchas gracias a todos saludos.  ;)

Cita de: Clamud en Mayo 17, 2017, 11:00:08 PM
Esta línea no debería causar problemas
[gml]application_surface_draw_enable(false);[/gml]
solo evita que la application_surface se dibuje automáticamente en el evento Draw, por eso se dibuja manualmente en el evento Post Draw.

El error debe estar en otro objeto que borra la surface
[gml]application_surface_enable(false);[/gml]
279
Ya probe ponerlo en true, y lo que ocurre es que entra en la room pero no se dibuja el efecto shader.

No se que mas hacer, estoy desesperado ya.  ???

Cita de: 3dgeminis en Mayo 16, 2017, 04:53:20 AM
En esta parte
Citar
/// Prepare for application-wide shader.
application_surface_draw_enable(false);
estas desactivando la application surface y no la volves a activar, proba borrando esta parte.
280
Bueno, pues ultimamente, me ocurren cosas rarisimas.

Resulta que tengo un texto que imprimiendose poco a poco. Hasta aqui todo perfecto.

Pues bueno, si lo pruebo en la primera room del juego, funciona correctamente, porque el texto continua imprimiendose hacia abajo, ahora, si lo pruebo en la ultima room, el texto se va imprimiendo hacia arriba.

POR TODA LA CARA!!! por mas que lo he mirado no entiendo porque ocurre esto.  ???

os dejo el codigo por si alguien ve algo;

Information about object: obj_text_typer
Sprite:
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children:
Mask:

No Physics Object
Create Event:

set variable all_text to "ACCESO 46#Sistema de seguridad de puertas# - Scanlines (Optional)# - Green screen (Optional)# - Screen 'shut down' effect (Optional)# - Plus this text-typewriter##...all in an efficient GPU shader with#negligible CPU overhead!"
set variable font to fnt_hud_values
set variable char_display_count to 0
set variable chars_per_second to 8
set variable ticks to 0
Step Event:

execute code:

/// Reveal text.
ticks++;
char_display_count = ticks * chars_per_second / room_speed;


Other Event: Room Start:

execute code:

/// Prepare display text.
char_display_count = 0;
char_increment_per_tick = room_speed;


Draw Event:

execute code:

/// Display message text.
draw_set_halign(fa_center);
draw_set_font(font);
draw_set_colour(c_lime);

// Display text.
var text = string_copy(all_text, 1, floor(char_display_count));
draw_text(view_wview[0]/2, y, text);

// Find caret position.
var line_count = 1;
var pos = string_pos("#", text);
while (pos > 0)
{
    text = string_delete(text, 1, pos);
    line_count++;
    pos = string_pos("#", text);
}

// Draw caret.
var line_height = string_height(" ");
var x1 = view_wview[0]/2 + string_width(text);
var y1 = view_hview[0]/6 + line_height * (line_count - 1);

draw_set_alpha(sin(ticks / room_speed * 3.141)); // 'Pulse'
draw_rectangle(x1, y1, x1 + string_width(" "), y1 + line_height, false);
draw_set_alpha(1.0);

draw_text(20,10,char_display_count);
//draw_text(20,20,y1);

// Display text.

281
Eso es, a mi me ocurrio exactamente lo mismo.

Tienes que actualizar GAME MAKER  a la ultima version y crear de nuevo el APK del juego con la nueva version.

Suerte.  ;)
282
Bueno he estado haciendo mas pruebas y no entiendo nada.

Las pruebas que he realizado son las siguientes;

El surface lo utilizo en una roomCOMPUTER. vale, pues si inicio el juego con esa room este arranca sin error, pero no se ve nada. Ahora, copio dicha room, le cambio de nombre (roomPRE-COMPUTER), y le borro el object que contiene el shader. Que vaya casi sin nada la room, y ahora pongo un object para avanzar de room, es decir, para pasar a la roomCOMPUTER.
Arranco el juego, efectivamente se inicia sin problemas en la roomPRE-COMPUTER, pincho en el boton para avanzar de room, y efectivamente se va a la roomCOMPUTER, y con todo el efecto shader las letras todo perfecto. PERO ESTO PORQUE?? PORQUE FUNCIONA ASI??

ahora, avanzo a la siguiente room, donde realmente comienza el juego, me encuentro con el objectCOMPUTER, que es el que deberia de llevarme a la roomCOMPUTER, pincho en el, que realmente he puesto para que vaya primero a la roomPRE-COMPUTER, y despues pincho para ir a roomCOMPUTER, y me sale ERROR SURFACE NO EXISTE!!!

Por la cara colega. NO ENTIENDO NADA!!! porque a veces si detecta la surfaces otra nooo. Es una puta locura!!!!!   ???

Quizas sea porque en las otras rooms tambien uso una surfaces para el efecto linterna??

Por favor que alguien me ayude!!!!  :'(
283
Os paso todo el codigo, a ver si me podeis ayudar por favor;  :'(

Information about object: objectSHADER2
Sprite:
Solid: false
Visible: true
Depth: -10000
Persistent: true
Parent:
Children:
Mask:

No Physics Object
Create Event:

execute code:

/// Prepare for application-wide shader.
application_surface_draw_enable(false);


set variable ticks to 3050
execute code:

apagar = false;

Step Event:

execute code:

/// Scale the application surface to the current display size.
if (surface_get_width(application_surface) != display_get_width())
    surface_resize(application_surface, room_width, room_height);



execute code:

/// Advance time.
//ticks++;
if (apagar)
{
    ticks++;
}

Draw Event:

execute code:

//draw_text(room_width/2 ,y,ticks);

Post Draw Event:

execute code:

/// Apply shader to entire application.
var is_compiled = shader_is_compiled(crtmonitor_shader);

if (is_compiled)
{
    var progress_param = shader_get_uniform(crtmonitor_shader, "progress");
    var shutdown_progress_param = shader_get_uniform(crtmonitor_shader, "shutdown_progress");
    var scanlines_param = shader_get_uniform(crtmonitor_shader, "scanline_count");
    var green_levels_param = shader_get_uniform(crtmonitor_shader, "green_levels");

    shader_set(crtmonitor_shader);

    // Fade the CRT effect in over time.   
    var fade_start_time = 3.0 * room_speed;
    var fade_duration = 3.0 * room_speed;
    shader_set_uniform_f(progress_param, min(1.0, max(0.0, (ticks - fade_start_time) / fade_duration)));
   
    // Switch on the scanlines.
    var demo_start_secs = 43.0;
    var scanline_start_time = demo_start_secs * room_speed;
    if (ticks > scanline_start_time)
        shader_set_uniform_f(scanlines_param, 128.0); // Configure no. of scanlines.
    else
        shader_set_uniform_f(scanlines_param, 0.0);
   
    // Switch on the green screen.
    var greenscreen_start_time = scanline_start_time + 4.0 * room_speed;
    if (ticks > greenscreen_start_time)
        shader_set_uniform_f(green_levels_param, 32.0); // Configure no. of color levels.
    else
        shader_set_uniform_f(green_levels_param, 0.0);

    // Switch off the CRT.   
    var shutdown_start_time = greenscreen_start_time + 4.0 * room_speed;
    var shutdown_duration = 4.0 * room_speed;
    shader_set_uniform_f(shutdown_progress_param, min(1.0, max(0.0, (ticks - shutdown_start_time) / shutdown_duration)));

    // Reset the demo.   
    if (ticks > shutdown_start_time + 6.0 * 10)
        room_goto(roomNIVEL1);
}

draw_surface(application_surface, 0, 0);

if (is_compiled)
    shader_reset();


Key Release Event for <Escape> Key:

execute code:

apagar = true;

284
Pero el surface si que existe. No entiendo nada.

He estado haciendo pruebas en un proyecto limpio y aqui si que funciona al entrar y salir de la room.

Pero cuando lo introduzco en mi proyecto, al entrar o salir de la room donde se encuentra el surface sale el maldito error.

Quizas sea porque en mi proyecto ya estoy usando otra surface aparte??

Espero vuestra ayuda familia!!!  ???

Cita de: 3dgeminis en Mayo 14, 2017, 04:40:37 AM
Lo que dice el error es que se trata de usar una surface que no existe, que ha sido eliminada. Fijate si en alguna parte del codigo eliminas una surface.
285
Puede estar el error porque el draw_surface(application_surface, 0, 0); se encuentra en el Post Draw???

Y se produce el error tanto al entrar en la room como al salir de ella.

Por favor, si alguien sabe algo que comente. Please.  ???