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.

Temas - Selkie

1
Hace mucho que no tocaba Game Maker, y hoy he decidido intentar hacer una especie de MSPaint, por mero entretenimiento, con GM8.0 Pro.
Lo he estado haciendo con una surface, en la que voy dibujando los p?xeles de otro color, y luego la dibujo en pantalla, sin embargo no aparece m?s que el ?ltimo p?xel dibujado, es como si a cada step se reiniciase.
La cuesti?n es, ?c?mo hacer que se muestre todo lo dibujado y no s?lo el ?ltimo p?xel?
Dejo adjunto el editable de lo que llevo hecho, espero que alguien pueda ayudarme :)

Muchas gracias por adelantado ^^

2
?Hola! La verdad es que no suelo pedir ayuda, pero este tema me est? llegando a desquiciar, pese a parecerme muy sencillo en principio.

La situaci?n es: En mi juego shooter/plataformas, he creado unas "vallas" verticales para formar zonas seguras: el personaje puede atravesarlas, pero no los enemigos ni los disparos (si quieres matarlos, tienes que entrar).

Los enemigos tienen un movimiento muy sencillo: un booleano dir que indica si se mueve a izquierda (0) o derecha (1) y una variable velocidad que marca el valor absoluto de la hspeed.
Adem?s, salta cada 100 frames.

Para el movimiento, tengo este c?digo en Step:
[gml]if dir = 0{//izquierda
sprite_index = sprite_izquierda
if place_free(x-velocidad,y) && !collision_point(x-velocidad,y+vspeed,Reja_vert,0,0){hspeed=-velocidad}
else{dir = 1}}

if dir = 1{//derecha
sprite_index = sprite_derecha
if place_free(x+velocidad,y) && !collision_point(x+sprite_width+velocidad,y+vspeed,objeto_valla,0,0){hspeed=velocidad}
else{dir = 0}}[/gml]
Es decir, seg?n la variable de direcci?n, comprueba colisi?n con objetos s?lidos y con la valla (que no es s?lida, claro), y si en ambos casos no hay colisi?n, asigna la hspeed correspondiente. Si hay alguna colisi?n, se cambia la variable dir (el enemigo se girar?a para ir al otro lado).

El problema es que este c?digo no me funciona siempre, ya que a veces los enemigos traspasan las vallas.
Lo que he probado ha sido cambiar el argumento de la y en collision_point, pero tanto y como y+vspeed fallan (en ocasiones distintas, no s? exactamente cu?ndo), y el enemigo puede pasar ocasionalmente.

La otra soluci?n que se me ocurri? para hacer las vallas fue algo as? como "solidez selectiva", pero no s? si es posible hacer que un objeto sea s?lido ?nicamente para otros objetos determinados (en este caso, para los enemigos y los disparos).

Si lo veis necesario, puedo subir una demo del problema, ya que no s? determinar bien en qu? momentos falla.

Muchas gracias, un saludo!
3
Desarrollo de Scripts / Cron?metro y cuenta atr?s
Enero 08, 2011, 04:21:57 PM
Cron?metro y cuenta atr?s

  • Autor: Selkie
  • Descripci?n: Con algunos scripts, permite mostrar una cantidad de frames en minutos y segundos, pausarla y reiniciarla; as? como una cuenta atr?s usando una alarma.
  • Creado en GM8  :GM8:

El script principal es el time_calc(frames,fps), que transforma una cantidad de frames, en tiempo del formato minutos:segundos:cent?simas.
[gml]//argument0 = variable de frames
//argument1 = frames por segundo( > fps = < velocidad)
//
//Hacer coincidir las fps del script con las de la room para tiempo real
//
//m = minutos ; s = segundos ; d = d?cimas de segundo

m = argument0/(60*argument1)
m = floor(m)
s = (argument0 - m * 60*argument1)/argument1
if s < 0.01 {d = "0.00"}
if s!= 0{d = frac(s)}
s = floor(s)

if s < 10{s = "0"+string(s)}

time = string(m)+":"+string(s)+":"+string_char_at(string(d),3)+string_char_at(string(d),4)[/gml]

En argument0 pondremos la variable que contenga las frames, y en argument1 las fps de la room (doblando este argumento, hacemos que la cuenta sea el doble de lenta, mientras que si ponemos la mitad, ser? el doble de r?pida).
Por ejemplo, 2440 frames a 40fps ser?n 1:01:00 (Un minuto y un segundo).

Si usamos la funci?n de cron?metro, puede que nos interese pausarlo y reiniciarlo, para eso usamos dos peque?os scripts, cron_start() y cron_reset(frames,run)
cron_start:
[gml]//Pausa y reanuda el cron?metro
switch global.cron{
case 0: global.cron = 1; break;
case 1: global.cron = 0; break;}[/gml]

cron_reset:
[gml]//argument0 = frames con las que aparecer?
//argument1 >> 0 = en pausa; 1 = en movimiento
frames = argument0
global.cron = argument1[/gml]

Esto son todos los scripts, el resto del c?digo est? en el cuerpo del objeto, completo en la demo adjunta.

?Saludos!


4
Hola!  :)

Estoy creando un motor de plataformas, y he decidido que el sistema de guardado funcionar? con un archivo *.ini, que guardar? un valor distinto dependiendo de los niveles que hayas pasado.

As? que, como no sab?a usar inis en GM, he buscado en el manual y he encontrado esto. Bueno, la verdad es que no lo he entendido muy bien, pero he creado un archivo SPE.ini en la misma carpeta que el juego, y he escrito esto:
[SPE]
Code=0

Code es la variable que dir? los niveles que te has pasado (no ser? as? de directo, la idea es que los jugadores no puedan cambiarlo tan f?cilmente, as? que los valores ser?n distintos.)
Para probarlo, he puesto en el evento de un objeto lo siguiente:
ini_open(SPE);
ini_write_real(SPE,Code,1);
ini_close();

Tambi?n he probado con comillas en los argumentos, y algunas cosas m?s, pero nada, tras ejecutar el evento el ini sigue tal cu?l.
?Cu?l podr?a ser el problema?

Gracias por leer  :-[

EDIT: Solucionado!!  ;D
El c?digo correcto era
ini_open("SPE.ini");
ini_write_real("SPE","Code",1);
ini_close();

Pero no ha funcionado hasta que no lo he puesto en otro evento, no s? por qu?. Estaba us?ndolo en Mouse Right Button y no funcionaba. Despu?s, lo puse en Keyboard <Space> y funcion?  :D