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

226
Preguntas y respuestas / Re: Efecto de dia y noche?
Mayo 23, 2010, 06:22:21 PM
?Recuerdas cuando el profe de mate te dijo que alg?n d?a necesitarias lo que te estaba ense?ando?

2 minutos = 120 segundos
1 d?a = 24 hora

120/24 = 5

1 dia en 2 minutos = 1 hora en 5 segundos

Simplemente crea una variable donde tener la hora, modificala cada 5 segundos y usala en lugar de current_hour.
227
Preguntas y respuestas / Re: problema con la ?
Mayo 19, 2010, 09:57:39 AM
De hecho, cuando se trata de variables en el GM es posible tener variables con ?, tildes o cualquier car?cter especial, pero la variable es inaccesible por m?todos normales, lo que hace que realmente no valga la pena hacerlo.

Para hacerlo simplemente se usan la familia de funciones relacionadas a variables, por ejemplo:

variable_local_set("Variable con ?",5)

Crea la variable Variable con ?, pero obvio los espacios en el nombre hacen que sea imposible hacer referencia a dicha variable. En ese caso para recuperar el valor se debe usar variable_local_get(), y a la larga hacer referencia a variables con funciones se vuelve tedioso, quiz?s incluso injustificable si lo ?nico que ganas es poder tener variables con los nombres que quieres.


Ya que no es un m?todo ?til ni recomendable, esta informaci?n no tiene mucho valor, pero tampoco le hace da?o a nadie.
228
El movimiento es lo m?s facil, puedes utilizar una cuadricula de movimiento, las funciones del gm de pathfinding y un limitador de pasos para el movimiento enemigo.

La IA es un tanto m?s compleja y dependera de las reglas del juego y que tan inteligente quieres que sea realmente el enemigo, por ejemplo, si hay penalizaciones o beneficios por atacar de frente, lado o espaldas, querras que el enemigo trate siempre de atacar por el lado que m?s le benecifie, y evite atacar los lados con penalizaciones.


Te dejo este ejemplo para que te des una idea, aunque te advierto que es considerablemente basico. El objeto de control crea la cuadricula y cambia los turnos. Haces click en la zona del mapa donde quieras que se mueva la cara sonriente, la cara se mueve y termina su turno, luego las calaveras se mueven buscando alcanzar la cara sonriente, si lo alcanzan lo "atacan". Actualmente el ejemplo no colorea los cuadros hasta donde se pueden mover los objetos.

He tratado de ser tan claro como fuese posible, pero tiendo a liarme cuando escribo c?digo, si no entiendes algo solo pregunta.
229
Preguntas y respuestas / Re: Tiles profundidad
Mayo 11, 2010, 02:59:32 AM
Puedes utilizar la funci?n tile_set_depth(id,depth), el primer argumento es la id del tile a cambiar y el segundo la nueva profundidad.

Tambien podrias utilizar la funci?n tile_layer_depth(depth,newdepth) que cambia todos los tiles en cierta profundidad a una nueva profundidad, siendo el primer argumento la profundidad actual y el segundo la nueva.
230
Preguntas y respuestas / Re: Como empezar con el 3D
Mayo 02, 2010, 03:40:11 AM
En la secci?n de descargas existen varios tutoriales, este en particular es el primero de una serie y es llamado justamente EMPEZANDO CON EL 3D:

http://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=34

Aunque creo que son para el GM6 no mucho ha cambiado desde esa versi?n en lo que a 3d respecta.

En lo que a "Unknown Action" se refiere, cuando un usuario agrega una libreria de acciones y no la redistribuye al dar el editable, las acciones de dichas librerias son remplazadas por "Unknown Action" justamente porque el GM no sabe a que libreria pertenece.
231
Si, debes eliminar el resto de +".txt" que hay en el c?digo.

Sobre tu seg?nda pregunta, solamente lo guardara como .doc si cuando eliges el nombre del archivo agregas .doc al final:



Lamentablemente no conosco ninguna manera de evitar esto.
232
Simplemente agregas la extensi?n al final del nombre del archivo, el autentico problema es saber que clase de archivo es el que se quiere salvar.

Podr?as hacer algo como esto:

File = get_save_filename("Documento de Texto|*.txt|Documento de Word|*.doc|Archivo de Configuraci?n|*.ini","c:\Archivo");
if filename_ext(File)="" File = File += ".txt";


De esta manera cualquier archivo al que no se le agregara la extensi?n al nombrarlo seria autom?ticamente un txt.
233
Preguntas y respuestas / Re: ser? posible:...
Abril 23, 2010, 10:55:04 PM
Es perfectamente posible, de hecho yo habia hecho un engine de terreno destruible en mi epoca de novato en el GM, asi que es relativamente simple.

En este tema de la comuna oficial puedes encontrar algunos ejemplo:

http://gmc.yoyogames.com/index.php?showtopic=370633

Y te dejo este ejemplo de Sinaz:

234
Respondo solo para mencionarte que el evento Mouse Right Button solo se activa cuando se hace click sobre su respectivo objeto, puede que fuera por eso que no te funcionaba antes de pasarlo a Keyboard <Space>.
235
Si, siendo un solo objeto el que controla los tiquetes hace que sea un tanto complicado. Lo que hay que hacer es comparar la posici?n del mouse con la de los n?meros al hacer click en su area. En este caso tendrias que agregar esto en el evento global left pressed del mouse en el objeto obj_Numeros:

var Valor;
if (mouse_x>151&&mouse_x<535&&mouse_y>34&&mouse_y<162){
Valor = ds_list_find_value(Lista[(mouse_y-34) div 64],(mouse_x-151) div 64) + 1;
if Valor>9 Valor = 0;
ds_list_replace(Lista[(mouse_y-34) div 64],(mouse_x-151) div 64,Valor);
}

else if (mouse_x>151&&mouse_x<535&&mouse_y>186&&mouse_y<314){
Valor = ds_list_find_value(Lista[2+(mouse_y-186) div 64],(mouse_x-151) div 64) + 1;
if Valor>9 Valor = 0;
ds_list_replace(Lista[2+(mouse_y-186) div 64],(mouse_x-151) div 64,Valor);
}

else if (mouse_x>151&&mouse_x<535&&mouse_y>474&&mouse_y<602){
Valor = ds_list_find_value(Lista[4+(mouse_y-474) div 64],(mouse_x-151) div 64) + 1;
if Valor>9 Valor = 0;
ds_list_replace(Lista[4+(mouse_y-474) div 64],(mouse_x-151) div 64,Valor);
}

else if (mouse_x>151&&mouse_x<535&&mouse_y>634&&mouse_y<762){
Valor = ds_list_find_value(Lista[6+(mouse_y-634) div 64],(mouse_x-151) div 64) + 1;
if Valor>9 Valor = 0;
ds_list_replace(Lista[6+(mouse_y-634) div 64],(mouse_x-151) div 64,Valor);
}


Primero checa sobre que area se encuentra el mouse, luego determina sobre que n?mero basado en sus coordenadas, y cambia el n?mero.

Puede que tambien quieras remplazar el for en el evento create por este:

for (i=0;i<8;i+=1){
Lista[i]=ds_list_create();
repeat(6) ds_list_add(Lista[i],0);
}
236
Cuando usas la funci?n get_savefile_name puedes agregar filtros para las extensiones de los archivos que se muestran, con la forma "Nombre1|Mascara1|Nombre2|Mascara2...", por ejemplo:

get_save_filename("Documento de Texto|*.txt|Documento de Word|*.doc|Archivo de Configuraci?n|*.ini","c:\Archivo")

Pero no agrega al final del archivo la extensi?n seleccionada, para que los archivos sean salvados con distintas extensiones tu debes agregar la extensi?n manualmente.
237
El problema con los n?meros repetitivos es que a la hora de dibujarlos dibujas la misma barra dos veces, tanto arriba como abajo:

//Dibuja las 2 primeras Listas superiores de numeros (1 y2)
for(i=0;i<2;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i],j),175+64*j,58+64*i);
 
//Dibuja las 2 segundas Listas superiores de numeros (3 y 4)
for(i=0;i<2;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i],j),175+64*j,210+64*i);
 
 //Dibuja las dos primeras Listas inferiores de numeros (5 y 6)
for(i=2;i<4;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i],j),175+64*j,370+64*i);
 
//Dibuja las dos ?ltimas Listas inferiores de numeros (7 y 8)
for(i=2;i<4;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i],j),175+64*j,530+64*i);


En este caso lo que deb?as hacer era, con cada nuevo for, sumar 2 al i inicial y a su l?mite:

for(i=0;i<2;i+=1) //Dibuja las primeras lineas de numeros
for(i=2;i<4;i+=1) //Dibuja las segundas lineas de numeros
for(i=4;i<6;i+=1) //Dibuja las terceras lineas de numeros
for(i=6;i<8;i+=1) //Dibuja las cuartas lineas de numeros


Hacerlo ahora sin embargo significar?a cambiar las coordenadas en que todo se dibuja, por lo que resulta m?s simple solo sumar la cifra correspondiente al i en Lista, quedar?a as?:

//Declara variables
var i,j;

//Dibuja las 2 primeras Listas superiores de numeros (1 y2)
for(i=0;i<2;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i],j),175+64*j,58+64*i);
 
//Dibuja las 2 segundas Listas superiores de numeros (3 y 4)
for(i=0;i<2;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i+2],j),175+64*j,210+64*i);
 
 //Dibuja las dos primeras Listas inferiores de numeros (5 y 6)
for(i=2;i<4;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i+2],j),175+64*j,370+64*i);
 
//Dibuja las dos ?ltimas Listas inferiores de numeros (7 y 8)
for(i=2;i<4;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i+4],j),175+64*j,530+64*i);


En el caso de que los n?meros amarillos, el problema es que hay que tomar en cuenta los nuevos espacios entre las l?neas de n?meros. Puedes remplazar su c?digo de dibujo por este:

for (i=0;i<8;i+=1){
for (j=0;j<6;j+=1){
 if ds_list_find_value(Lista[i],j)=ds_list_find_value(Numeros,j){
  draw_sprite_ext(sprite1,ds_list_find_value(Lista[i],j),175+64*j,58+(24*(i>=2))+(160*(i>=4))+(32*(i>=6))+64*i,1,1,0,c_yellow,1)
 }
}
}


Con esto, cuando est? en la tercera l?nea agrega 24 pixeles de espacio, cuando esta en la quinta agrega otros 160, y en la s?ptima otros 32. Otro error menor es que tenias el for inicial con limite en 4:

for (i=0;i<4;i+=1)

Lo que ocasiona que solo se dibujen los n?meros encontrados en las 4 primeras l?neas.
239
Vas a perdonar, pero el problema que describes al inicio, que crea dos archivos, es indudablemente debido a lo que te dije. Una vez solucionado deber?as haber hecho las correcciones correspondientes a tu c?digo para evitar los problemas que la soluci?n pueda causar.

No niego, sin embargo, que mi respuesta no fue completa, adem?s del cambio en la primera l?nea deb?as cambiar la tercera para que buscara por file+".txt" y no por file, pero pens? que seria obvio:

if !file_exists(file+".txt") {
240
El problema esta en esta parte:

f = file_text_open_write(file)
file_text_close(f)
if !file_exists(file) {
show_message("No se pudo guardar el archivo")
file = lastfile
exit
}


Cambia la primera linea:

f = file_text_open_write(file)

Por esta:

f = file_text_open_write(file+".txt")