Beruflich Dokumente
Kultur Dokumente
pueden ser los personajes, tanto el jugador como los enemigos, tambin alguna pared, o el
suelo. Estars pensando pero si una pared y un suelo no se mueven como podran tener
acciones? La verdad es que aunque directamente no poseen acciones sobre estos se ejercen
acciones de colisin.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Sounds: Aqu podrs subir una lista de sonidos, o msica la cual utilizaras en el juego.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Backgrounds: Aqu subirs, o crearas las imgenes que sern usados para el fondo de tus
juegos, cuando dije crear lo digo en sentido literal, ya que el game maker posee su propio
editor de imgenes, con el cual podrs crear o editar las imgenes.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Paths: Ac podrs establecer rutas predeterminadas las cuales al colocarlas en algn
personaje este se mover en las coordenadas indicadas en el path, es muy usado para
simular la inteligencia artificial.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Scripts: Esto se usa para lo siguiente, digamos que ya sabes usar el gml, y hay un cdigo el
usaras en varios personaje, para evitar estar copiando y pegando cdigos, lo que haces es
que creas un script digamos scrCode, y lo llamas desde cada personaje scrCode (); como
vez evitas el copiar y pegar.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Fonts: Es usado para cambiar las fuentes de los textos que uses en el juego.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Time Lines: Esto se usa para tiempos, es decir que podrs hacer que cada cierto tiempo se
ejecute una accin distinta, es comnmente usado para crear enemigos, o para hacer que
algn personaje realice unas series de acciones a cada cierto tiempo.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Objects: Aqu se crean los personajes, es decir creas un object, a este object le asignas un
sprite, luego en el objects le das las acciones correspondientes y as quedara listo, el
personaje, para lograr esto hay una serie de eventos, en donde colocaras las acciones, y
varias pestaas para que uses los D&D, o cdigos GML, observa la imagen.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En Name le colocas el nombre a tu personaje, recomiendo que uses como inicial para
cualquier nombre las siglas obj. ejemplo objRobot, esto para mantener organizado mejor
tus recursos.
Como logras ver esta un botn que dice Add Event, en el cual al hacer click se muestra la
pantalla para seleccionar events, y como puedes ver hay varios events, los cuales son:
Create, Destroy, Alarm, Step, Collision, Keyboard, Mouse, Other, Draw, Key press, Key
Release, Cancel. A continuacion te explico cada una.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Crate: Este tiene como funcin ejecutar las acciones de primero, es decir que
ejecuta los cdigos o D&D en este event antes que cualquier otro. Es muy usado para
declarar tus propias variables, o para que se ejecute algn cdigo una sola vez, por que
aunque es ejecutado antes de todo, tan bien se ejecuta al inicio del nivel es decir al
momento en que es cargado la instancia en el room. Por ejemplo si colocara en el event
crate de un auto, move_towards_point (objauto.x, objauto.y, 5) al momento de ser
cargado se dirigira asa el objauto pero no cambiaria su direccin inicial es decir solo
ejecuto el cdigo de perseguir una vez y nada mas
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Destroy: Este event ejecuta las acciones sean de gml o d&d, justo antes de que la
instancia sea destruida. Es comnmente usado para sumar score, y cosas as.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________Event Alarm: Como se puede ver usan
como icono un reloj, eso es por que este event ejecuta las acciones segn el tiempo y
alarm indicadas, a ver explico, este event puedes seleccionar a cada object, 10 alarm, y
claro esta que hay 10 formas de llamar a que se ejecute, primero seleccionamos cuando
deba ejecutarse sea con el d&d alarm en la pestaa Main 2, o en gml escribiendo alarm
[numero de alarm]=tiempo de ejecucin;
Ms adelante se explicara mejor.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Step: Este event resulta que posee 3 fases que son: Begin step, Step, End step.
Begin step: ejecuta las acciones de primero, Step: es la parte media, y End step la parte
final, a ver me explico, los cdigos en cualquiera de los 03 tipos de step se ejecutaran una
y otra vez, pero se pueden realizar comparaciones de las variables desde el Begin step, al
step, y por ultimo el End step, por mi parte en lo particular lo he usado de la siguiente
manera, los cdigos de movimientos (cuando no uso evento de teclas) lo hago en el event
step, y el cambio de sprites en el End step, en el event Begin step, por lo general comparo
vidas, y las acciones que ejecutara cuando no tengan mas, claro hay eventos para esto,
pero esto seria para las vidas que declare para los enemigos.
A ver un ejemplo mas detallado si coloco este cdigo en el event step move_towards_point
(objauto.x, objauto.y, 5) suceder que la instancia que posea ese cdigo perseguir al
objauto a todo momento.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Collision: Este event solo ejecutara las acciones al momento en que se encuentren
los sprites de 2 instancias. En pocas palabras es un event de choque. Yo lo he usado para
las balas que al colisionar contra el enemigo el enemigo se destruya, lo he usado en
plataformas para que pueda caminar sobre los object de suelo, para juegos donde
destruyes al enemigo al caerle encima, y otros como esos.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Keyboard: este event es de acciones de teclado es decir que al presionar en este
botn de event te dar a seleccionar uno de los botones del teclado, y ejecutara las
acciones que coloque en este, cuando se mantenga presionado ese botn del teclado.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Mouse: Este event es de acciones del mouse, al presionar sobre el botn de
seleccin de este event te dar a escoger entre varias de sus opciones como son, cuando el
mouse esta sobre alguna instancia, cuando el mouse deja de estar sobre alguna instancia,
cuando se presiona click sobre alguna instancia, o en global cuando se presiona alguno de
sus botones sobre la pantalla en general.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Other: La verdad en este event al dar click salen una serie de event que puede usar
en tus juegos, yo no los uso, pero cuando me inicie en esto lo asia siempre, explicare los
mas importantes.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Outside room: Este se ejecutara solo cuando la instancia salga de los bordes del room, yo
lo use cuando cree mi primer juego para que al salir por la derecha apareciera a la
izquierda, y viceversa.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Game Start: Este lo usas ms que todo para declarar las vidas de tu personaje o para
declarar variables globales. Ya que este solo ejecuta las acciones al momento en que
inicie el juego.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Game End: Este ejecuta sus acciones un segundo antes de cerrar el juego, yo la verdad la
use en algunos juegos para mostrar la pgina de descarga del juego.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Room Start: Solo ejecuta las acciones al momento en que el room inicia.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Room End: ejecuta las acciones justo antes de salir del room, lo sigo usando para salvar el
juego, como un auto save.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
No more lives: Ejecuta las acciones solo cuando usas la variable lives para las vidas o el
d&d que se encuentra en la pestaa escore con icono de un corazn de nombre Set lives, si
usas alguna de estas para las vidas de tu personaje, esto ejecutara las acciones cuando las
vidas sean igual o menor que 1.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Animations end: Ejecuta las acciones cuando el sprite de esa instancia llega a su ultima
sub imagen, comnmente usado para juegos de peleas, o sprites de un personaje cuando
fllese, ente otros
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
End of Path: si usas un path para ese personaje, con este event puedes establecer que
suceder al culminar la ruta del path.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw: Este es usado para crear acciones de dibujo, es decir para todo lo que sea
dibujado, como texto en pantalla, barras de energas, score, vidas, y otros Es importante
recalcar que cuando usas este evento el object que lo usa no se vera, al menos que uses
este cdigo. draw_sprite_ext (sprite_index, image_index, x, y, image_xscale,
image_yscale, image_angle, image_blend, image_alpha); Si te estas preguntando el Por
qu?, esto se debe a que el game maker por defecto coloca ese cdigo a los objects cuando
son creados y es invisible, pero al usar el event draw ese cdigo es descartado, por lo que
debes indicar que se use de nuevo.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Key Press: muy parecido al event keyboards, solo que este solo ejecutara las acciones al
instante en que es presionada la tecla indicada.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Key Release: Igualmente es un event de teclado, pero solo ejecuta las acciones al instante
en que se suelta una tecla. Es usado mucho para detener el movimiento, o para cambios de
sprite.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ya hemos visto un resumen de la estructura del game maker ahora a lo que nos trajo este
tutorial los D&D y su traduccin y uso en GML.
Iniciare indicando que, al momento en que creas un object justo a la derecha logras per
varias pestaas las cuales son Move, Main 1, Main 2, Control, Score, Draw, hay una ventana
que se muestra solo en la versin paga que es Extra, por que solo es opcional no la
mostrare en este tutorial. Ahora explicare cada una de la siguiente manera, vern una
imagen donde aparecern los D&D, yo les explicare cada D&D de izquierda a derecha e
iniciando desde arriba asa abajo, claro usando el nombre del D&D, el cual pueden ver solo
dejando por un momento el puntero del mouse colocado por encima del D&D, as estarn
claros de que D&D estoy hablando.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
MOVE.
1.- Move Fixed: Es una accin de movimiento, con la cual seleccionas la direccin en la que
deber moverse, y la velocidad, este es comnmente usado para juegos en los event de
teclados, para mover a un personaje.
Sus equivalentes en GML son estos.
Izquierda (left) action_move ("000100000", sp); sp=velocidad por defecto usa 5.
Derecha (Right) action_move("000001000",sp);
Arriba (up) action_move("000000010",sp);
Abajo (Down) action_move("010000000",sp);
Diagonal Arriba izquierda. action_move("000000100",sp);
Diagonal Abajo izquierda. action_move("100000000",sp);
Diagonal Arriba Derecha. action_move("000000001",sp);
Diagonal Abajo Derecha. action_move("001000000",5);
As podrs usarlas sin problemas.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
2.- Set direction a speed motions. Es igualmente una accin de direccin, solo que esta la
usas en grados, en Direction colocas la direccin a mover, y en speed la velocidad, su
equivalente en GML, es direction= dir speed= sp; lo que dir seria la direccin, por si no
conoces los grados a continuacin los indico.
Izquierda (left) 180
Derecha (Right) 0
Arriba (up) 90
Abajo (Down) 270
Diagonal Arriba izquierda. 135
Diagonal Abajo izquierda. 225
Diagonal Arriba Derecha. 45
Diagonal Abajo Derecha. 305
As podrs usarlas sin problemas.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
3.- move towards point: Este hace que la instancia se mueva a la posicin X,Y que indiques
a la velocidad sp, que indiques, su equivalente en gml es move_towards_point(x,y,sp).
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
4.- speed Horizontal: este solo indica movimiento horizontal, el valor positivo de este seria
asa la derecha, y valor negativo asa la izquierda. Su gml es speed, se usa as hspeed=5;
para la derecha; hspeed=-5; para la izquierda.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
5.- Vertical Speed: Este se usa para movimiento vertical, el valor positivo de este es asa
abajo, y el valor negativo de este es asa arriba, su equivalente en gml es vspeed, y se usa
as vspeed=5; cae, vspeed=-5; sube.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
6.- Set Gravity: Este se usa para establecer gravedad, es mayormente usado en juegos de
plataformas, en direction colocas en grados la direccin en la que ejerce la gravedad, y en
gravity la fuerza de gravedad, su equivalente en gml es gravity= y gravity_direction=, lo
comn es que la gravedad tenga valor de 0.7 y en gravity direction 270, o la que necesites,
recuerda es en grados.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
7.- Reverse Horizontal: se usa como accin de rebote horizontal, su equivalente en gml es
hspeed*=-1;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
8.- Reverse Vertical: se usa como accin de rebote vertical, su equivalente en gml es
vspeed*=-1;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
9.- friction: se usa para ralentizar la velocidad en una instancia, comnmente usado en el
event crate, o en collisin, su equivalente en gml es friction=0.1;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
10.- Jump to position: La verdad se usa para indicar que la instancia se transporte a una
nueva coordenada X, Y, su equivalente en gml seria X= coordenada, Y=coordenada,
recuerda que X es todo lo horizontal, y Y todo lo vertical.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
11.- Jump to start: Es usado para que una instancia regrese al punto de partida en ese
room, su equivalente en gml es, X=xstart; Y=ystart;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
12.- Jump to random: Es usado para que una instancia se transporte a alguna posicin
aleatoria del room, su equivalente en gml es move_random (0,0); en 0 colocas el salto.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
13.- Aling to grip: una grilla son los recuadros en los que divides el room, esto se usa para
alinear instancia entre esos recuadros, el comnmente usado en juegos del tipo Maze, o de
Estrategias. Su equivalente en gml es move_snap(16,16); en 16 lo coloque si fuera mi
instancia de 16x16 de resto cambiaria ese valor.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
14.-Wrap Screen: Se usa mucho en el event other en out side room, ya que este lo que
hace es que sea transportado a otro lado del room, en gml seria move_wrap(1,1,1), aunque
se podra definir tomando en cuenta las distancias del room, seria algo como esto, if x<0
{x=room_width} si sale por la izquierda aparece a la derecha. If x>room_width {x=0;} si
sale por le derecha aparece a la izquierda.
If y<0 {y=room_height} si sale por arriba aparece por debajo.
If y>room_height {y=0} si sale por debajo aparece por arriba. En un plataforma se usa
mucho esta ultima para indicar que te as cado, as if y>room_height {lives-=1;
room_restart()} si cae por debajo del room pierde una vida y se reinicia el nivel.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
15 .- Move to contac: Con esto podrs indicar la direccin en la que se mover al estar en
contacto con ese object, es usado en el event de collision, en el plataformas en el event de
collision con el suelo. Su equivalente en gml es move_contact_solid(dir,-1);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
16.- Bounce Againt objects: Es para rebotes, se usa en event de collision, en gml seria
move_bounce_solid (false); claro tambin podras combinar hspeed*=-1; vspeed*=-1; as se
lograra el mismo efecto.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
17.- set path: se usa para llamar a ser ejecutado un path que crearas, su equivalente en
gml es path_start (path0, sp, 2, false); cambia path0 por el titulo del path que creaste y sp
por la velocidad de movimiento.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
18.- En path: Se usa para finalizar el uso del path en esa instancia, en gml seria path_end
().
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
19.- Path position: Se usa para determinar posicin del recorrido del path, en gml seria
path_position=0.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
20.- Path Speed: Se usa para determinar la velocidad del path, es usado en el event End
path de others. Para cambios en la velocidad, y el algunos casos en event de colisin, en
gml seria as path_speed=sp.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
21- Step towards: Es parecido a move towards point, en gml seria, mp_linear_step
(x,y,sp,0)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
22.- Step Avoiding: Es parecido al anterior pero esta vez esquivara los objetos en su
camino, en gml seria mp_potential_step(x,y,sp,1)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ya con esto culminamos con la pestaa move de los D&D, ahora pasaremos la siguiente
pestaa Main 1.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
MAIN1.
Como vez he numerado cada uno de los d&d de esta pestaa, que ahora explico.
1.- Crate instante: Este d&d es usado para crear una instancia en las coordenadas X,Y que
indiques, como se que va siendo hora de explicar lo que es instancia, como ya sabes que es
un object te dir que la instancias son los object una vez colocados dentro del room. As
que las instancias son partes de los objects. Para que se podra usar, uf la verdad es que
siempre se usa al crear disparos, ya que estos solo son la creacin de una instancia del tipo
bala, tambin para enemigos, puertas, llaves, poderes, y muchas cosas mas
En gml seria instante_create(x,y,obj) donde obj es el object del cual se crea la instancia.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
2.- Crate Moving: la verdad aunque nunca le he dado uso, se usa para mover una instancia
que a sido creada. En gml seria ver la id de la instancia creada y luego usar un cdigo de
movimiento para la instancia de esa ID.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
3.- Crate random: Este d&d lo usas para seleccionar 4 distintas instancias a crear y solo se
crea una siendo escogida entre las 4, en gml seria as instance_create(x, y, choose (int1,
int2, int3, int4)) int es el nombre del object de la cual quieres crea instancias.
Esto lo he usado para bonus, para que al destruir algo salga al azar sea un arma, dinero,
comida, etc.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
4.- Change instance: Se usa para cambiar la instancia e un object por otra tipo de instancia
de cualquier otro object, podras usarlos para transformaciones de tus personajes o
enemigos. En gml es as instance_change (obj, 1).
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
5.-Destroy instance: Se usa para destruir una instancia (no al object), en gml seria
instance_destroy();
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
6.- Destroy at position: Se usa bsicamente para lo mismo que destroy instance, solo que
ac destruyes la instancia en la posicin X,Y que indicas. En gml seria, position_destroy
(x,y)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
7.- Change Sprite: se usa para cambiar el sprite a tu personaje, en gml seria
sprite_index=spr en spr colocas el nombre del sprite.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
8.- Transform sprite: se usa para cambiar el tamao del sprite durante el juego, e gml
seria image_xscale, image_yscale. (Solo si tienes la versin paga del programa)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
10.- play sound; se usa para reproducir sonidos durante el juego. En gml es sound_play
(snd); pero para msicas usa sound_loop(snd); en snd colocas el nombre del sonido a usar.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
11.- Stop Sound: Se usa para detener algn sonido o msica. En gml es asi sound_stop(snd)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
12.- Check sound: Se usa para verificar si existe en la carpeta de sounds el sonido a
reproducir. En gml es as. If sound_exists(snd) {sound_play(snd)} es para evitar errores.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
13.- Previous room: Con esto regresas al room anterior. En gml room_goto_previous()
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
14.-. Next room: Con esto vas al siguiente room. En gml room_goto_next()
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
15.- Restart room: Con este reinicias el actual room. En gml room_restart()
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
16.- Different room: Con esto vas al room que elijas. En gml room_goto(rm) rm seria el
nombre del room al que ira.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
17.- Check previous: se usa para verificar si existe un room antes del actual. En gml seria if
room_exists(previous) {room_goto_previous();}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
18.- Check next: se usa para verificar si existe un room siguiente al actual. En gml seria if
room_exists(next) {room_goto_next();}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Con esto hemos terminado la ventana Main 1, ahora aprenderemos sobre la ventana Main2.
Por lo pronto aca esta la imagen de guia.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
MAIN2.
1.- Set alarm: Aqu podrs escoger cual de los event alarm activa en cuanto tiempo,
recuerda que para esto el object debe estar en movimiento aunque hay un metodo en gml
para que no sea as, al seleccionar este event selecciona el event de alarm que activara,
coloca el tiempo en number steps, y marca la casilla relative. En gml seria alarm [ea]=tma;
ea=event alarm por activar, tma tiempo. Para que esto sea automtico salo as alarm [0]=
1*room_speed; as se descontara el tiempo aunque el object no se mueva.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
2.- sleep: Esto se usa para paralizar todas las funciones del juego durante el tiempo que
necesites. En gml seria sleep(tm)tm= tiempo.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
3.- Set time line: se usa para llamar a una time line que crearas con anterioridad. En gml
seria timeline_index=titulo_de_timeline.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
4.-time line position: la verdad es mas usado para indicar la posicin en la que debera
iniciar la time line. En gml seria timeline_position=4.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
5.-Display message: Se usa para que aparesca un cuadro de dialogo, con el mensaje escrito
en este. En gml es show_message("mensaje")
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
7.- Restart Game: Se usa para que reinicie el juego, lo podras usar cuando ya no tenga
ms vidas el personaje. En gml es as game_restart();
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
10.-Load Game: se usa para leer la partida guardada, yo lo uso en el men para la opcin
Con esto terminamos con la pestaa Main2, ahora mostrare la ventana Control, esta es
quizs la mas importante, presta mucha atencin.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
CONTROL.
1.-Check Empty: se usa para verificar si la posicin X,Y indicadas estn libres, es decir si no
hay instancias. En gml seria if place_free(x,y){} por ejemplo para mover un personaje asa
adelante sin fallas, if place_free(x+5,y){x+=5;} esto se usara en event de teclado, en los
plataformas se usa para verificar si hay o no suelo as, if place_free(x,y+1) {acciones}.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
2.-Check Collision: La verdad es el uso invertido de la anterior, ya que en la anterior
verificbamos si estaba libre ejecuta las acciones, en esta si no esta libre ejecuta las
acciones. En gml seria if not place_free(x,y){acciones}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
3.-Check Object: Es parecido a la anterior pero esta verifica si en las coordenadas X,Y
indicadas colisiona con el obj indicado. En gml seria if place_meeting(x,y,obj){}.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
4.-Test instance acount: Se usa para contar y ejecutar las acciones cuando quede en el
room actual la cantidad de instancias indicadas, muy usado en los clasicos juegos de naves
para pasar de nivel al eliminar todas las naves. En gml seria if instance_number(obj)=5{}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
5.- Test Chage: se usa para que se ejecute una accin en un tiempo aleatorio. En gml seria
if ceil(random(5))=true{acciones}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
6.- Check Question: Se usa para preguntar algo al jugador. En gml seria show_question
("aeiou") {}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
7.-Test Expresin: La verdad esto solo se usa para iniciar una condicin en if. En gml es if
(condicin) {accin} si se cumple la condicin se ejecuta la accin.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
8.- Check Mouse: La verdad este d&d es para usar eventos de mouse. En gml if
mouse_check_button(mb_left){}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
9.- Check Grip: devuelve trae si la instancia esta alineada con la grip indicadas. En gml if
place_snapped(,){}.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
10.- Start Block: se usa para encerrar un bloque de acciones manteniendo organizado tus
cdigos, en gml es solo el smbolo {
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
11.- Else: Esto seria como decir (de lo contrario as esto) en pocas palabras luego de que se
compara una condicin si esta es cierta, se realiza esa accin, pero si no fuera cierta la
condicin, no sucedera nada, aqu es donde entra esto, lo colocas al final de los cdigos, y
luego una segunda accin, lo que quedara as. Si se cumple esta condicin, ejecuta esta
accin Else ejecutas esta otra accin. En gml es simplemente else.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
12.-Exit Event: indica el fin del cdigo o script. En gml exit.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
13.- End Block: se usa para culminar un bloque de acciones manteniendo organizado tus
cdigos, en gml es solo el smbolo}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
14.-Repeat: se usa para que una lnea de cdigo se repita tantas veces como lo hinques. En
gml es asi repeat(3).
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
15.-Call event parent: Cuando creas un object este tiene una casilla para seleccionar un
parent, el parent seria el pare de ese object y ejecutaria los event del object parent
(padre) seleccionado, pero si usas un event igual se anul el del parent y usa el actual, con
esto podrias llamar ese event del parent. En gml es. event_inherited()
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
16.- Execute Code: Bueno as visto, que se puede hacer en gml todo lo que en d&d y mucho
mas pero Dnde colocar los codigos? Este d&d es precisamente esto, al dar click, abre
una hoja de documento donde podrs colocar los cdigos del gml, para que sean
ejecutados.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
17.- Execute Script: hablamos de que si usas un cdigo en varios personajes, lo mejor era
colocar un script y llamarlo. Precisamente para esto se usa, para llamar al script.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
18.- Coment: cuando usas d&d quizs quieras colocar un comentario para saber que ara en
ese event, o lo que planeaste lograr, bueno esto es precisamente para dejar un
comentario. Cuando estas en Execute code. Para escribir comentarios usas // y lo que
escribas en esa lnea despus de // ser tomado como solo texto, comentario.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
SCORE.
1.-Set Score: Primero debers declarar el score, hazlo en el primer room en el crate de
algn object, escribes 1 y marcas relative. Como ya as comprendido se usa para el score,
para sumar score escribes +1 y marcas relative, y para restart -1, y marcas relative. En gml
seria score=1; para sumar score+=1; para restar score-=1; se usa as en todo lo de la
pestaa score.
En d&d: +1 Marca Relative, -1 Marca Relative. En GML: +=1; suma, -=1; restar.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
2- Test Score: se usa para verificar si el escore esta e cierta cantidad suceda algo, es para
la condicin, en gml es if score=
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
3.-Draw Score: Esto se usa en el event draw, y es para que se muestre en pantalla el score.
En gml es asi draw_text(x,y,Score: +string(score))
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
4.-Hight score: Esto se usa para crear una tabla de hight score, es decir de las mejores
puntuaciones. Yo lo uso en D&D cuando lo uso, pero en gml es as highscore_show(var)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
5.- Clear hight Score: Esto es para borrar la tabla de hight score. En gml es as
highscore_clear()
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
6.- Set lives: Esto es para las vidas, y se usa de forma similar al Set score.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
7.- Test Lives: Se usa para verificar la cantidad de vidas es decir como condicin. En gml es
as if lives=
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
8.-Draw Life: Se usa en el event draw y es para dibujar las cantidad de vidas en pantalla,
en gml seria draw_text(x,y,Lives: +string(lives))
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
9.- Draw life image: se usa en event draw, para mostrar la cantidad de vidas, pero en vez
de letras y numeros, se mostrara una imagen de la seleccionada por cda vida, muy util
para colocar corazones como vidas. En gml se ase asi.
var a; a=0 repeat(lives){ draw_sprite(sprvidas,0,view_xview+a,view_yview); a+=16;}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
10.- Set health: Se usa para la barra de energa, y se usa de manera similar a set lives, y
set score. En gml seria, health=
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
11.-Test Health: Se usa para verificar como condicin si la energa (health) esta a cierto
punto. En gml es if health=
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
12.-Draw Health.- Se usa en el event draw. Y es para mostrar una barra de vidas, del ancho
desde x1 hasta x2, y de alto desde y1 hasta y2. en gml seria.
draw_healthbar(x,y,x2,y2,health,c_color,c_color,c_color,0,true,true);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
13.- Score Caption: Esto es para cuando ejecutas el juego en modo ventana, puedas ver en
el borde, el score vidas y health.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Con esto terminamos la ventana score, ahora por ultimo vamos con la ventana Draw.
DRAW.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
2.- Draw Background: Se usa para dubijr una imagen de fondo del room. En gml seria
draw_background(back,x,y)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
3.- Draw text: Se usa para dibuja un texto en la pantalla. En gml seria draw_text(x,y,).
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
4.- Draw Rectagule: Se usa para dibujar un rectngulo, es muy utilizado para los juegos
tactic para que veas un rectngulo al seleccionar los personajes a mover, o para
rectngulos de textos de dilogos, entre otras cosas. En gml es. draw_rectangle
(x,y,x2,y2,1)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
5.- Draw Ellipse: Se usa para dibujar un crculo. Muy usado en los juegos de estrategia para
mostrar el radio de alcance se las armas. En gml seria draw_ellipse(x,y,x2,y2,1)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
6.- Draw Line: Se usa para dibujar una linea. La verdad nunca lo he usado. En gml seria
draw_line(x,y,x2,y2)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
7.- Draw Arroz: Se usa para dibujar una Flecha. La verdad tampoco lo he usado nunca. En
gml seria draw_arrow(x,y,x2,y2,12)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
8.- Set color: Se usa para cambiar el color de las fuentes, originalmente lo uso para
cambiar el color del texto en pantalla. En gml seria draw_get_color(c_color)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
9.- Set font: Se usa para escoger una de las fuentes creadas. En gml seria draw_set_font
(fnt) fnt seria la fuente.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
10.- Set full screen: Se usa para escoger si se debe ejecutar el juego en modo ventana, o
en full pantalla. En gml seria. Para full pantalla window_set_fullscreen(1) para ventana
cambia el 1 por un 0.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
3D: ms que un tipo de juego, se habla aca de juegos con cierta profundidad queda un
toque de realismo.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
RPG: Estos se crean en vista isomtrica, o 3D, la idea de estos es evolvente en su cuento,
donde tendrs que encontrar llaves, mapas, y muchas herramientas para pasar de nivel, as
como tambin derrotar a los enemigos.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Plataformas: Son todos estos juegos donde la base es la habilidad para controlar al
personaje, segn la fsica del movimiento y la gravedad, as como los juegos del famoso
Mario Br y otros de ese estilo, ya sea que disparen, o solo eliminen el enemigo
cayndoles encima, siempre que tengas que saltar demasiado es un plataformas.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Shooter: son juegos aunque de pocos movimientos, el juego se basa estrictamente en los
disparos, o disparas o pierdes, no puedes ganar de otra manera, por lo general estos juegos
suelen hacerse en 3D, o en cenital por lo general.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Estrategia: Estos juegos tienen por lo general el mejorar el score, aunque algunos poseen
su cuento y un final, se basan en idear la mejor manera de hacer tu jugada para poder
ganar, o mejorar tu score, en estos encontramos, los tipo, Defender, Puzzle
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Tactis: Estos se crean por lo general en cenital, o en isometricos, y son aquellos donde
seleccionas ejercitos, para enviarlos a atacar, aldeanos para constuir fortalezas, y cosas
como esas, el estilo es idear una tactica de combate, que funcione para derrotar los
enemigos.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Espero lo disfrutes
Pasemos a la siguiente y continuemos creando videojuegos cada ves mas dificiles de crear
de manera que cuando culminemos podamos crear buenos videojuegos en 2D y 3D.
Hola , Quiero mostrar de una manera simple como crear tus juegos. Este tutorial
veras algunas de las acciones D&D. y veras como debes crear tu juego paso a paso,
incluso trabajaremos en un juegos muy sencillo pero divertido, y de ah podrs tener el
conocimiento de cmo crear tus juegos, poco a poco explicaremos paso a paso la
creacion de diversos juegos.
Vistanos en www.tutoek.tk
Demos click tal cual indica la imagen. Es mejor aun si lo registras por que tendrs ms
opciones, pero en este tutorial trabajaremos con la versin Lite (no registrada)
Antes de iniciar a crear video juegos, hablaremos de los tipos de juegos que se pueden
crear, bueno el Game Maker, es una herramienta bastante poderoso por as decirlo,
este posee un lenguaje interno que se conoce como GML (Cdigos, script), y una gran
cantidad de D&D (los cuadritos que se ven al editar un object), este lenguaje esta
creado pensando en que todos los usuarios puedan aprender a usarlo bastante fcil.
Aunque con el GML, se pueden crear los juegos que desees, debes recordar que un
juego se compone de: Programacin (GML), Grficos, Sonidos/Msica. En algunos casos
tambin tienen un buen guin, y diseo. Pero como hacer un juego ups que difcil.
No para nada, solo es cuestin de organizarse, Primero tienes que tener claro el tipo
de juego que deseas hacer, entre estos estn:
Plataformas: donde saltas corres etc.
Los Shooter: juego donde es necesario el disparar o no podran jugarse.
Los Estrategias: estos se basan en crear un ambiente enigmtico, donde el jugador
deber idear la mejor para ganar.
Los RPG: Estos son muy famosos pero a la vez muy complicados, ya que debers tener
altos conocimientos en el GML, para poder crearlos, la idea de estos juegos es contar
una historia, donde el personaje la vive poco a poco, por lo general estos juegos los
mismos niveles son visitados una y otra vez ya que se necesitara una llave para abrir
una puerta que mas adelante se logra encontrar, por eso regresa en fin son juegos que
deben crearse con sumo cuidado, para que tengan xito.
Sound: es el sonido de tu juego los sonidos de efecto especiales tales como disparos
explosiones derrumbes. Y hasta la msica del juego.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Background: son las imgenes que usaras para el fondo de cada una de las pantallas de
tu juego es decir cada uno de los niveles de tu juego.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Paths: estos te permite crearle a un personaje un movimiento siguiendo una ruta la
cual especificaras segn las coordenadas X, Y.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Scripts: aqu podrs colocar un listado de cdigos el cual uses en varios personajes los
colocas aqu as no tendrs que programarlos constantemente.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
____________________________________________
Crate: Este event ejecuta las acciones que coloques en el solo cuando la instancia es
creada en el juego.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Destroy: Este event ejecuta las acciones justamente cuando esta a punto de ser
destruida una instancia (las instancia son los object cuando se colocan en el room)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Alarm: Este event ejecuta la accin cuando la alarma [] colocada llegue 0 es decir
primero debers haber colocado un D&D de alarm en el event crate y sealar un
nmero de fps y marcar Relative as cuando esa instancia se mueva ese nmero de fps
se ejecutara la accin del event Alarm.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Step. Este event lee constantemente las acciones que coloques en el.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Collision: Este event se ejecuta cuando los dos object encuentran sus sprites en la
misma posicin.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Keyboard: Este event sirve para colocar funcin a una tecla es decir puedes colocas
por ejemplo que la tecla A mueva al personaje a la izquierda o derecha como tu
decidas.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Mouse: Este event sirve para colocar funcin a un botn del Mouse es decir puedes
colocas por ejemplo que la tecla A mueva al personaje a la izquierda o derecha como
t decidas.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Other: En este botn encontraras varios event de los cuales los 4 ms usados.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Outside Room: Este event ejecuta su accin cuanto la instancia sale de lo bordes del
cuarto.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Game Start: Este event ejecuta su accin cuando inicia el juego.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
No More Lives: Este ejecuta su accin cuando el D&D lives llegue a 0.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
No more Health: Este ejecuta su accin cuando el D&D Health llegue 0
Ya conocemos los D&D Acciones que se usaran en nuestro juego ahora lo crearemos lo
primero usando alguna herramienta de dibujo creamos 3 sprites el spr_nave, el
spr_bala, y el spr_enemigo.
Recuerda guardarlos en formato PNG o GIF.
Ya tenemos los sprites ahora a agregarlos. Demos click con el botn segundario del
Mouse sobre donde dice Sprites y click en crate sprite, ahora seleccionamos uno de
los sprite y le colocamos su nombre. (Recuerda no usar espacios separar con _)
Ya hemos creado los sprites.
Ahora creemos la msica y el sonido del disparo. Ya el game maker trae una lista de
sonido que puedes usar. De igual forma demos click con el botn segundario del Mouse
sobre Sound y click en crate sound, una vez escogidos el sound_disparo y el
sound_musica.
Ahora creemos un background de igual manera ya el game maker trae unos background
que puedes escoger para este juego escoge el de space (espacio) recuerda es un juego
de naves.
Ahora creemos los object. De igual forma click segundario en object y click en crate
object. Inmediatamente abrir una ventana para que le sean colocados las acciones y
event. Igual a esta.
.
A este object no le agregaremos sprite y le llamaremos obj_control.
Luego otro obj_enemigo, el obj_nave y el obj_bala.
Empezaremos por editar el obj_control. (Para editar cualquiera solo dale click con el
botn segundario del Mouse y click en properties.
Al obj_control primero click en add event y click en step luego agregaremos D&D a este
event en la pestaa control click con el segundario en instante count.
En object seleccionamos el obj_enemigo lo dems lo dejamos tal cual, ahora click en
start block ahora en la pestaa Main2 daremos click segundario sobre display
message y escribiremos Felicitaciones. Ahora daremos click segundario en la pestaa
score daremos click segundario en set lives y en donde dice [new lives] colocaremos +1
y marcaremos el recuadro Relative.
Ahora en la pestaa main1 daremos click con el segundario en
Next room. Y ahora en la pestaa control daremos click en block.
Debe verse el event step as.
.
He recibido varios correos de personas solicitando que creara un tutorial para realizar un
Arkanoid, bueno aca esta el tutorial.
He agregado informacion extra como es, el agoritmo que se debe seguir al iniciar la
programacion de un juego, y el utilizar una herramienta del game maker
que se llama el modo debuger. Esta modalidad "debuger" significa "eliminar buscar
errores" recuerden un bug es un error que se nos paso por alto al momento de crear el
juego, en muchos casos un bug podria afectar tanto el juego, que este simplemente no
podria jugarse.
Con este tutorial aprenderan a crear un juego estilo Arkanoid, ademas de aprender a usar
el modo Debuger del game maker.
Yo usare para crear este juego el Game maker 8.0, pero el Gml usado aqui funciona igual
en el game maker desde la version 6. 0 en adelante-.
Lo primero que aremos ser organizar que juego deseamos crear, esta la tenemos fcil
pues queremos crear un juego estilo Arkanoid. Pero Qu deseamos que nuestro juego
tenga? Lo recomendable para esto es que crees un guin tcnico, sea un documento donde
especifiques que suceder en tu juego, con que teclas se jugara, sistema de vidas, sistema
de puntaje, cantidad de niveles, y cantidad de modalidad de jugadores, sea para un solo
jugador, o para un jugador vs Computers, o para un jugador vs otro jugador.
O un juego que contenga todas las anteriores.
Lo que are yo ser un estilo Arkanoid con todas las opciones de jugadores anteriores.
Lo primero que aremos es crear una carpeta con el nombre de nuestro Arkanoid.
En esta carpeta creamos los recursos a usar, creando as, un documento llamado Guin
tcnico o tutorial, que seria algo como este documento, adems crearemos 4 carpetas las
cuales nombraremos as, Sprites, Backgrounds, Sonidos, Msica.
Fig.
Creando Sprites.
Usaremos cualquier programa de dibujos para crear nuestros sprites. Y los guardaremos
dentro de nuestra carpeta sprites, necesitare que creen para este juego los siguientes
sprites, un cuadro de 16x16 lo nombramos Pared, un rectngulo de 16x64 lo nombramos
Barra, un circulo de 16x16 lo nombramos Bola, un rectngulo de 16x32 lo llamamos
ladrillo. Todos de color Amarillo Claro.
Yo are algo especial para mostrarles como usar al cargar sprites llamada Create From
Strip la cual podemos crear todos los sprites en un solo documento o un solo dibujo,
claro separado por recuadros y el mismo Game maker se encargara de recortarlos con esta
funcin.
Como vern en la figura ac estn pero los he colocado todos en un solo cuadro de dibujo,
ahora vern como usando la fusin Create From Strip podrn cortarlos usando el Game
maker, lo hago as por que muchos buscan sprites por Internet, y estos vienen en un solo
cuadro de dibujo como este caso y luego no saben como crtalos, y pierden mucho tiempo
cortando cada cuadro con una herramienta de dibujo, cuando el Game maker lo hace en un
abrir y cerrar de ojos.
Creamos un sprite este sera el sprite pared, para este tomaremos el cuadro de 16x16
recortandolo con la funcion Create From Strip pero como?, primero click derecho en
sprite, y click izq, en create sprite, ahora click en Edit Sprite Click en File y click en
Create From Strip Como muestra la imagen.
Ahora veremos una ventana en donde podremos recortar nuestros sprites.
Ahora como vieron en la imagen, lo nico que hacen es escoger las imgenes a usar y click
en Ok. Este mismo mtodo usare para recortar todos mis sprites.
Puedes usar el mtodo tradicional de crearlos por separado, simplemente quise explicar un
mtodo que se que es importante que aprendan a usar.
Creando object.
Simplemente damos click derecho en Objects, click izq en Create objects le colocamos el
nombre luego el sprite que corresponde y damos click en OK.
Crearemos los siguientes objects.
objCreditos Sin sprite
objMenu sin sprite.
objParedV con el esprite cuadrado de 16x16
objParedH con el sprite cuadrado de 16x16.
objBola con el sprite de circular de 16x16.
objLadrillo con el sprite rectangular de 32x16.
objBarraPlayer Con el sprite rectangular de 64x16.
objBarraCpu Con el sprite rectangular de 64x16.
objBarraPlayer2 Con el sprite Rectangular de 64x16.
objPoder con el sprite circular de 16x16.
Ya tenemos los object ahora a darle vida al juego.
Para el objCreditos
Event create
vspeed=-2;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event key press Enter
game_restart();
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw
draw_text(x,y,Creador. #WWW.TUTOEK.TK #Gracias por seguir el tutorial. ##Press
Enter)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Para el objMenu
Event create
lives=3; //vidas o bolas o turnos para jugar si se le va la bola en modo 1 jugador.
global.cpu=false; //indicara si esta activado el modo vs computer.
global.player2=false; //indica si esta activado el modo vs player2.
menu=0; //para saber la seleccin del menu-.
score=0; //para el score osea puntaje.
sound_play(sndMusica); //suene la musica.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event key press Enter.
switch(menu) //verifica el valor de la variable menu
{
case 0: global.cpu=false; global.player2=false; room_goto_next(); break; //1 player.
case 1: global.cpu=true; global.player2=false; room_goto_next(); break; //vs CPU
case 2: global.cpu=false; global.player2=true; room_goto_next(); break; //vs player2
case 3: show_info(); break; //muestra la informacin del juego.
}
//al presionar Enter segn la seleccin ejecutara esas acciones.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event draw
switch(menu) //verifica el valor de la variable menu
{
case 0: draw_text(x,y,Un Jugador) break; //1 player.
case 1: draw_text(x,y,Vs CPU) break; //vs CPU
case 2: draw_text(x,y,2 Jugadores) break; //vs player2
case 3: draw_text(x,y,Informacion) break; //muestra la informacin del juego.
}
draw_text(x,y+32,Press Left or Right #Enter start)
//para que diga que se presione izquierda o derecha para seleccionar el menu.
//Y Enter para iniciar.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event key press Left
if menu >0
{menu-=1;}
else
{menu=3;}
Para el objParedV
Marcamos la casilla Solid. Y listo.
Para el objParedH
Marcamos la Casilla Solid y listo.
Para el objBola
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En su Event Create
Vamos a la pestaa control seleccionamos con un click en Execute code y escribiremos,
es siguiente codigo.
image_speed=0; //para que no haga cambio de subimagenes.
image_blend=c_blue; //aqu escogemos el color de nuestra bola.
direction=(random(360)); //saldra al iniciar en cualquier direccion.
speed=2; //iniciara moviendose a 2 pxl por step, osea la velocidad.
alarm[0]=10*room_speed; //esto ara que cada 10 segundos se active el event alarm 0.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En su Event Alarm 0
alarm[0]=10*room_speed; //para que se repita cada 10 segundos el event alarm 0.
speed+=0.5; //aumentara la velocidad
//Esto ara que a cada 10 segundos la bola aumente la velocidad.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En su Event Collision contra el objLadrillo
if place_meeting(x-4,y-1,objLadrillo) //si le pega por el borde derecho
{direction=40;}
else
if place_meeting(x+4,y-1,objLadrillo) //si le pega por el borde izquierdo
{direction=130;}
else
{vspeed*=-1;} //si rebota por otro lado.
sound_play(sndLadrillo);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event de collision contra el objBarraPlayer
if place_meeting(x-4,y-1, objBarraPlayer) //si le pega por el borde derecho
{direction=45;}
else
if place_meeting(x+4,y-1, objBarraPlayer) //si le pega por el borde izquierdo
{direction=135;}
else
{vspeed*=-1;} //si rebota por otro lado.
sound_play(sndRebote);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event collision contra el objBarraPlayer2
if place_meeting(x-4,y+1, objBarraPlayer2) //si le pega por el borde derecho
{direction=300;}
else
if place_meeting(x+4,y+1, objBarraPlayer2) //si le pega por el borde izquierdo
{direction=220;}
else
{vspeed*=-1;} //si rebota por otro lado
sound_play(sndRebote);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event collision contra el objBarraCpu
if place_meeting(x-4,y+1, objBarraCpu) //si le pega por el borde derecho
{direction=300;}
else
if place_meeting(x+4,y+1, objBarraCpu) //si le pega por el borde izquierdo
{direction=220;}
else
{vspeed*=-1;} //si rebota por otro lado.
sound_play(sndRebote);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Collision Contra objParedV
hspeed*=-1; //cambia la direccion horizontal invertida. Estos se usan para los lados.
sound_play(sndRebote);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Collision Contra objParedH
vspeed*=-1; //cambia la direccion vertical.
sound_play(sndRebote);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event step
if y < 0 //si sale por arriba esto para vs placer y vs cpu.
{
if global.cpu
{show_message("Ganaste #Felicidadez"); highscore_show(score) game_restart();}
else
if global.player2
{show_message("Gana el jugador 1"); highscore_show(score) game_restart();}
else
{y=ystart; vspeed=3;}
}
//si esta activo el CPU y sale por arriba gana el jugador 1 igual pasa
//si esta activo el player2.
if y > room_height //si sale por abajo.
{
if global.cpu
{show_message("Gano la Computadora"); highscore_show(score) game_restart();}
else
if global.player2
{show_message("Gana el jugador 2"); highscore_show(score) game_restart();}
else
if lives > 1
{lives-=1; y=ystart; vspeed=-3;}
else
{highscore_show(score) game_restart();}
}
//esto es casi lo mismo pero en este caso ganarian o la CPU o el player2.
Para el obj_Ladrillo
Primero marco la casilla solid.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event create
image_speed=0; //sin cambio de subimagen
image_blend=choose(c_white,c_aqua,c_silver,c_red,c_blue,c_black,c_green);
//esto es para que el color de los ladrillos sea aleatorio.
crea=0; //esto es para ver si se crea o no el objPoder
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Collision contra el objBola
crea=round(random(10))
//de manera aleatoria devuelve un numero entre 1 al 10.
if crea=5
{instance_create(x,y,objPoder)}
//solo di fuera 5 el resultado crea el objPoder
Ahora el objBarraPlayer
Primero marco la pestaa solid.
Event Create
sound_loop(sndMusica);
//esto es para el modo vs
if global.cpu
{
if instance_exists(objParedH)
{with(objParedH){instance_destroy();}}
if !instance_exists(objBarraCpu)
{instance_create(room_width/2,16,objBarraCpu)}
}
//si esta en modo vs cpu Destruye la pared de arriba
//y se crea la barra de la cpu arriba-.
if global.player2
{
if instance_exists(objParedH)
{with(objParedH){instance_destroy();}}
if !instance_exists(objBarraPlayer2)
{instance_create(room_width/2,16,objBarraPlayer2)}
}
//algo parecido pero la barra que se crea es la del player2.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Left
if x > 16
{x-=5;}
//si esta despegado del borde izquierdo puede moverse a la izq
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Right
if x < room_width- sprite_width
{x+=5;}
//si esta alejado del borde derecho podra moverse asia el.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event collision contra objPoder
if image_xscale <3
{image_xscale+=0.2}
//la barra crece si coges el poder
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event draw.
draw_sprite_ext
(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,imag
e_alpha)
//este codigo es obligado al usar draw o no se vera el sprite de nuestro object.
//ahora el codigo para que se vea las vidas y el score.
if !global.cpu and !global.player2
{
draw_text(16,16,"score: "+string(score))
draw_text(256,16,"Bolas: "+string(lives))
}
//coloque que verificara primero si no esta en modo vs
//ya que en modo vs no es importante el score y no se juega por vidas.
//con esto listo el player.
Ahora el objBarraCpu
Ahora el objPoder.
Event create
image_speed=0; //para que no haga cambio de subimagenes.
direction=random(360); speed=3; //direccion aleatoria velocidad 3.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event end step
image_blend=choose(c_red,c_blue,c_green,c_yellow);
//Con esto la bola cambiara de color intermitente.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event collision objParedV
hspeed*=-1; //cambia la direccion horizontal invertida. Estos se usan para los lados.
sound_play(sndRebote);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Collision objParedH
vspeed*=-1; //cambia la direccion vertical.
sound_play(sndRebote);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event collision objBarraPlayer y objBarraCpu y objBarraPlayer2 y outsider room.
En ese room lo nico que haces es colocar el objCreditos abajo un poco a la izquierda.
Listo terminado el juego, pero hay que probarlo para eso usaremos el modo Debuger.
Lo unico que debes hacer es presionar F6, o dar click en el triangulo Rojo.
Al correrlo en este modo veras durante la barra de carga que dice Loading y el recurso
que esta cargando, de esa manera si se colgara o hubiera un error sabria cual recurso esta
afectando y lo quitaria.
Una vez ejecutado el juego en modo Debug, vez una ventana la cual te permite ver Tool
luego click en show, las variables globales, y las locales de algun object, como estan
trabajando, y asi sabes cual es la falla en tu juego.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Una ves debugeado nuestro juego, y ya listo pasamos a click derecho en Game
information y ah escribimos la informacin de nuestro juego osea nombre del juego
como jugarlo etc.
Ahora click derecho en Global Setting Game Des marcamos la casilla Display Cursor
eso evita que se vea la flecha del Mouse.
Ya esta listo ahora solo nos queda dar click en File y en Save As para guardar el editable
y asi mejorarlo mas adelante. Y cuando este perfectamente como queramos que debe
estar, click en File y click en Create Executable para crear el juego y distribuirlo.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Background.
Ahora daremos click derecho en Background, y click en Crate Background . Luego click
en el botn Edit Background , ahora crearemos un fondo para el juego. En este fondo
crearemos las distintas plataformas en donde caminara y debe saltar nuestro personaje,
crea el cielo nubes y dems ahora crearemos los object los primordiales para el juego
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Explico el cdigo.
Si esta libre la posicin normal de X y la de Y un pxel mas abajo la gravedad ser
establecida a 0.7 de lo contrario ser igual a 0;
Si la velocidad vertical es mayor a 14 esta ser igual a 14 (para limitar la velocidad
mximo de caida).
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el mismo Event Step. Coloca este codigo.
if y>room_height {show_message("No Cai"); room_restart();}
Explico el codigo.
lo que hace es verificar si la posicion de tu obj_jugador a pasado la parte mas baja del
room saliendo
de este, (implica que te casite de las plataformas). saldra un mensage que dira No Cai, y se
reiniciara el Room.
Explico el cdigo.
Si no esta libre la posicin normal de X y la posicin de Y un pxel mas abajo, se mover
verticalmente asa arriba a 16 pxeles.
(con esto tenemos claro que place_free(x,y) verifica si esta libre las posiciones X,Y, los
pixeles que sumemos o restemos a estos.
como X es comun de derecha Y es comun asia abajo por lo que un valor negativo seria asia
arriba.)
vspeed indica la velocidad vertical se toma en cuenta como si fuera un valor de Y, solo que
este una vez fijado la velocidad no detendra
el movimiento hasta que se le indique lo contrario. en este caso el impulso del movimiento
vspeed es negativo diciendo que debera moverse
asia arriba 16 pixeles por step, que detendra este impulso? lo detendra la gravedad que
establecimos.
As se ve el object Jugador .
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Room
Ahora demos click derecho en Rooms y click en crate room .
En la pestaa Background marca la casilla Stretch . Y Selecciona la imagen de fondo que
as creado. Ahora en la pestaa Object , Escoge el Object pis o y colcalo inicial mente
alrededor del Room enmarcndolo excepto en la parte de abajo donde si cae perder. Una
vez hecho eso coloca el object piso sobre los lugares en los que podr caminar el Jugador,
ahora selecciona el object jugador y colcalo en el room.
Ya con esto el juego estar listo para jugarse. (Solo falta imaginacin para crear enemigos
los cuales podras ayudarte mucho del uso del Path para sus movimientos.
As se vera el room con los objetos agregados.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Escribo en X 192 y Y lo dejo en 0, le damos al boton Add 2 veces.
Escribo en X 0 y en Y 0, y le damos a Add clic una vez.
Y clic en el indicador verde de OK, para guardar el path.
Por lo general se guardara como path0.
Ahora en el event create del ObjEnemigo colocaremos ese path para que pueda moverse el
enemigo as como muestra la imagen.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Como vez Lo uso en el event create del ObjEnemigo.
Donde dice path se escoge el path a usar. En este caso el Path0 que fue el que creamos.
Speed es la velocidad que usara el object para recorrer el path sea para moverse le puse
3, por que es una bastante adecuada.
At end: indica que sucede al culminar el recorrido del path0, yo he colocado la opcin
continue from Stara, por que asi seguira ejecutando el path0. (Se repetir)
Relative: lo marco relative para que las coordenadas indicadas en el path sean tomadas
desde la posicin del object y no del room.
Ya con esto nuestro objEnemigo se mueve de un lado al otro. Tu puedes definir el
movimiento que desees, no solo puedes escribir las coordenadas y darle a Add para
agregarlas cuando creas el path, puedes tambin clickear y las coordenadas X y Y se
agregan automticamente, para ser francos fue lo que yo hice.
Ahora en el event Collision seleccionamos colisin contra la bala.
Y colocamos Instante_destroy en D&D claro. En code seria instante_destroy();
Esto es todo para el ObjEnemigo.
Ahora el ObjBala.
En el event Create del ObjBala Colocamos el siguiente codigo.
Asi direction= obj_jugador.direction; speed=10;
//este codigo lo que dice es que el objBala se mover en la direccion
Que tenia el obj_jugador al momento en que la creo, para un plataformas el cdigo es
simple pero para iniciar esta bien, usarlo.
Ahora en el event Other seleccionamos Outside Room y en este event
Colocamos el D&D instante_destroy, si lo deseas en cdigo seria instante_destroy(); esto
es para que cuando salga del room el objBala se destruya, por que ya no nos aria falta.
Con esto hemos terminado con el ObjBala. Se vera asi
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ya que hemos terminado con los dos nuevos object ahora definamos como afectan al
obj_jugador.
Dele clic derecho en el obj_jugador y clic en properties, para que entremos al editor del
obj_jugador. Una vez aqu definamos con que tecla queremos que dispare, yo por ejemplo
quiero que dispare con la tecla R. asi que le doy clic en Add Event y escojo el Event Key
Press voy a setter y escojo la R. Como muestra el dibujo.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Una vez en el event Key Press R.
Colocamos el siguiente codigo.
If instante_number(objBala)<1
{instante_create(x,y,objBala)}
//lo que hace es que verifica si hay objBalas Creadas sea menor a 1 osea 0 objBalas,
puedes cambiar el 1 por un numero mayor si deseas que se puedan disparar varias Balas.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
//cuando no tenga mas vidas muestra un cartel que dice Game Over y reinicia el juego.
if lives<1 {show_message("Game Over"); game_restart()}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
//cuando no queden mas naves enemigas pasa al siguiente nivel.
if instance_number(NaveEnemiga)<1 {room_goto_next()}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el event de collision de objNave contra NaveEnemiga.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
lives-=1; //Resta una vida.
with(NaveEnemiga)instance_destroy();//la NaveEnemiga se destruye.
self.instance_destroy();//objNave se destruye.
room_restart(); //reinicia el nivel.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Como puedes ver se a cumplido todo lo antes mencionado.
Por ello cuando pienses en tu juego crea una lgica en texto normal y luego interprtalo
en GML.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora aremos algo distinto vamos a traducir el GML a palabras comunes de esta manera
comprender mas su lenguaje.
Tenemos el siguiente cdigo Numerado para mayor facilidad de comprender.
En el event step.
1) if place_free(x,y+1){gravity_direction=270 gravity=0.5}else{gravity=0;}
2) if vspeed>14{vspeed=14}
3) if x< obj_player.x
{
if place_free(x+5,y){ x+=4}
if not place_free(x,y+1)and place_free(x+8,y+1)
{vspeed-=14; if place_free(x+5,y){ x+=5}}}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Explicacion.
Como puedes ve en este cdigo se trabaja mucho con las posiciones X Y, por ello es
necesario comprender que X es la posicin horizontal del room en el que actualmente
estas, X en positivo es asa la derecha y en valor negativo asa la izquierda. As como Y es
la posicin vertical del room en el que actualmente estas, Y positivo es asa abajo, Y
negativo es asa arriba.
1) si esta libre la posicin de Y un pxel mas abajo libre, {se activa la gravedad a 0.5 y
su direccin ser asa abajo.} de lo contrario {la gravedad no poseer velocidad de
movimiento.}
2)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
______________________________________________________________________________
____________________________________________
Acceso directo o aleatorio a los elementos individuales del array.
Los arrays se clasifican en :
Unidimensionales (vectores o listas) array[0]
Multidimensionales ( tablas o matrices) array[0,1]
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Crearemos un ejemplo usando array unidimensionales.
Abran el Game maker.
Creen 5 sprites distintos de nombres spr1, spr2, spr3, spr4, spr5. En verdad los nombres de
los sprites no importa es solo por seguir un ejemplo.
Este ejemplo mostrara como pudes almacenar todos los sprites de un object en un array.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
en el event alarm[0]
sprite_index=arrspr[c]; //como veras el sprite cambiara segun el valor el indice del array
siendo el valor tomado de la variable "c"
ahora crean un room e introduce el object creado y ejecuta el juego, para probarlo
preciona cualquiera de las teclas antes mencionadas y veras como cambia de sprite. Muy
util este ejemplo si tomas en cuenta que podria ser un personaje y cada spr correspondiera
a una direccion de movimiento.
Con esto queda listo la explicasion de Arrays.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Sentencia Switch.
Estructura.
switch(variable)
{
case 0: linea de codigos break;
case 1: otra linea de codigos break;
}
Basicamente es switch lo que hace es comparar el valor de la variable con el de los case, si
esta concuerda se ejecutara la linea de codigos de ese case, tambien podria agregarse al
final de los codigo el "default" que funcionaria como un case, solo que este ejecutaria la
linea d ecodigos cuando el valor de variable no concuerde con la de ninguno de los case.
Vamos a hacer un ejemplo, crearemos un menu con 3 opciones usando el switch.
Crea un object, colocale como nombre objMenu, aunque como dije antes el nombre no es
importante.
en el event create declaramos la variable menu.
Event create.
menu=0;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
ahora si para seleccionar las opciones del menu queremos usar las teclas left y right del
teclado de flechas, hagamos lo siguiente.
En el event key pressed left.
if menu > 1 //si menu es mayor a 1
{menu-=1;} //resta 1 a menu
else //de lo contrario
{menu=3;} //menu es igual a 3.
E_____________________________________________________________________________
______________________________________________________________________________
_____________________________________________
n el event key pressed right.
if menu < 3 //si menu es menor a 3
{menu+=1;} //se suma 1 a menu.
else //de lo contrario
{menu=0;} //menu es igual a 0
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el event key pressed Enter. (Aqui usaremos el switch)
switch(menu) //variable a comparar.
{
case 0: room_goto_next(); break; //valor del case es 0, se ser el del menu=0 se dirige al
siguiente room.
case 1: show_info(); break; //valor del case es 1, se ser el del menu=1 Abre la
informacion..
case 2: game_load("savegame"); break; //valor del case es 2, se ser el del menu=2 leera el
archivo guardado.
case 3: game_end(); break; //valor del case es 3, se ser el del menu=3 cierra el juego.
}
Ahora para que nuestro menu se visible.
En el event Draw. (Aqui usaremos el switch)
switch(menu) //variable a comparar.
{
case 0: draw_text(x,y,"Nuevo juego") break; //valor del case es 0, se ser el del menu=0
muestra el texto en pantalla.
case 1: draw_text(x,y,"Informacion") break; //valor del case es 1, se ser el del menu=1
muestra el texto en pantalla..
case 2: draw_text(x,y,"Cargar partida") break; //valor del case es 2, se ser el del menu=2
muestra el texto en pantalla.
case 3: draw_text(x,y,"Salir del juego") break; //valor del case es 3, se ser el del menu=3
muestra el texto en pantalla
}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora coloca el objMenu en un lugar visible donde quieres que se vea el menu, y ejecutalo,
Culminado.
Con esto podemos decir que ya sabes programar en GML o tienes una extensa idea de cmo
hacerlo.
Vamos a usar el GML y crear inteligencia artificial para los personajes controlados por el
CPU.
Pero como crear una ia que haga esto, fcil, lo nico que debes hacer es iniciar por una
condicin y dentro de estas las acciones necesarias, me explico.
Creamos la condicin inicial podra ser verificar si existe la instancia, continuamos creado
los script necesarios, y luego los llamamos y esto dar inicio a nuestra ia.
Cabe destacar que deben haber transiciones, es decir inicia con un movimiento, por alguna
razn ese movimiento no puede seguir ejecutndose y cambia al otro, en pocas palabras la
condicin podra decir que si esta a su izquierda se mover a la izquierda, pero si esta a la
derecha ya esa condicin no podra ejecutarse, es donde pasaras al proceso de seleccin
en donde a travs de los cdigos verifica la posicin en la que esta y de all parte al nuevo
movimiento, adems para el disparo se podra establecer que si esta en la misma direccin
en la que el enemigo va (quiere decir que lo esta viendo) entonces le dispare, sea crea la
instancia de la bala.
Para entender mejor vayamos a la prctica.
C_____________________________________________________________________________
______________________________________________________________________________
_____________________________________________
reemos dos grupos osea dos sub carpetas de group en script.
GroupPersonaje y GroupEnemigo.
Iniciamos en el GrupPersonaje, Dentro de esta sub carpeta creamos los siguientes script
scrCreatePersonaje
y colocamos los siguientes cdigos.
xx=0;
yy=0;
//estas variables las declaramos para ser usadas como gua para el Mouse.
Lives=10;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Creamos otro Script, de indice scrStepPersonaje.
Y colocamos los siguientes codigos.
xx=mouse_x;
yy=mouse_y;
Image_angle=point_direction(x,y,xx,yy)
//lo que hace es verificar la posicin del mouse en la posicin del objPersonaje y devolver
la distancia en grados.
If instante_exists(objBalaPersonaje) and mouse_left_pressed(mb_left)
{instance_create(x,y,objBalaPersonaje)}
//Crea una bala al presionar el botn izquierdo del mouse.
direction=image_angle;
//indica que se mover a donde este mirando.
If keyboard_check(vk_up)
{speed=5;}
If keyboard_realise(vk_up)
{speed=0;}
//si se presiona la tecla de flechas arriba se mover, si se suelta se detendr.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ya con esto el script indica donde y a que velocidad moverse y disparar.
Ahora en el objPersonaje llamamos a los scripts.
En el event create.
scrCreatePersonaje();
En el event step.
scrStepPersonaje();
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el event out side room
Instance_destroy();
//lo que ara es al ser creada ir a la direction donde se encontraba el cursor del mouse
//si colisiona contra el objEnemigo se destruye hay que ponerlo ya que el dao seria
infinito si esto no pasa.
//tambien se destruye si sale del room. Con esto listo el objBala.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En su event out side room
Instance_destroy();
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En su event colicion contra el objPersonaje
With(objPersonaje){lives-=1}
Instante_destroy();
//resta vida al personaje y se destruye la bala.
Vamos ahora a crear los script de la IA del objEnemigo.
Para esto crearemos varios script.
scrCreateEnemigo, scrAndar, scrAtk, scrEsquivar, scrStepEnemigo.
Ya que el enemigo se mover por su cuenta lo que los script deben hacer es mover el
enemigo como si tu presionares sus controles, con esto lo que digo es que cuando creas una
IA, solo usas los script que sustituirn los movimientos que tu realizaras en esas
situaciones.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el scrCreateEnemigo
Vidas=10;
//declaramos el nmero de vidas que tendr.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el scrAtk
image_angle=point_direction(x,y,objPersonaje.x,objPersonaje.y)
if !instance_exists(objBalaEnemigo)
{instance_create(x,y,objBalaEnemigo);}
//si no existe la bala del enemigo el podr crear una.
//y se mantiene mirando al personaje.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el scrAndar
if distance_to_object(objPersonaje)>128
{mp_potential_step(objPersonaje.x,objPersonaje.y,2,1)}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el scrEsquivar
if distance_to_object(objPersonaje)<64
{
if x< objPersonaje.x and x>0
{hspeed=-5;}
if x> objPersonaje.x and x< room_width
{hspeed=5;}
if y< objPersonaje.x and y> 0
{vspeed=-5;}
if y> objPersonaje.x and y< room_height
{vspeed=5;}
}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora en el scrStepEnemigo
if vidas<1
{show_message("You Winner"); game_restart();}
//si no tiene vidas el objPersonaje osea tu ganas.
if instance_exists(objPersonaje)
{
scrAndar();
scrAtk();
scrEsquivar();
}
//solo si existe el objPersonaje el ejecuta los script.
//se compara si existe ya que al destruirlo podra dar algn error.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora en el objEnemigo
En su event create
scrCreateEnemigo();
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En su event Step
scrStepEnemigo();
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora crea una room y coloca tus object Personaje y Enemigo.
Y ten cuidado no dejes que te gane.
IA para juego de Plataformas.
Una de las cosas que hay que tener en cuenta es que los movimientos en un juego de
plataformas son con movimientos laterales izquierda (left) derecha (right), y ademas
esta el efecto de salto, osea los movimiento de Arriba (up), abajo (down), pero estos
de arriba y abajo, son establecidos por una fisica que se aplica para dar ese efecto de
slto, como sabemos un salto es un impulso vertical ascendente que supera la fuerza
que ejerce la gravedad sobre ese cuerpo, para no adentrarnos demaciado en la fisica y
dirigirnos mas a la creacion de nuestra IA comencemos.
Lo primero sera el crear los sprites, crearemos un sprite para el jugador el cual
llamaremos sprJugador, un sprite para el enemigos quien tendra la IA, que sera
sprEnemigo y centramos la posicion X del sprite y la Y en 0, es decir que creando los
sprites 32x32 su X seria 16 su Y 0, y creamos un sprite para las balas que sera un
circulo de 8x8 y centramos el sprite de la bala sprBala, y un sprite cuadrado el cual
llamaremos sprMask, tambien crearemos un sprite cuadrado e cual llamaremos sprPiso
de 32x32.
Es importante dstacar que los sprites debes des marcar las casillas Presice collision
Cheking. (ver fig 1) Una vez creados los sprites ceraremos los objects.
Fig 1 de plataformas.
iniciara.
Creamos el script scrStep, y ecolocamos estos codigos.
if keyboard_check_pressed(vk_right) and place_free(x+3,y)
{x+=3; ver=true;} //mueve a la derecha.
if place_free(x,y+1)
{gravity=0.5}else{gravity=0;}
//se establece la gravedad.
if place_meeting(x,y,objBalaEnemigo)
{lives-=1; with(objBalaEnemigo){instance_destroy();}}
//si le pega la bala del enemigo pierde una vida.
if lives<1
{show_message("Game Over"); game_restart();}
//si no tiene vidas sale un mensaje de game over, y se reinicia el juego.
if ver
{image_xscale=1;}else{image_xscale=-1;}
//para que mire la imagen al lado correcto.
Con esto terminamos los script de nuestro jugador, ahora vamos a los script del
Enemigo.
Creamos un group as groupEnemigo y dentro de esa sub carpeta creamos los siguientes
scripts.
scrCreateEnemigo y colocamos los siguientes cdigos,
mirar=false; vidas=10;
Se declara las variables que indican la cantidad de vidas inicial y asa donde esta
mirando el enemigo.
if place_meeting(x,y,objBalaJugador)
{vidas-=1; with(objBalaJugador){instance_destroy();}}
//si colicion con la bala pierde una vida.
if place_free(x,y+1)
{gravity=0.5}else{gravity=0;}
//se establece la gravedad.
if place_meeting(x,y,objBalaJugador)
{vidas-=1; with(objBalaJugador){instance_destroy();}}
//si le pega la bala del Jugador pierde una vida.
if vidas<1
{show_message("Player Winner"); game_restart();}
//si no tiene vidas sale un mensage de Player Winner, y se reinicia el juego.
scrIAEnemigo();
argument0= objJugador;
argument1=12;
argument3=4.2;
argument4=12;
if distance_to_object(argument0)>128
{argument2=3}else{argument2=2}
if place_free(x,y+1){gravity_direction=270 gravity=0.5}else{gravity=0;}
if vspeed>argument1{vspeed=argument1}
if distance_to_object(argument0)>16
{
if x< argument0.x
{
if x> argument0.x
{
if place_free(x-5,y)and !place_free(x,y+1){ x-=argument2}
if not place_free(x,y+1)and place_free(x-8,y+1)
{vspeed-=argument4;}
if place_free(x-5,y+1){ x-=argument3}
mirar=false
}
}
if distance_to_object(objJugador)<64 and !instance_exists(objBalaEnemigo)
{instance_create(x,y,objBalaEnemigo);}
if mirar
{image_xscale=1;}else{image_xscale=-1;}
//para que mire la imagen al lado correcto.
Al objJugador.
En su event Create llamemos el script scrCreateJugador simplemente en la pestala
control usemos execute code y escribamos esto scrCreateJugador();
Ahora en su event Step llamemos el script scrStep.
Ahora en su event de colicion contra el objPiso llamemos este script
scrColicionJugador con esto listo el objJugador.
Ahora la objBalaJugador
En su event Create
if objJugador.ver {direction=0 speed=10;}else{if !objJugador.ver {direction=180
speed=10;}}
//indica la direccin que tomara la bala del jugador.
En su event out side room, coloquemos instante_destroy();
Usaremos el mismo code en event de colision contra el objEnemigo.
Con esto listo el objBalaJugador.
Ahora el objEnemigo.
En su event create llamemos el script scrCreateEnemigo.
En su event End Step llamemos el script scrEndStep.
En su event Step llamemos el script scrStepEnemigo.
En su event colicion con el objPiso scrColicionEnemigo.
Con esto listo el objEnemigo.
Ahora el objBalaEnemigo.
En su event create
if objEnemigo.mirar {direction=0 speed=10;}else{if !objEnemigo.mirar {direction=180
speed=10;}}
Ahora diseemos el room coloca algunos objPiso coloca el objJugador arriba del
objPiso, de igual manera el objEnemigo.
Y ahora a probar nuestro ejemplo.
Hemos visto y aprendido bastante del uso de la herramienta que es el Game maker.
Pero hasta ahora todos los juegos que hemos mostrado crear son en 2D, por eso ahora
mostrare como crear videojuegos en 3D con Game maker.
Tutorial 3D
Lo primero al crear un video juego en 3D con el Game maker, es conocer las funciones
bsicas, ya que si no conoces ningn cdigo no podrs crearlos.
Lo primero, los juegos en 3D se hacen en casi su totalidad en GML, aunque podria hacerce
la programacion en 2D, excepto por la parte grafica que es en GML, para ello ya debes
saber bastante al respecto, si no es as recomiendo que pases antes por los otros
tutoriales, y luego vuelvas con este.
Debes saber que para crear en 3D debes tener licencia del Game maker sea tu Game
maker debe estar en versin Pro.
Lo primero que debes saber es que cuando inicias el modo 3D con el Game maker se
producen ciertos cambios que hay que tener en cuenta.
1.- Se agrega un nuevo valor el Z este representa la profundidad (ver imagen de cubo
mas adelante)
2.- Las coordenadas Y es invertida, me explico mejor, en el 2D la coordenada 0 es
arriba a la izquierda de la pantalla, mientras que en 3D, la coordenada Y es abajo a la
izquierda de la pantalla, es decir que en un juego 3D las coordenadas 0,0 son abajo a la
izquierda.
3.- Para que el juego inicie en 3D hay que iniciar el Game maker en esta modalidad Cmo?
Para ello hay un cdigo que cumple esa funcin.
.- d3d_start(); inicia el modo 3D.
.- d3d_end() Culmina el modo 3D.
La programacin 3D a la 2D no se diferencia mucho, solo que en esta trabajas con el valor
adicional Z para aspecto graficos, a partir de este momento nos referiremos recordemos
la coordenada Z Recuerda el 3D lleva mucho cdigo GML, por ello vuelvo a repetir si
aun no sabes usar bien el Game maker regresa al primer tutorial y luego de aprenderlos
vuelve aqu.
4.- Los object durante el juego se vern de diferentes tamaos dependiendo del valor Z de
estos.
5.- la programacion es casi toda igual a la del 2D, solo cambia lo que esta en el event
draw, ademas, en 3D, solo se dibuja (puede ver) aquello que esta inicado en los event
draw, asi que asignar un sprite, o background, no se vera al ejecutar el juego en 3D.
Por ahora vamos a crear algo bsico para esto crearemos un cubo.
Iniciaremos activando el modo 3D, pero de igual manera agregaremos ciertos cdigos para
mejorar la calidad visual, podemos colocar esto en el event create de un object el cual
llamaremos objCubo.
Event create de objCubo.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
d3d_start (); //inicia el modo 3D
d3d_set_perspective ( true ); /*Esto nos servir para que las instancias se vean en
perspectiva, sea que los que estn mas cerca se vern mas grandes que los que se alejan.
*/
d3d_set_hidden ( true ); /* Como sabrn cuando una instancia esta detrs de otra, la que
esta detrs no debera verse, as que este cdigo hace quita las que no son visibles.*/
d3d_set_culling ( true ); /*Este cdigo lo que hace es evitar dibujar un relleno interno a la
instancia, ya que de todas formas no podrs ver el relleno, no hace falta dibujarlas, as
ahorramos memoria */
texture_set_interpolation ( true ); //lo usaremos para suavizar bordes, ayuda mucho al
aspecto esttico.
d3d_set_lighting ( false ); //Para usar iluminacin, recuerda solo puedes ver objetos si hay
luz.
draw_set_color(c_white); //Al usar el blanco se vera todo iluminado.
//ahora delcararemos 3 variables, mismo Event create.
x1=0; y1=0; z1=0
//En el event de tecla check UP
x1+=0.5; y1+=0.5; z1+=0.5;
//En el event de tecla check down
x1-=0.5; y1-=0.5; z1-=0.5;
"+string(score),c_white,c_silver,c_white,c_dkgray,1)
draw_text_color(x,y,"Vidas:
"+string(lives),c_white,c_silver,c_white,c_dkgray,1)
draw_set_alpha(1);
d3d_set_hidden(true);
}
Bueno... Pero que mejor forma de aprender que creando un videojuego en 3D.
www.tutoek.tk
Presenta.
Tutorial Videojuegos de Naves 3D.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Lo primero, que are ser organizar mi juego, para ello creare una carpeta la cual llamare
Naves 3D, dentro de esta carpeta creare otras carpetas para los recursos a usar, estas
carpetas: Sounds, Backgrounds, Sprites, Editable.
En la carpeta sounds agregare los sonidos que usare y/o la msica del juego, por no hacer
muy largo el Tutorial solo agregare 2 sonidos los cuales sern:
sndExplosion, y sndDisparo.
En la carpeta Backgrounds creare la textura que usare para el fondo del espacio la cual
ser una imagen de 128 x 128 que se vera como el espacio estar en formato .png y la
nombrare texEspacio.
En la carpeta Sprites colocare un sprite que simulara ser la nave espacial pero visto desde
dentro de la nave de 320x240, y lo llamare orthoNave. Igual creare 2 ms con el volante
de giro a la izquierda y giro a la derecha, orthoNaveizq y orthoNavedere. Como esta.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Recuerden transparentar el blanco.
Perdonen pero no soy buen dibujante-. Y agregare otro sprite de 64x64 el cual nombrare
como texMeteoro
Aca dejo la imagen.
En el editable ser donde guarde el editable del juego a cada avance para asi tener un
respaldo y poder seguir mejorando el juego.
Bueno ahora tenemos los recursos disponibles, para iniciar cabe aclarar varios aspectos.
Primero un videojuego en 3D creado con Game maker, se programa en 2D, con la diferencia
de que al ejecutar el juego, solo se dibujara (mostrara) lo que se indique en el evento
draw y con codigos 3D, que por lo general inician en d3d_ .
Para los HUD (estatus del jugador: vidas, energa, balas) utilizamos lo que llamamos
Orthos: Esta es una funcin que permite que durante el juego 3D se puedan dibujar
grficos en 2D.
Ya con esto saben que el juego se programa en 2D, y al iniciarlo en modo 3D solo mostrara
lo que este en el event draw, en pocas palabras aadir un background desde el mismo
room, o usar tilles, sprites, es algo que ya no se ve durante el modo 3D.
Iniciemos programando nuestro juego de naves.
Abrir el game maker, yo usare el GM8, pero los cdigos que en este Tutorial usare sirven
para el game maker 6 en adelante.
Click derecho sobre sprites y click en Create Group veras que se creo una carpeta
nmbrala groupSprites, aqu crearemos los sprites que usaremos al programar el juego en
2D antes de iniciar el modo 3D.
Crea otro Group en sprites de igual manera y nombrala groupTex aca guardaremos las
texturas que usaremos en los objects para que se visualicen cuando inicie en modo 3D.
Ahora click derecho sobre groupSprites y click en create sprite, esto para crear el sprite
dentro de la carpeta, aunque si por error lo creas fuera de la carpeta groupSprites, puedes
arrastrar con el Mouse en sprite hasta el Group.
Todos los sprites al crealos los centraremos, presionando el boton center.
Iniciamos creando un Sprites de 4x4 el cual ser una esfera, lo usare para la sprbala.
Creamos un sprite de 16x16 esfera que llamaremos sprNave.
Creamos un sprite de 16x16 que llamaremos sprAsteroide.
Ahora en el groupTex creamos un sprite el cual llamaremos texAsteroide y subimos la
imagen de 64x64 que tenemos para el asteroide. Y Creamos uno de 4x4 el cual llamamos
texBala que sea cuadrado y amarillo.
Ahora simplemente creamos un sprite el cual llamamos OrthoNave y subimos el sprite de la
nave.
Ahora en la carpeta Sounds, crearemos y subiremos nuestros dos sonidos el sndDisparo y el
sndExplosion.
En Backgrounds crearemos y subiremos la imagen del espacio que tenemos de 128x128 y lo
nombraremos texEspacio.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora vamos a crear los objects.
Crea estos objects.
objBala, objNave, objAsteroide, objCreaAsteroides.
Ahora agregaremos los cdigos necesarios a cada objects.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Crear el objBala asignarle el sprite sprBala.
Event create
direction=objNave.direction speed=5;
sound_play(sndDisparo);
Event collision contra objAsteroide
instance_destroy();
Event out side Room
instance_destroy();
Como puede notar la programacin es en 2D, solo cambia el aspecto visual sea se vera
solo lo que dibujemos en el event draw.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw. Mismo objBala.
//aca indicaremos que se vea una esfera pequea que sern las balas.
// primero declaramos una variable para guardar la textura de la bala.
var tex;
tex=sprite_get_texture(texBala,0);
d3d_draw_ellipsoid(x-2,y-2,-2,x+2,y+2,2,tex,1,1,32)
aca solo indico dibuje una esfera de 4x4x4 (x-2,y-2,-2,x+2,y+2,2) usando la textura
cuardada en tex (tex,), que repita la textura horizontal y vertical hasta llenar la esfera
(1,1), y repita 32 veces el dibujado.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora vamos con el objAsteroide asignale el sprite sprAsteroide.
En su event create.
direction=(random(360)) speed=choose(0.5,1,2);
//direccion y velocidad aleatorios.
tt=choose(4,8,12); //para variar el tamao
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event out side room
move_wrap(1,1,1); //salga por el lado contrario.
Event Collision contra la objNave
instance_destroy();
//se destruye el Asteroide al chocar contra la nave.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Collision contra objBala
instance_destroy();
//se destruye el Asteroide al chocar contra la Bala.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event destroy
score+=1;
sound_play(sndExplosion);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw.
Veran que lo unico que se diferencia en este object la programacion 2D al 3D es este
event.
var t;
t=sprite_get_texture(texAsteroide,0);
d3d_draw_ellipsoid(x-tt,y-tt,-tt,x+tt,y+tt,tt,t,1,1,32);
//use la variable xyz para asi variar el tamao de Asteroide y no sean todos iguales.
//codigo parecido al de la bala para dibujar esferas.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora vamos con el object objCreaAsteroides
Bueno este object unicamente creara asteroides de manera que salgan todo tiempo.
Event create.
alarm[0]=5*room_speed;
//activa la alarm 0
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event alarm 0
alarm[0]=5*room_speed; //Reactiva la alarm0
instance_create(choose(0,room_width),choose(0,room_height),objAsteroide);
//indique que creara el asteroide de manera aleatoria en los 4 extremos del room.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora vamos con el objNave asignale el sprite sprNave y la mask sprNave.
Event create.
health=100; //energia vital de la nave.
score=0; //puntaje.
disparar=true; //indica si podra o no disparar.
z=1; //declaro la coordenada Z que usara la camara osea la view.
friction = 0.2; //desaceleracion de la nave.
// iniciar el modo 3D
d3d_start()
d3d_set_culling(false)
d3d_set_fog(false,c_black,1,8192+4096)
d3d_set_lighting(false)
d3d_set_hidden(true)
d3d_set_perspective(true)
d3d_set_shading(true)
draw_set_color(c_white)
texture_set_interpolation(true)
Event step
if keyboard_check(vk_left)
{direction+=5;} //gira a la izquierda
if keyboard_check(vk_right)
{direction-=5;} //gira a la derecha.
if keyboard_check(ord("Z"))
{speed=5;} //acelera.
if keyboard_check(ord("X")) and disparar
{instance_create(x,y,objBala) alarm[0]=1*room_speed; disparar=false; } //Dispara.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
if health<1
{room_goto_next();}
//en ese otro room solo mostrare el score e indicare Game over
//como ves aca lo unico que se diferencia de la programacion 2D es el valor de Z.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event alarm 0
disparar=true; //podra disparar.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event out side room.
move_wrap(1,1,1); //salga por el lado contrario.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event collision contra Asteroide
health-=5; //resta energia.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event outside room
move_wrap(1,1,1); //salga por el lado contrario.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw
// camara
d3d_set_projection(x,y,z,x+cos(direction*pi/180),y-sin(direction*pi/180),z, 0,0,1);
// color y transparencia
draw_set_alpha(1);
draw_set_color(c_white);
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
//dibujar el espacio
var text; //declaro variable text.
text=background_get_texture(texEspacio);
d3d_draw_ellipsoid(-2216,-2216,-2216,2216,2216,2216,text,1,1,64)
//dibujo una esfera con el doble del tamao del room para cubrirlo todo asi todo pasa
dentro de la esfera
//que es nuestro espacio osea nuestro universo.
//ahora activare los orthos.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora crearemos 2 nuevos sprites de 2x2 uno de color rojo y el otro de color amarillo
Al rojo le llamaremos sprNaveRadar, y al amarillo sprAsteoridesRadar.
Creamos un object llamado objOrthos
Algo importante aca se dibujara todo lo que es 2D dentro del ambiente 3D, se usara para
la nave, los hud (Estados), para el object que posee los orthos deben colocar una
profundidad negativa muy exagerada como -100 iniciemos
objOrthos.
Even create
depth=-100;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw.
//ahora bienen los HUD (orthos)
{
d3d_set_projection_ortho(0,0,640,480,0); //este permite dibujar en 2D durante el 3D
d3d_set_hidden(false);
//dibujar sprite de la nave
if keyboard_check(vk_left)
{draw_sprite_ext(orthoNaveizq,-1,322,480,2,2,0,c_white,1);}
else
if keyboard_check(vk_right)
{draw_sprite_ext(orthoNavedere,-1,322,480,2,2,0,c_white,1);}
else
{draw_sprite_ext(orthoNave,-1,322,480,2,2,0,c_white,1);}
draw_set_alpha(0.4);
//dibujar barra de energia
draw_healthbar(64,300,256,316,health,c_black,c_red,c_lime,0,true,true);
//dibujar score.
draw_set_font(font0); //crea esta font0 yo la hice de tamao de letra 24.
draw_text_color(64,332,"score: "+string(score),c_white,c_silver,c_white,c_dkgray,1)
draw_set_alpha(1);
d3d_set_hidden(true);
//para el radar
with(objAsteroide)
{
if collision_ellipse(x-400,y-400,x+400,y+400,all,0,0)
{
draw_sprite_ext(sprAsteoridesRadar,0,((x)/9)+486,((y)/9)+
380,image_xscale,image_yscale,image_angle,image_blend,image_alpha);
}
}
//dibuja al jugador
with(objNave)
{
if collision_ellipse(x-400,y-400,x+400,y+400,all,0,0)
{
draw_sprite_ext(sprNaveRadar,0,((x)/9)+486,((y)/9)+
380,image_xscale,image_yscale,image_angle,image_blend,image_alpha);
}
}
}
Ahora crea un room de 640x480, en su pestaa Backgrounds desmarcar la casilla Draw
Background Color y coloca en el los siguientes objects.
objNave, objOrthos, objAsteroide.
Ya podemos probarlo y veremos los resultados, lo unico que nos falta es hacer el room
para cuando pierdes, osea cuando ya no tienes energia, recuerda que coloque que cuando
no tienes health pasa al siguiente room.
Iniciemos creando un object llamemoslo objCreditos
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el event create
d3d_end() //finaliza el modo 3D
background_index[0]=texEspacio; //usare la textura como fondo.
background_visible[0]=true; //indico que se vea el fondo.
//como ya no estara modo 3D podra verse el background.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el event Draw
draw_set_font(font0);
draw_text_color(204,128,"score: "+string(score),c_white,c_silver,c_white,c_dkgray,1) //el
score.
draw_text_color(204,200,"Press Enter ",c_white,c_silver,c_white,c_dkgray,1) //press
enter.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el event Press Enter.
game_restart();
//reinicia el juego.
______________________________________________________________________________
____________________________________________
Event Collision contra objPared
speed=0;
direction=choose(0,90,180,270) speed=3;
//direccion aleatoria en cuatro direcciones segun los puntos cardinales.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw
var d;
d=sprite_get_texture(texFuego,0);
d3d_draw_cone(x-7,y-7,0,x+8,y+8,45,d,1,1,1,32);
//dibuja un cono que es el fuego.
Con esto listo el objFuego-.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora vamos con el objRegalo
Event Destroy
sound_play(sndRegalo);
//sonido de cuando coje el regalo.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Collision contra el objPlayer
score+=1;
instance_destroy();
//cuando la toque el player suma score y se destruye.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw
var c;
c=sprite_get_texture(texRegalo,0);
d3d_draw_block(x-8,y-8,0,x+8,y+8,16,c,1,1);
//dibuja los Regalos
Teminamos con el objRegalo
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora vamos con el objPared, primero marcar la casilla solid, o escribes en el event create
solid=true;
Event Draw
var c;
c=sprite_get_texture(texRegalo,0);
d3d_draw_block(x-8,y-8,0,x+8,y+8,16,c,1,1);
//dibuja los ladrillos de la pared.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
.- Ahora vamos al objOrthoHud
Event Create.
depth=-100;
//recuerda que las camaras orthos deben tener el depth negativo en -100
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw
d3d_set_projection_ortho(0,0,640,480,0);
d3d_set_hidden(false);
draw_text_color(160,0,"score: "+string(score),c_white,c_silver,c_white,c_dkgray,1)
if objPlayer.GameOver
{draw_text_color(160,96,"GAME OVER",c_white,c_silver,c_white,c_dkgray,1)}
draw_set_alpha(1);
d3d_set_hidden(true);
//esto es para dibujar el score osea el puntaje.
//y cuando pierda saldra Game over, se paraliza el juego un momento y se reinicia.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora el objCamara.
Event Create
depth=100; //el object que lleva la camara (projection) debe estar el depth positivo en
100.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event draw
//ahora agregaremos la camara.
move_towards_point(objPlayer.x,objPlayer.y+256,point_distance(x,0,objPlayer.x,0))
d3d_set_projection_ext(x,y,objPlayer.z,objPlayer.x,objPlayer.y,16,0,0,1,60,1.33,1,1024)
con esto culminamos con el objCamara.
Ahora crea un room de 514x514, y agrega los object usando el objPared para los bordes y
dejando un camino transitable para el player y coloca los regalos por el camino, mejor
mira la imagen, de cmo queda el room.
Recuerda en la pestaa background cambiar el color de fondo por el color negro o uno de
su gusto.
Con esto listo el juego.
Como as visto en este manual as aprendido a crear videojuegos en 2D y 3D con el game
ESTABLECIENDO LA CONEXION
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
La manera normal en la cual funciona un juego multijugador se explica enseguida. Cada
jugador corre una copia del juego, aunque cada uno lo puede hacer de forma distinta. Un
jugador los corre en el modo de servidor. Los otros lo hacen en el modo de cliente. El
jugador en modo servidor debe comenzar el juego primero y crea las sesiones del juego.
Los otros luego pueden asociarse para unirse al juego. Los jugadores tienen que decidir
sobre el mecanismo usado para la comunicacin entre las computadoras. En una red local,
lo ms fcil es usar una conexin IPX (ver debajo para ms detalles). Si todos los jugadores
estn conectados al Internet, TPC/IP es normalmente usado. En este protocolo los clientes
tienen que saber la direccin IP del servidor. Entonces el jugador corriendo el juego en el
modo de servidor debe dar su direccin IP a los otros jugadores (por ejemplo, para darles
un correo electrnico). Puedes encontrar tu direccin IP usando Simbolo de sistema, o
dando click en Ejecutar, escibes cmd sin las comillas, y una ves ah, escribes ipconfig
eso te mostrara tu ip. Tambin puedes usar la funcin del GameMaker mplay_ipaddress()
para esto.
Entonces para comunicar dos computadoras se necesita algn protocolo de conexin. Como
la mayora de los juegos, Gamemaker ofrece cuatro tipos distintos de conexiones: IPX,
TCP/IP, MODEM y Serial, de los cuales en pruebas realizadas la mas funcional es TPC/IP, y
sera la que explique en este tutorial.
La conexin TPC/IP es el protocolo de Internet. Este puede ser usado para jugar contra
otros jugadores en algn sitio en Internet suponiendo que sabes su direccin IP. Recuerda
uno crea el server y el/los otros son clientes, por lo que quien creo el server debe darte su
ip. En una red local tu puedes usarlo sin proporcional direcciones. Finalmente, cuando se
usa una lnea serial (una conexin directa entre computadoras) t necesitas proporcionar
un nmero para la configuracin del puerto. Hay cuatro funciones de GML que pueden ser
utilizadas para establecer estas conexiones.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
mplay_init_tcpip(addr) Inicia una conexin TCP/IP. addr es un string que contiene la
direccin de la Web o su direccin IP. Por ejemplo: miserver.no.ip.info, 123.123.12,
Solo cuando se participa en una sesin (ver debajo) necesitas proporcionar una direccin.
La persona que crea el server (seccion) necesita dar una direccin (porque la direccin de
su computadora es la nica que se usa). En una red de conexin local no se necesita una
direccin ip pero de todas formas es necesario crear la comunicacin.
Tu juego debe llamar una de esta funcion exactamente. Todas las funciones devuelven si se
ha logrado con xito. No se logra si l protocolo particular no esta instalado o no es
soportado por tu maquina, (Verifica el firewall no bloquee la conexin).
Entonces el primer room en nuestro juego debe mostrar la posibilidad y permitir que el
jugador cree un server o se una a uno creado, (o solo permitir los protocolos que t quiera)
Iniciamos creando un object llamesmolo objCreaConex colocale un sprite de boton que
diga Conectar.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el event create agrega esto.
//declaramos la variable guarip que contendr la miip que escribiremos
//la cual es nuestra propia ip.
miip = mplay_ipaddress();
alarm[0]=0.2*room_speed;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Alarm[0]
//Esto abrira una ventana para que escribas la ip de tu pc.
miip=get_string("Coloca la ip de la secion,miip)
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora en el Event left pressed
//verifica si hay conexin y de haber pasa al otro room, de lo contrario dice que:
Conexin fallida
if (mplay_init_tcpip(miip)) room_goto_next();
else
show_message('Conexion fallida');
Ya hay una conexcion, ahora hay que ver si hay algun server (secion) creado, para unirte, o
crear tu una secion (server).
Cuando el juego termine, cuando el juego no necesite ms usar la facultad multijugador,
necesitas seguir la siguiente rutina para terminarlo:
mplay_end() termina la conexin actual. Devuelve si lo ha hecho con xito. Recuerda que
antes de cerrar el juego termine con la conexin.
Tambin necesitas usar esta rutina para iniciar una conexin distinta.
SESIONES DE JUEGO
Cuando te conectas a una red, pueden estar mltiples juegos corriendo en la misma red.
Nosotros llamamos a estas sesiones (server). Estas sesiones distintas pueden pertenecer
a distintos juegos o al mismo. Un juego tiene que identificarse nicamente a l mismo en
la red. Afortunadamente, GameMaker hace esto por ti. La nica cosa que debes saber es
que cuando tu cambias el id del juego en las configuraciones globales del juego (Global
Game Setting) esta identificacin cambia. De esta manera puedes evitar que las personas
con versiones antiguas de tu juego compitan contra las personas que tengan las versiones
nuevas.
Ahora para continuar creamos un room el cual llamamos rmSecion
Para este room crearemos los siguientes objects.
objCrear A este le asignamos un sprite de boton que diga Crear secion (server)
en el event Create.
//estos guardaran datos al momento de crear el server.
textserver=0; //le daras nombre a la secion;
textPjs=0; //le das nombre a tu personaje.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Mouse left pressed
//al hacer click pregunta por el timpo de server a crear.
textserver=get_string("Nombre para el Server","server"); //pregunta nombre a la secion;
textPjs=get_string("Nombre para el Jugador","Jugador"); //pregunta nombre a tu
personaje.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora Creamos un object que llamaremos objDesconect Con un sprite de boton que diga
Desconectar.
En el event mouse left pressed colocamos
mplay_end(); //cierra la seccion (conexcion) es bueno colocar este code, en el event de
tecla pressed Esc, asi cuando alguien sale es desconectado por defecto.
room_goto_previous(); //regresa al room anterior donde aun no nos conectabamos.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Creamos un object el cual llamaremos objUnir Este lo usaremos para ingresar a un
server (secion) existente.
Event Create
//seleccionamos la primera subimagen del sprite
image_single = 0;
//guardamos el numero de sesiones activas
server= mplay_session_find();
//declaramos la variable severnum con una cadena vacia, esta variable guardara el nombre
de las sesiones
servernum = '';
/*declaramos la variable posicion con el valor 0
esta variable guardara la posicion, pero no la posocion Y solo la posicion X, la posicion Y la
utilizaremos para identificar el numero correcto de la sesion
no es lo mismo que selecciones una sesin, o que selecciones esa misma sesin cuando ya
has movido la lista, ya que estaran en distintas posiciones, por eso es necesario el uso de
esta variabe.
ejemplo, si una sesion esta en la primera posicion (0), y movieramos la lista hacia arriba,
esa sesin estaria una posicin mas arriba que antes
*/
posicion = 0;
//creare una alarm que actualizara la lista de seciones existentes.
alarm[0]=3*room_speed;
//en este caso esta variable sera la posicion Y del rectangulo que dibujaremos para saber
que seleccion hemos realizado
yy = 48;
//declaramos la seleccin con un valor nulo
//esta variable contendra el numero de la sesion seleccionada
seleccion = noone;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Alarm 0
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el event mouse left pressed
pedimos al usuario su nombre de juego y la guardamos en una variable
name = get_string('Tu nombre','');
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
En el siguiente linea d ecodigos, se une y comprueba la sesin, y al mismo tiempo con una
sentencia if se unir a la sesin tomando como parametros, el nmero de la sesin
(objConectar.miip) y el nombre pedido anteriormente con "name" si la conexin no se
realiza correctamente, mostraremos un error
declaramos una variable global con un valor que indicara el numero de jugador para que
podamos identificarlo en otros casos fcilmente si crearamos una sesion, el valor le
pondramos 0, pero en caso de unir el valor sera la cantidad de jugadores en partida
restado por 1 (ten en cuenta de que tu ya estas dentro))
Ejemplo; si hay tres jugadores en juego (tu y otros dos) sera global.player = 3-1, que es 2.
El host (server) seria 0, el proximo 1, y tu el 2.
if (mplay_session_join(seleccion,name))
{
global.player = mplay_player_find()-1;
room_goto(rmjuego); //donde rmjuego se supone es el nombre del primer room del juego.
}
else
show_message('Fallo al intentar entrar'); //mensaje de que fallo al entrar.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Global mouse pressed
//si pulsamos en cualquier lado de la pantalla, y el mouse esta entre las coordenadas
indicadas...
//la seleccion dependera de la variable posicion
//no es lo mismo que selecciones una sesin, o que selecciones esa misma sesin cuando ya
has movido la lista, ya que estaran en distintas posiciones, por eso es necesario el uso de
esta variabe.
//ejemplo, si una sesion esta en la primera posicion (0), y movieramos la lista hacia
arriba, esa sesin estaria una posicin mas arriba que antes (-1), por eso debemos sumar la
variable posicion (teniendo en cuenta de que el valor puede ser negativo o positivo), que
es la variable que hemos modificado cada vez que hemos movido la lista arriba o abajo
if (mouse_y >= 48 && mouse_y < 192 && mouse_x > 32)
{
seleccion = yy/16 - 3 + posicion;
}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw
//dibujamos el sprite del boton
draw_sprite(sprite_index,image_index,x,y)
Ahora ya sabemos como unirse al server (secion) ya existente, Para que otros se unan a tu
secion (recuerda si tu eres el server los otros Al conectarse deben colocar tu IP).
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
case 3:
//actualizamos la velocidad del sprite del objeto ("player")
player.image_speed = value;
break;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
case 4:
//actualizamos la escala X del objeto dado ("player")
player.image_xscale = value;
break;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
case 5: //cuando un nuevo jugador entra en la sesin...
//esta variable contendra el valor que nos envian de global.player, lo utilizaremos
como id del usuario, ojo!!no la id de la instancia
userid = value;
//guardamos la id de la instancia creada del objeto que representa a los otros
jugadores
user = instance_create(objPlayerServer.xstart,objPlayerServer.ystart32,objPlayerClientes);
//asignamos al array dependiente de la id del usuario la id de la instancia creada
players[userid] = user;
break;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
case 6: //cuando un jugador abandona
//haremos lo mismo que cuando un jugador entra, pero el valor del array vuelve a
ser -1, y la instancia se elimina
playerid = value;
with(players[playerid]) instance_destroy();
players[playerid] = -1;
break;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
case 7: //recivimos la id del usuario que nos lo envia...
//lo guardamos en esta variable
other_id = value;
//guardamos en esta variable la id de la instancia dependiendo de la id del usuario
obtenido
//de esta manera arriba lo utilizaremos como si fuera un objeto, ejemplo:
player.x
player = players[other_id];
break;
}
}
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Game_End
mplay_message_send(0,6,global.player);
//envia la info de que se desconecto asi lo borra de pantalla.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Ahora vamos con el objPlayerServer, Este sera tu personaje principal es decir con quien
jugaras, asi que colocale todo los codigos necesarios para usarlo, pero agregale estos a
continuacion que son necesarios para la conexcion.
Event create.
//activamos la alarma en un step
alarm[0]=1*room_speed;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Alarm0
//envia los mensajes con cada uno su id y valor correspondiente
//se envia primero el mensaje de la id 7 porque es el que hemos elegido para identificar el
jugador al que aplicaremos los valores de los prximos mensajes
mplay_message_send(0,7,global.player);
mplay_message_send(0,0,x);
mplay_message_send(0,1,y);
mplay_message_send(0,2,sprite_index);
mplay_message_send(0,3,image_speed);
mplay_message_send(0,4,image_xscale);
//volvemos a activar la alarma a un step
alarm[0]=1*room_speed;
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw
//Dibujar el jugador
draw_sprite_ext(sprite_index,image_index,round(x),round
(y),image_xscale,image_yscale,image_angle,image_blend,image_alpha);
//Dibuja el nombre
draw_text(round(x)-string_width(name)/2,round(y)-30-(sin(current_time/200)*1),string
(name));
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Tutora plataformas en 3D
Lo primero que debemos hacer es abrir el game maker, lgicamente, tambin debemos
tener registrado nuestro game maker, osea la versin pro.
Comento que solo mostrare los bsico, es decir la programacin 3D y 2D solo se diferencian
pos la coordenada Z (profundidad visual), el uso de una proyeccin en vez de view y los
event draw.
Ahora que tenemos abierto nuestro game maker iniciemos.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
.- Creando sprites.
Crea 1 sprite circular el cual ser nuestro jugador.
Crea 1 sprite Cuadrado de 32x32 el cual ser nuestro piso.
Para un juego de plataformas es necesario que cuando crees sprites des marques la casilla
Presise Collision ya que te evitara problemas con las colisiones, aunque recomiendo usar
mask cuadradas, aqu no explicare eso, ya que me enfocare en ensear como hacerlo 3D.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
.- Ahora crearemos un Brackground el cual usaremos de textura lo llamare texPiso y sera
un cuadro de 32x32 del color que quieras tener el piso de tu juego.
.- Ahora creemos nuestros objects.
.- objJugador y le asignamos el sprite circular.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
.- Ahora el objPiso
Event Draw
d3d_draw_block(x,y,32,x+32,y+32,-32,texPiso,1,1)
//Este codigo simplemente dibujara un cubo en 3D el cual sera nuestro piso.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
.- Ahora el objCamara.
Event create
depth=100; //la profundidad de la camara siempre es 100.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
Event Draw
d3d_set_projection(objJugador.x,objJugador.y-6.9,200, objJugador.x, objJugador.y7,190,0,0,1)
draw_set_alpha(1) //transpariencia.
draw_set_color(c_white) //para iluminar todo.
______________________________________________________________________________
______________________________________________________________________________
____________________________________________
.- Ahora creamos un room ah colocamos tantos objPiso como queramos y claro uno del
objJugador y uno del objCamara.
Tutorial creado por Elvis Enrique Kelley
Para todas las comunidades makeras.