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

616
Bueno, maneras hay varias. Lo primero, son las virtual key, investiga un poco sobre eso.
Lo segundo, puedes usar las funciones de detección del mouse en móviles, device_mouse_check_button, y con un ciclo for que recorra todos los dedos que desees que se puedan tocar, y si al menos uno está tocando, pues anda, haces lo que quieras.
Algo así:
[gml]
for(i = 0; i < 5; i++) {
if device_mouse_check_button(i, mb_left) {
//Haces lo que quieras
}
}
[/gml]

Lo demás puedes ingeniarlo tú haciendo algún rollo con el código xD
617
Esto también es imposible, GM se encarga él solo de gestionar la carga de objetos. Es decir que cargan cuando las salas inican, no puedes hacer que cargen antes. Es imposible.
618
En realidad, un menú de carga que muestre la carga tal y como se lleva es imposible. GM no permite obtener estos valores ni administrarlos a tí mismo.
Lo único que puedes hacer es una pseudobarra de carga, que ande ahí pero en realidad no mostrará el progreso real D:
619
Juegos en desarrollo / Re:CSS Drawer [BETA] v0.2
Marzo 26, 2016, 04:49:51 AM
¡Actualización!
La versión BETA v0.2 está disponible.
Nueva información en el post original

PD: Perdón por el doble-post :-[ xD
620
Preguntas y respuestas / Re:Directorios en Android
Marzo 26, 2016, 03:58:19 AM
En Android, el directorio de trabajo (working_directory) se encuentra en la ruta data/data/nombre_del_juego. Puedes cargar y guardar lo ue quieras ahí
621
Desarrollo de Scripts / Sistema de encriptación #2
Marzo 25, 2016, 08:24:57 PM
Autor: NiuWeb
Versión de GM utilizada: GMS 1.4.1657 stable, aunque funciona perfectamente en GM8.0
Descripción: Encripta una cadena con una contraseña para hacer ilegible su contenido. A diferencia del primer sistema que hice (ronda por aquí en esta sección), este sistema no devuelve caracteres especiales, y por ello los resultados son más "normales", aparte de que el proceso de encriptación es diferente. Pero este sistema tiene dos desventajas: Las cadenas encriptadas resultantes tienen un largor 25 veces mayor a la cadena original, lo que le hace un poco tedioso con cadenas muy largas.  La otra es que si la cadena a encriptar tiene un caracter con valor decimal mayor a 99999, el proceso fallará y no se encriptará como debe D:

Código:
Encriptador:
[gml]
///encode(str, key);
var str, key;
str = string(argument0);
key = string(argument1);
var i, j, d, c, nstr1, nstr2;
nstr2 = "";
nstr1 = "";
for(i = 1; i <= string_length(str); i += 1)
{
    c = string(ord(string_char_at(str, i)));
    while(string_length(c) < 5)
        c = "0"+c;
    nstr1 += c;
}
for(j = 1; j <= string_length(key); j += 1)
{
    d = string(ord(string_char_at(key, j)));
    while(string_length(d) < 5)
        d = "0" + d;
    nstr2 += d;
}

if string_length(nstr2) > string_length(nstr1)
    nstr2 = string_copy(nstr2, 1, string_length(nstr1));
while(string_length(nstr2) < string_length(nstr1))
    nstr2 += string_copy(nstr2, 1, string_length(nstr1) - string_length(nstr2));
   
var str2, k, l, e, f, str3;
str2 = "";
str3 = "";

for(k = 1; k <= string_length(nstr1); k += 1)
{
    e = chr(ord(string_char_at(nstr1, k)) + ord(string_char_at(nstr2, k)));
    str2 += e;
}
for(l = 1; l <= string_length(str2); l += 1)
{
    f = string(ord(string_char_at(str2, l)));
    while(string_length(f) < 5)
        f = "0" + f;
    str3 += f;
}
return str3;
[/gml]
Argumentos:
str: La cadena a encriptar
key: La clave para encriptar la cadena.

Ahora, el desencriptador:
[gml]
///decode(str, key);
var str, key;
str = string(argument0);
key = string(argument1);

var i, a, ns1;
ns1 = "";
for(i = 1; i < string_length(str); i += 5)
{
    a = chr(real(string_copy(str, i, 5)));
    ns1 += a;
}
var j, b, ns2;
ns2 = "";
for(j = 1; j <= string_length(key); j += 1)
{
    b = string(ord(string_char_at(key, j)));
    while(string_length(b) < 5)
        b = "0"+b;
    ns2 += b;
}
if string_length(ns2) > string_length(ns1)
    ns2 = string_copy(ns2, 1, string_length(ns1));
while(string_length(ns2) < string_length(ns1))
    ns2 += string_copy(ns2, 1, string_length(ns1) - string_length(ns2));

var k, c, d, e, ns3;
ns3 = "";
for(k = 1; k <= string_length(ns1); k += 1)
{
    c = string_char_at(ns1, k);
    d = string_char_at(ns2, k);
    e = ord(c) - ord(d);
    ns3 += chr(e);
}
var l, f, ns4;
ns4 = "";
for(l = 1; l <= string_length(ns3); l += 5)
{
    f = string_copy(ns3, l, 5);
    f = chr(real(string_digits(f)));
    ns4 += f;
}
return ns4;
[/gml]
Argumentos:
str: Una cadena encriptada por el script anterior, la que queremos desencriptar.
key: La clave con la que se encriptó la cadena.


[spoiler]Spam:
http://niuweb-blog.blogspot.com.co/2016/03/sistema-de-encriptacion-de-cadenas-para.html
[/spoiler]
622
El operador = es el operador de asignación, el que asigna un valor a una variable.
El operador == es el operador de comprobación de igualdad, el que comprueba si un valor es igual a otro.

En GML, el operador = también puede funcionar como el operador ==; pero no en viceversa.
[gml]
a = 3; //Bien
b = 7; //bien

if (a = b) //bien
c = a-b;//bien

if (a == b) //bien
c == 3 - a; //mal
[/gml]
623
Preguntas y respuestas / Re:Carga de imagen externa.
Marzo 24, 2016, 07:50:59 PM
En android, GMS lee los archivos en su working_directory, el que, si no me equivoco, se ubica en la ruta data\data\nombre_del_juego.
Para ver esta ruta necesitas contar con permisos root en el dispositivo, o en el peor de los casos usar una computadora, aunque muchas veces éstas sólo pueden entrar a la tarjeta SD del dispositivo D:
624
Sommus, no sabes lo exageradamente pesimista que eres xD
¿Cómo que no se puede? Sigo sin entender por qué dicen que no se puede hacer. ¿Que acaso nadie ha usado una estructura de datos de GMS? Son muy útiles.
Detesto hacerlo, pero en vista de que están tan escépticos respecto al tema, adjunto un pequeño editable para que vean que si se puede hacer. El ejemplo crea una serie de llaves en un mapa, y en cada llave mete una rejilla. En esas rejillas guarda la info. También guarda un archivo sin formato que "imprime" la base de datos. Todo esto ocurre al presionar la tecla "N". Es muy simple, pero se entiende.
625
Preguntas y respuestas / Re:¿COMO PUEDO PONER ESTO?
Marzo 21, 2016, 09:49:51 PM
Cuando tu personaje muera, pones
[gml]
instance_create(x, y, obj_perder);
[/gml]
Hay que leer un poquito el manual y ver tutos ¿No? xD
626
No entiendo, ¿Estás preguntando? D:
De ser así, te respondo, de no ser así, igual xD
Lo que puedes hacer, es poner en un evento de colisión del Obj_Blokezito con el player un código algo así:
[gml]
//El código para agregar al inventario
instance_create(x, y, item_blokezito) //Creamos al item_blokezito
instance_destroy(); //Borramos al Obj_Blokezito
[/gml]
El evento de colisión sólo se ejecuta cuando colisiona con el player, así que no debes preocuparte por detener manualmente el código que ahí se encuentre
627
No tengo claro cuál es la diferencia entre estos dos conceptos, ni siquiera conocía el término minería de datos.
Segundo, no creo que haya un link específico de Tutorial para codarck para hacer base de datos en game maker, para este tipo de cosas lo mejor es idearlo tú.
Podrías también usar estructuras de datos y archivos de texto, por ejemplo, tener una ds_list() con dos índices: En el primero guardar un array con los nombres de las bases de datos, y en el segundo una ds_map() que tenga como llaves estos nombres, y como valores una ds_grid() donde estén los datos.
Sólo es una idea, no es la única forma. Puedes inventar muchas formas de hacerlo
628
El código que tienes debería funcionar, peeeero, hay algo que falta.
Al momento de que el humano colisione con el zombie, su variable atacar se activa. Pero, ¿Cuándo se desactiva?
Lo mejor en esos casos sería, en vez de usar un evento collision, usar funciones de colisión en su evento step, algo así:
[gml]
//Reemplazo del evento colision con zombie del humano, evento step
if place_meeting(x, y, zombie)
{
atacar = true;
sprite_index = spr_ataca;
}
else
{
atacar = false;
x += 1;
sprite_index = spr_no_ataca;
}
[/gml]
No lo he comprobado, ni estoy seguro de si funciona.
629
La constante other sólo funciona en eventos de colisión y dentro de un with de adentro hacia afuera. Esto quiere decir que funciona dentro de un with así:
[gml]
pepito = "perez"
with (objeto_pepito)
{
show_message("Mi apellido es " + other.pepito);
}
[/gml]
Como puedes apreciar, dentro del with se tomará other.pepito como la variable pepito del objeto que ha "invocado" ese with.

Volviendo al tema, y tomando en cuenta lo dicho anteriormente, la constante other no funciona de la forma en la que la has puesto, ya que no está dentro de un evento de colisión o un with que la invoque, por lo tanto, es inútil.
Para solucionar esto, deberías, en vez de usar un place_meeting(), que sólo devuelve un booleano, usar un collision_rectangle(), que sí devuelve la id del objeto que colisiona.
[gml]
objeto = collision_rectangle(x, y, x+32, y+32, objeto_pepito, false, true);
if objeto != noone
{
atacar = true
with (objeto){
animacion=true
x-=10
}
}
[/gml]
630
Podrías declarar en el objeto personaje una variable atacando, activarla cuando el villano esté atacando y desactivarla cuando no. Y cuando un nuevo villano aparece, compruebe si está atacando, y de no ser así, atacar.
[gml]
///Create del personaje
atacando = false;
[/gml][gml]
///Colisión del villano con el personaje, el objeto es el villano
if other.atacando = false
{
    //Lo que haces para "atacar"
    other.atacando = true;
}
[/gml]
Y debes comprobar que cuando no se esté colisionando con ningún villano, se desactive la variable
[gml]
///Evento step del personaje
if !place_meeting(x, y, villano)
atacando = false;
[/gml]

Todo inventado, no lo he comprobado.