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

16
Preguntas y respuestas / Re: Ayuda animaci?n Draw
Abril 25, 2011, 11:01:00 PM
Que extra?o, seguramente estas usando draw_sprite() de forma incorrecta. Tendria que ser algo haci:
[gml]draw_sprite(sprite_index,image_index,x,y) [/gml]
O en todo caso si no funciona:

evento Create
[gml]Fotograma = 0;[/gml]
evento Draw
[gml]Fotograma += 1
draw_sprite(sprite_index,Fotograma,x,y) [/gml]
La segunda opcion es poco recomendable  :)

En fin, sprite_index es el nombre del sprite a dibujar
y despues image_index es el numero del fotograma a dibujar, para que la animacion corra correctament este numero tiene que ir aumentando, pero para hacer que aumente automaticamente, simplemente hay que poner image_index y ahi GameMaker se encarga de controlar la animacion automaticamente ademas que soluciona algunos problemas que tengas en el futuro, por eso no recomiendo la segunda opcion.


Suerte ;D , decime si no entendiste.
17
Preguntas y respuestas / Re: Ayuda problema 3D
Abril 19, 2011, 11:18:12 PM
Oky, de nada  :-[
18
Preguntas y respuestas / Re: Ayuda problema 3D
Abril 19, 2011, 01:29:07 AM
Ahhh, es de plataformas en 3d
en ese caso tendr?as que usar d3d_draw_block o usar:

[gml]d3d_transform_set_identity();
d3d_transform_add_rotation_x(90);
d3d_transform_add_rotation_y(180);
d3d_transform_add_rotation_z(0);
d3d_transform_add_translation(x,y,0);

ttt = sprite_get_texture(sprite_index,image_index)
d3d_draw_wall(-16,0,0,+16,0,32,ttt,1,1)

d3d_transform_set_identity();[/gml]

este script es similar al otro, solo que ahora los valores 90 y 180 estan fijos. Intenta combinar diferentes valores para ir encontrando el angulo correcto para que no se vea como una linea

:-[
19
Preguntas y respuestas / Re: Ayuda problema 3D
Abril 18, 2011, 11:05:32 PM
Antes que nada tendrias que fijarte si estas colocando correctamente:
[gml]draw_set_color(c_white)
draw_set_alpha(1)
[/gml]
Despu?s, coincido con vos en que el Game Maker, no le otorga iluminaci?n a los sprites, ya que la iluminaci?n es por v?rtices, y los sprites no tienen v?rtices (Por que "T?cnicamente" el uso de sprites no corresponde al uso correcto del 3d).

En todo caso, se soluciona f?cil. En el caso de que la c?mara sea de angulo fijo, la soluci?n mas simple es representar al sprite como un plano (Coloc?ndole como textura la misma imagen que el sprite). En el caso de que la c?mara sea de angulo cambiante, al plano vas a tener que girarlo constantemente para que siempre este mirando a la camara.

Okey, para dibujar un sprite en un plano, en el evento draw:
[gml]ttt = sprite_get_texture(sprite_index,image_index)
d3d_draw_wall(x-16,y,0,x+16,y,32,ttt,1,1)[/gml]
Simplemente lo que estoy dibujando es una pared, con el sprite y su subimagen correcta. Dependiendo del angulo de tu c?mara en otros casos quiz?s tendr?as que usar d3d_draw_floor, o d3d_draw_block .

En el caso de que la c?mara sea de angulo cambiante tendr?as que ser algo as?, de igual manera no se cuales son los ?ngulos de tu c?mara, as? que tendr?as que ir modificando los valores para hacer que coincidan correctamente, los valores a modificar son +90 o -180

[gml]d3d_transform_set_identity();
d3d_transform_add_rotation_x(point_direction(x,0,obj_camara.x,0)+90);
d3d_transform_add_rotation_y(point_direction(0,y,0,obj_camara.y)-180);
d3d_transform_add_rotation_z(0);
d3d_transform_add_translation(x,y,0);

ttt = sprite_get_texture(sprite_index,image_index)
d3d_draw_wall(-16,0,0,+16,0,32,ttt,1,1)

d3d_transform_set_identity();[/gml]
Lo que hace este script es girar los ?ngulos x,y,z de la pared, para que siempre este mirando a la c?mara.


:-[ , Espero que no te pierdas y suerte.
si te explique cualquier cosa, avisame  XD

20
Preguntas y respuestas / Re: Division de celulas
Abril 18, 2011, 06:48:51 PM
No no es tan complicado, solo tendr?as que conseguir un buen sprite de una c?lula dividendose en dos, y despu?s sincronizar el final de la animaci?n para que se destruya el objeto y en su lugar se creen dos nuevos objetos que repetir?an el ciclo indefinidamente.

en el evento create del objeto obj_Celula:
[gml]sprite_index = spr_Celula; //Determina el sprite
image_speed = 0.5; //Determina la velocidad del sprite[/gml]

en el evento step del objeto obj_Celula:
[gml]if(image_index = image_number-1)
{
instance_create(x+16,y,obj_Celula)
instance_create(x-16,y,obj_Celula)
instance_destroy()
}[/gml]

En el ejemplo se crean dos nuevas c?lulas, una a la izquierda y otra a la derecha de la c?lula actual. La posici?n nueva para crear las nuevas dos c?lulas tendr?as que adaptarla para que coincida con la animaci?n, con esto digo para que una vez que termine la animaci?n no se note la diferencia de que se creo una nueva c?lula y as? parece que es la misma de la animaci?n.

Igual, el desafi? mas grande en este caso seria encontrar el sprite adecuado.

;D



EDITO:
PD: Primero se van a crear 2 celulas nuevas, despues 4,8,16,etc. Por lo que en muy poco tiempo el juego se va a crear 4096 objetos y finalmente se va a trabar.

Adjunto un ejemplo, esta bastante bien  :-[ (Al menos eso creo), de igual manera le faltan un mont?n de detalles como las coliciones. Igual te va a servir
21
Preguntas y respuestas / Re: salto y gravedad en 3d?
Abril 16, 2011, 02:32:16 AM
Para poder saltar y poder por ejemplo subir a un piso superior, es necesario tener un buen sistema de coliciones. Sea cual sea el metodo de colicion que elijas, lo basico seria hacer que el ejeZ en el cual se ubique la camara empieze a aumentar progresivamente y descender despues de un tiempo, pero hay que verificar de que en el descenso no se encuentre ninguna colicion debajo de la camara, y es hay donde hay que hacer primero las coliciones. Para hacer que el descenso se detenga si se encontro con alguna colicion.

Para la colicion no es necesario utilizar una extencion DLL, podes usar las funciones nativas de GM, pero en tal caso va a ser mucho mas complicado.

Vuelvo a sujerirte de que explores los ejemplos de los DLL que te publique en el post anterior. Este DLL, por ejemplo, trae un Salto y Gravedad perfecto:

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


:) Que te sirva! y nuevamente suerte con el 3d!
22
Preguntas y respuestas / Re: Objetos solidos?
Abril 16, 2011, 02:16:24 AM
No, en realidad Game Maker, no reconoze como solido a la totalidad del objeto en 3d. Como GM es un sistema en 2d, su colicion se aplica solo a su Sprite no importando haci que modelo o forma en 3d sea.

Por ejemplo un objeto con un sprite redondo y con un modelo en 3d cuadrado, GM va a reconocer la colicion con forma redonda. Tambien, tambien no importa de que altura sea el modelo, la colicion va a afectar todo su eje Z, a menos claro que desactives solid=false, cuando estes a una altura determinada.

____

Igual existen extenciones en dll, para la colicion de los modelos en 3d, tambien existen motores graficos para GM como Ultimate 3d o Ogre3d que tienen soporte nativo para coliciones en 3d. Otras alternativa es de usar un motor de fisica en 3d, es mucho mas complicado pero deja unos resultados exelentes.

Te paso algunos links:

DLL solo para colicion
http://gmc.yoyogames.com/index.php?showtopic=329495
http://gmc.yoyogames.com/index.php?showtopic=262007
http://gmc.yoyogames.com/index.php?showtopic=449508

DLL de engines
http://www.ultimate3d.org/
http://gmc.yoyogames.com/index.php?showtopic=455439

DLL de fisicas en 3d
http://gmc.yoyogames.com/index.php?showtopic=375858

___

Para empezar esta intersante que comienzes con los dll que publique primero, por que estos traen ejemplos mas faciles  :-[

Oky, suerte con tu incursion al 3d!
23
Gracias, y es verdad, decirle a los usuarios que no modifiquen nada es buena idea, ya que podria ser muy frustrante perder todos los progresos.

Y la idea de Iros, de cambiarle la extencion a los tres archivos, como por ejemplo a DLL, mejoraria mucho mas las cosas, es mas, se me ocurre que podrias guardarlos en formato EXE haci de este modo se desabilita la funcion abrir con.  XD

Okey, gracias! y que bueno que te halla servido!
+1 Vuelve!
24
Citar... para leer las variables de ese archivo, cu?ndo las has guardado?
Este archivo de datos del que hablo, se guardaria/crearia cada vez que se guarda una partida.

CitarLo que quiero es que NO SE GUARDEN los datos en el txt, sino en el juego;
Guardar los datos en el juego, lo veo algo complicado (Por lo menos con las funciones nativas del Game Maker), las unicas soluciones para guardar datos de un juego, si no me equivoco son: Archivos Ini , Archivo de Textos (Como el de mi ejemplo), Archivos Binarios (Estos un tanto ilegibles), o Entradas en el registro de windows (Estan mas o menos ocultas para un usuario comun, pero de igual manera son vulnerables a modificaciones)

CitarEn ese caso, c?mo har?a para que el txt no fuera legible?
Para que un archivo de texto no sea legible, existen extenciones en DLL, que te perminen encriptar los archivos bajo una contrase?a y desencriptarlos solo para que el juego pueda leerlos.
Podes encontrar estos DLL en http://www.gmtoolbox.com/ , en donde dice "Encryption / Hashing"
Otra solucion para que no se puedan modificar, es guardar los datos en un archivo binario. Estos archivos se crear similar a los archivos de texto, y con funciones nativas del GM, por ejemplo, antes de guardar una partida:
[gml]Archivo = file_bin_open("Datos.ge",1) // Se abre un archivo(O se crea si no existe), el 1 indica que se va a utilizar para escribir
file_bin_seek(Archivo,0) //Se mueve al bite indicado, en este caso 0
file_bin_write_byte(Archivo,objJugador.Salud) //Escribe el bite, en este caso la salud del jugador
file_bin_seek(Archivo,1)
file_bin_write_byte(Archivo,objJugador.Municion)
file_bin_close(Archivo)
[/gml]
Si, no me equivo tendria que escribir correctamente un archivo, solo recorda que se escriben valores numericos que esten dentro del rango del 0 al 255. Esta solucion es mas o menos sencilla comparada con la de encriptar, pero recomiendo la encriptacion  :-[

Citardeber?a crearlo en alguna parte del disco C inaccesible?
Puede ser una alternativa, pero lo complicado es encontrar las rutas correctas, por ejemplo hay sistemas que utilizan discos D o E, o en mi caso algo que me sucedio, que al intentar guardar archivos en carpetas como System32 o Windows en antivirus no me dejaba hacerlo.

Citarc?mo har?a para checar si no hay creado un txt en alguna parte del disco duro para que no sea descubrible por el jugador, si no est? creado, lo crea, y luego que guarde unas variables en el juego y las escriba en el txt?
Para detectar si existe un archivo, se usa la funcion "file_exists(fname)". Por ejemplo:
[gml]if(file_exists("RutaSuperSecreta/Datos.txt") = true)
{
show_message("El archivo existe")
}[/gml]
Recorda, que las funciones file_text_open_read, en el caso de que el archivo no exista, lo crea automaticamente. De este modo no seria necesario detectar o no la existencia del archivo, por que: Si existe, modifica el archivo existente. Si No existe, crea un archivo en blanco.

CitarS?lo me falta eso, c?mo crear el texto y guardar variables del juego en el txt.
Antes de guardar, una partida, seria necesario esto (El ejemplo es del Slot1)
[gml]Archivo = file_text_open_write("Datos.txt")
file_text_write_real(Archivo,objJugador.Salud)
file_text_writeln(fileid)
file_text_write_real(Archivo,objJugador.Municion)
file_text_close(fileid)
game_save("JuegoGuardado1.sav")[/gml]

En el caso del slot 2, es lo mismo pero con distintas lineas(El ejemplo es del Slot2)
[gml]Archivo = file_text_open_write("Datos.txt")
file_text_writeln(fileid)
file_text_writeln(fileid)
file_text_write_real(Archivo,objJugador.Salud)
file_text_writeln(fileid)
file_text_write_real(Archivo,objJugador.Municion)
file_text_close(fileid)
game_save("JuegoGuardado2.sav")[/gml]

Para el slot3 es lo mismo, pero hay que agregarles "file_text_writeln", para ubicar los datos en las lineas correctas

CitarY repito, el txt no afecta nada en el juego, es s?lo para leer datos: TODOS se guardan en el propio juego.
Hasta donde yo se, es algo complicado, pero repito quizas exista un DLL, pero no lo conozco XD , sigo recomendando escribir un archivo y encriptarlo (Aunque la opcion de archivos binarios es una alternativa mucho mejor)

Okey,

EDIT:
Wow, no crei qe iba a ser tan largo  :-[
25
Suponiendo que ya pudiste guardar el archivo de texto, te quedaria algo haci (En el caso de que uses un texto plano y no un ini, aunque la idea de master es bastante buena):

Citar10
30
13
23
34
12

Ejemplo, 10 de salud y 30 de municion para la primera partida, y haci consecutivamente hasta la tercera partida.
Para leer estos valores y mostrarlos, se usa, draw_text, okey, en un objeto, en el evento create, tendrias que poner esto:
[gml]ArchivoDeDatos = file_text_open_read("DireccionSecreata/Datos.txt")

Slot1Salud = file_text_read_real(ArchivoDeDatos) //Se usa read REAL, por que es un valor numerico
file_text_readln(ArchivoDeDatos) // Se usa para avanzar una linea hacia abajo, haci se empieza a leer, pero desde la linea siguiente
Slot1Municion = file_text_read_real(ArchivoDeDatos)

file_text_readln(ArchivoDeDatos)
Slot2Salud = file_text_read_real(ArchivoDeDatos)
file_text_readln(ArchivoDeDatos)
Slot2Municion = file_text_read_real(ArchivoDeDatos)

file_text_readln(ArchivoDeDatos)
Slot3Salud = file_text_read_real(ArchivoDeDatos)
file_text_readln(ArchivoDeDatos)
Slot3Municion = file_text_read_real(ArchivoDeDatos)

file_text_close(ArchivoDeDatos) // Se cierra el archivo haci no consume memoria[/gml]
y despues en el evento draw
[gml]
draw_text(x,y,"Slot1 Salud: "+string(Slot1Salud))
draw_text(x,y+16,"Slot1 Municion: "+string(Slot1Municion))
draw_text(x,y+32,"Slot2 Salud: "+string(Slot2Salud))
draw_text(x,y+48,"Slot2 Municion: "+string(Slot2Municion))
draw_text(x,y+64,"Slot3 Salud: "+string(Slot3Salud))
draw_text(x,y+96,"Slot3 Municion: "+string(Slot3Municion))
[/gml]

Finalmente, el draw tendria que dibujar algo haci:

Slot1Salud: 10
Slot1Municion: 30
Slot2Salud: 13
Slot2Municion: 23
Slot3Salud: 34
Slot3Municion: 12


Espero que te sirva  :)


EDIT:
Ahora que leo el post por segunda ves , ahora tengo la duda, si lo que realmente quer?as era "guardar los datos en un archivo" o "leer los archivos". En todo caso avisame y te ayudo.  :-[ , perd?n si conteste equivocadamente. :)
26
Vos quer?s que se represente un objeto, fuera de la ventana del juego?  ???
de ser haci:

Para que un objeto, aparezca fuera del room, basta con poner x=0-256, pero en ese caso no se va a poder ver. Pero hacer que un objeto se represente de forma independiente a la ventana del juego, me parece que no se puede hacer.

Osea, GM solo se limita a dibujar todo el juego dentro de una ventana especifica, fuera de esta, no se puede.

:)
27
Por supuesto que es pocible  :)
te adjunto un peque?o ejemplo, una cosita, mi monitor es de 1440x900, y lo que hice fue ubicar el objeto en la mitad de la pantalla. Obviamente podes cambiarle su posici?n a la que vos quieras.
Arrastra la ventana, y fijate que el objeto siempre va a estar en la misma posici?n (Teniendo en cuenta sus coordenadas con el monitor), por cierto, GM me parece que no actualiza la imagen mientras se arrastra.

XD Oky!
28
Ha decir verdad, no tengo idea
seguramente alguien mas va a quitarte la duda  :-[

Yo me disuelvo  XD
29
Si.si, todo eso es posible, solo que ambos casos son bastantes complicados. La idea de hacer un nivel aleatorio cuando se crea un jugador es algo f?cil en comparaci?n con la idea del registro web. Ya que en la ultima, me parece que es necesario que sepas algo de programaci?n web, as? tambi?n como saber usar bases mysql.  :-[

En s?ntesis, es complicado, pero se puede.  XD
30
De nada loko !  XD