Sunteți pe pagina 1din 40

Remake de Pong

en GameMaker: Studio

Por Hctor Costa Guzmn


http://hcosta.info

Dedicado a todos los programadores


que se han aburrido en su trabajo
ndice

ndice
Prlogo
Parte1:Prepararlosrecursos
Instalarlafuente
Importarlosgrficos
Importarelaudio
Parte2:Espaciodejuegoyobjetosbase
Creandolaroom
Creandoelobjetoparabola
Creandoelobjetoparaeljugador
CreandoelobjetoparalaCPU
Aadelosobjetosalaroom
Parte3:MovimientodeljugadorylaCPU
Movimientodeljugador
MovimientodelaCPU
Parte4:Colisionesbsicas
Contralasparedes
ContraeljugadorylaCPU
Parte5:Gestindeladificultad
HacerlaCPUmshumana
Incrementarvelocidad
Parte6:Marcadordepuntos
Aadelafuente
Crearelobjetomarcador
Incrementarelmarcador
Reiniciarlapartida
Parte7:Sonidos
Parte8:Creandounaportadaconmen
Creandoobjetosyroomdeinicio
Aadiendofuncionalidadalosbotones
Parte9:Mejorandoelmen
Rotandoelttulo
Aadiendoopacidadoalosbotones
Melodaenlaportada
Redisearlainterfaz(optativo)
Parte10:ltimosretoquesydistribucin
Evitarqueelcursorsesalgadeventanaduranteeljuego
Desactivarelcursorduranteeljuego
Controladorglobal
Prepararladistribucin
Generarelejecutable
Despedida
Prlogo

Llevo programando desde hace casi 10 aos. Puede parecer poco,perohayquetenerencuentaque


tengo 26, as que se podradecirquedosterciosdemividaloshepasadoentreordenadoresycasila
mitadescribiendocdigo.

Programar es una tarea que te obliga a mantenerte siempredespierto,utilizarmucholaimaginaciny


aprender constantementedetuserrores.Eslaculminacinde lacreatividadutilizandoelrazonamiento
lgico. Pero que sea un proceso creativo no significa necesariamente que sea til, ni mucho menos
divertido.Laprogramacinslosirveparaautomatizartareasyservicios.

Cun divertido puede ser programar siempre servicios? Aprendemos montones de lenguajes de
programacinsloparaacabarhaciendolomismo,msrpido,perolomismoendefinitiva.

Hace un par de aos estaba muydesilusionado.Peseaqueme gustamuchoprogramar,pocoapoco


perd la ilusin incluso de crear mis propios proyectos, y los que deba mantener cada vez se me
hacan cuesta arriba. Quiz la meta, el objetivo de cada proyecto es distinto, pero el procedimiento
siempre estanparecido,tanaburridoymontonoquealfinalpreferabuscarexcusasparahacerotras
cosas.Sinembargoelaopasadotodostocambi.

Siempre he jugado videojuegos, pero nunca me haba planteado hacerlos yo. Para m este tema
estaba a otro nivel, muy superior. Debe ser porque soy ms de la vieja escuela,delosquenosgusta
poner las manos en la masa. Durante aos tuve en la mente la idea de que hacer un videojuego
estaba directamente relacionado con crear tu propio motor grfico, y yo no tena el conocimiento ni
tiempoparaesascosas.

Pero inevitablemente el mundo avanza, uno lee y oye cosas Videojuegos de todo tipo empiezan a
triunfar, algunos para ordenador, otros para mviles, para la web, descubres que en Steam se ha
empezado a apostar muy fuerte por los indies, campaas de crowdfunding (mecenazgo) para
financiar proyectos tienen muy buenos nmeros y ttulos independientes llenan portadas de webs y
revistasespecializadas.

En serio algo que est al alcance de tan pocos puede mover a tanta gente? Y la respuesta es
simplementeno.

El desarrollo de videojuegos ha dejado de estar en otro nivel. Ya no es competencia exclusiva delas


grandes corporaciones con sus juegos AAA, ni tampoco de algunos pocosgeniosindependientes.Se
haabiertolabrechayhaymontonesdeprogramasyframeworksalalcancedetodoelmundo.

Era la oportunidad perfecta para hincarle el diente y probar de hacer algo, pero lo que me pas fue
sorprendente. Empec haciendo cosas sencillas, luego pas a otras ms complicadas y empec a
notarquemegustaba,medivertahaciendojuegosdepruebayprobandoideasextraas.

Me gustaba tanto que cada vez quera aprender ms y ms. Investigando descubr programas como
Unity, enfocado sobretodo al 3D y Game Maker Studio, al 2D. Como quera empezar por las bases
decidcomenzarconGameMakerStudioydesdeentoncesnohepodidoparar.

Despus de casi un ao en este mundo, creo que los videojuegos son la culminacin entre el arte y
creatividad, como la fusin entre el cuerpo y la mente que da la chispa de la vida. so es lo que los
hace tan especiales, permiten explorar formas distintas de expresar y comunicar.Laprogramacines
laherramientaqueloengranatodoyhacequefuncione,peroellmiteestuimaginacin.

Antes me gustaba ensear a la gente a programar porque te ensea a ser ms objetivoyafrontarde


una forma distinta la vida, pero ahora quiero ir ms all. Quiero seguir aprendiendo, pero sobretodo
quiero compartir este conocimiento con todo el mundo. Primero como una referencia para todos los
que quieran aprender cosas nuevas, y luego para los que quizcomoyoduranteuntiempopensaron
quelaprogramacineraaburrida.

Yesquesitegustajugarvideojuegos,imagnatecomoseracrearlos.




Hctor Costa Gumn
21 de Septiembre del 2015
























Parte 1: Preparar los recursos
Instalar la fuente

Lo primero es instalar la fuenteenWindows(antesdeabrirGameMaker:Studio),dirgetealacarpeta


Recursos\fuentes , haz doble clic en la fuente
8BIT WONDER.TTF e instlala tal como se muestra
enlasiguientecaptura:

Importar los grficos

A continuacinvamosaimportarloscomponentesgrficosdelpack.Crea unnuevoproyectodeGM:S
yarrastralosficherosgrficosdelacarpeta
Recursos\graficos
dentrodelprograma.

Indica Sprite en el cuadro de dilogo para los ficheros pong_ball, pong_player, ttulo,
btn_3_puntos,btn_10_puntosybtn_salir:



Cambiasusnombresdelasiguientedelasiguienteforma:

pong_ballspr_bola
pong_playerspr_jugador
ttulospr_titulo
btn_3_puntosspr_btn_3_puntos
btn_10_puntosspr_btn_10_puntos
btn_salirspr_btn_salir

Entodosestablecesupuntodeorigenalcentro.LuegoconfirmaenOK:



pong_field:
IndicaBackgroundparaelfichero

Cambiasunombredelasiguientedelasiguienteforma:

pong_fieldbg_tablero

ConfirmaenOKsinhacerningunamodificacin.

Importar el audio

De la misma forma que antes vamos a importar el audio. Arrastra los sonidos de la carpeta
Recursos/audio aGM:SyseleccionaSoundenelcuadrodedilogo:



Cambiaelnombredelossonidosdelasiguienteforma:

pong_wallsnd_pared
pong_hitsnd_toque
pong_failsnd_fallo
15_melody_LASTBEATsnd_melodia

PulsaenOKyguardalossonidossinhacerningncambioms.

Parte 2: Espacio de juego y objetos base


Creando la room

Hazclicderechoenroomsyaadeunanuevaroom.Enlapestaasettingsestablece:

Name:rm_tablero
Width:640
Height:480
Speed:60

bg_tablero:
Enlapestaabackgroundsseleccionadeimagendefondoel

Unavezlotengastodolistoguardahaciendoclicenelticverdedelaesquinasuperiorizquierda:

Creando el objeto para bola

Crea un nuevo objeto, dale de nombre spr_bola.


. Establece su sprite a
obj_bola Aade un evento
create,arrastraunbloquedecdigodesdelapestaacontrolypega elsiguientecdigoGML.Una vez
hechoguardadesdeeltickverdeyOK.

/// Otorgar posicin inicial, direccin aleatoria y velocidad base


randomize();

x = room_width/2;
y = room_height/2 + choose(-100, 0, 100);

direction = choose(45, 135, 225, 315);

velocidad_base = 5;
speed = velocidad_base;

Creando el objeto para el jugador

Crea un nuevo objeto spr_jugador.


, dale el sprite
obj_jugador Aade un evento create y arrastra un
bloquedecdioGML,justocomoantes.Aadeelsiguientecdigoyguarda:

/// Otorgar posicin inicial


x = room_width - 20;
y = room_height/2;

Creando el objeto para la CPU

Hazclicderechoen
obj_jugador
yhazDuplicate,daledenombrealnuevoobjeto
obj_cpu
.

/// Otorgar posicin inicial


x = 20;
y = room_height/2;

Aade los objetos a la room

Abre tu room, ve a lapestaaobjetosyaadeunobjetodecada encualquierpartedentrode laroom,


noimportadnde,perotienenqueserun obj_cpu,otro
obj_jugadoryotro
obj_bola.

Parte 3: Movimiento del jugador y la CPU


Movimiento del jugador

Vamos a aadir un movimiento sencillo al jugador, simplemente haciendo que ste siga la posicin
verticaldenuestroratn.AadimosuneventoStepyunbloquedecdigoal obj_jugador :

/// Posicionar con el mouse


y = clamp(mouse_y, 106, 418);

Movimiento de la CPU

Para la CPU haremos un clculo que mover en la direccin de la bola la paleta, con una velocidad
constante. Precisamente la dificultad del juego depender de la velocidaddemovimientodelapaleta,
cuantamsvelocidadmsdifcilsereljuego.

AadimosuneventoStepenel obj_cpu yporahoraponelsiguientecdigoenunbloquegml:

/// IA Simple
if instance_exists(obj_bola) {
if(obj_bola.y > y) y+=abs(obj_bola.vspeed*1.5);
else y-=abs(obj_bola.vspeed*1.5);
y = clamp(y, 115, 410);
}

Parte 4: Colisiones bsicas
Contra las paredes

Para simular la colisin contra las paredes, rectificamos la posicin vertical y daremos un ngulo
inversoalabola.

Abreel
obj_bola yaadeuneventoStep.Arrastraunapiezadecdigoconelsiguientecontenido:

/// Detectar colisiones contra paredes


colision = false;

if (y < 82) {
y = 82;
colision = true;
}

if (y > 440) {
y = 440;
colision = true;
}

if (colision) {
direction = -direction;
}

Contra el jugador y la CPU

Para simular la colisin contra los jugadores utilizaremos un sistema de colisiones dinmicas
dependiendodelaparteconlaquegolpeamoslabola:

Siledamosporlapartesuperiorlamandaremosporarriba
Siledamosporelcentrolamandaremosporelmedio
Siledamosporlaparteinferiorlamandaremosporabajo

La frmula que utilizaremos variar dependiendo si la bola viene por la izquierda o por laderecha,ya
quetenemosqueestablecerelnuevongulo:

Porlaizquierda: direccion=180(raqueta.ybola.y)
Porladerecha: direccion=raqueta.ybola.y

Siguiendo en el evento step de la bola, agrega otra pieza de cdigo (distinta a la anterior) y aadeel
siguientecdigo:

/// Detectar colisin contra los jugadores e incrementar velocidad


colision = false;

// Si choca contra el jugador


if instance_place(x+hspeed, y+vspeed, obj_jugador){
colision = true;
direction = 180-(obj_jugador.y-y)*1.5;
}

// Si choca contra la cpu


if instance_place(x+hspeed, y+vspeed, obj_cpu){
colision = true;
direction = (obj_cpu.y-y)*1.5;
}

Parte 5: Gestin de la dificultad
Hacer la CPU ms humana
Si os habis fijado, nuestra CPU es imposible de ganar, as que vamos a comenzar haciendola ms
patosa, que se equivoque como los humanos. En el step del obj_cpu vamos a modificar un poco el
cdigodemovimiento:

/// IA Simple
if instance_exists(obj_bola) {

if(irandom(4)<3){
if(obj_bola.y > y) y+=abs(obj_bola.vspeed*1.5);
else y-=abs(obj_bola.vspeed*1.5);

}
y = clamp(y, 115, 410);
}

Aadiendoelrandom,hayunaposibilidaddequenosigaelmovimientoysequederezagada.

Incrementar velocidad

Para hacer el juego un poco ms difcil la forma ms fcil es incrementar la velocidad de movimiento
delabolaunpococadavezqueunjugadorlagolpea.

ComienzacreandounavariableenelCreatedel obj_bola estableciendounacantidad aincrementarla


velocidad.

/// Declarar variable de incremento


incremento = 0.5;
Luego, durante la colisin contra los jugadores incrementa justo al final la velocidad, dentro de la
colisin. Como mximo vamos a imponer una velocidad de25,asquetendrsquerectificarsilabola
sepasadellmite:

if (colision){
// Incrementamos la velocidad
speed += incremento;
if (speed>25) speed = 25;
}

Parte 6: Marcador de puntos


Aade la fuente

Crea una nueva fuente haciendo clic derecho en fonts. Daledenombre


fnt_marcador
yseleccionala
fuente8BITWONDER.Estableceeltamaoa32pxypulsaOK:

Crear el objeto marcador

Crea un nuevo objeto , activa la propiedad


obj_marcador persistent
, y dentro crea un evento Create
conunapiezadecdigoenelquedeclaramoslosiguiente:

/// Declarar puntos


global.puntos_cpu = 0;
global.puntos_jugador = 0;

CreauneventoDrawyaadeunapiezadecdigoconlosiguiente:

/// Dibujar el marcador
draw_set_color(c_white);
draw_set_font(fnt_marcador);
draw_set_valign(fa_middle);

draw_set_halign(fa_right);
draw_text(288,28, string(global.puntos_cpu) );

draw_set_halign(fa_left);
draw_text(354,28, string(global.puntos_jugador) );

Aadeunainstanciadelobjetoenlaroom
yponeljuegoenmarchaparaverelresultado:

Incrementar el marcador

Para que el marcador se incremente hay que capturar el momento en que la bola sale de la room.
Dependiendo del lado sabremos quin ha ganado el punto. Inmediatamente cuando so suceda
borraremoslainstanciadelabola.

Enelobjetoobj_bola
aadeunapiezadecdigonuevaeneleventostepconelsiguientecdigo:

/// Detectar si hay puntos
if (x<0) {
global.puntos_jugador++;
instance_destroy();
}

if (x>room_width) {
global.puntos_cpu++;
instance_destroy();
}

Reiniciar la partida

Dado que el objeto marcador es persistente podemos reiniciar la partida utilizando el mtodo
room_restart() sin que ste reinicie las puntuaciones en el momento que algn jugador marque un
punto.

Para hacer la transicin ms suave y no de golpe, en lugar de reiniciar inmediatamente despus del
puntosepuedeutilizarunaalarmaenelmarcadorqueseencargardereiniciarlaroom.

Aadeuneventodealarma[0]enel obj_marcador ydentroelsiguientecdigoparareiniciarlaroom:



/// Reiniciar la room
room_restart();

Ahora simplemente vuelve al momento en que incrementamos el marcador y llama la alarma del
marcadoralcabode1segundoymedio:

/// Detectar si hay puntos


if (x<0) {
global.puntos_jugador++;
obj_marcador.alarm[0] = room_speed * 1.5;
instance_destroy();
}

if (x>room_width) {
global.puntos_cpu++;
obj_marcador.alarm[0] = room_speed * 1.5;
instance_destroy();
}

Ahora adelante,chateunaspartidasycompruebasielelmarcadorfuncionayse reiniciabienlaroom


cadavezquealgunomarcapunto:
Parte 7: Sonidos

Abre el evento step, y aade el siguiente bloque de cdigo,justoalfinaldelchoquedecolisincontra


paredes:

if (colision) {
direction = -direction;

/ Reproducir sonido pared


/
audio_play_sound(snd_pared, 90, false);
}

Eneldecolisincontrajugadores:

if (colision){
// Incrementamos la velocidad
speed += incremento;
if (speed>25) speed = 25;

// Reproducir sonido colisin


audio_play_sound(snd_toque, 85, false);
}

Yeneldedetectarsihaypuntos:

/// Detectar si hay puntos


if (x<0) {
global.puntos_jugador++;
obj_marcador.alarm[0] = room_speed * 1.5;

/// Reproducir sonido fallo


audio_play_sound(snd_fallo, 95, false);

instance_destroy();
}

if (x>room_width) {
global.puntos_cpu++;
obj_marcador.alarm[0] = room_speed * 1.5;

/// Reproducir sonido fallo


audio_play_sound(snd_fallo, 95, false);

instance_destroy();
}

Parte 8: Portada con men

Elmenquetepropongovaaconstarde3opciones:

Jugara3victorias
Jugara10victorias
Salir

Creando objetos y room de inicio

Parapoderaadirelttuloylosbotonestendrsquecrear4objetosyasignarlesestossprites:

obj_titulospr_titulo
obj_btn_3_puntosspr_btn_3_puntos
obj_btn_10_puntosspr_btn_10_puntos
obj_btn_salirspr_btn_salir

Unavezlostengascreaunanuevaroom rm_portada :

Width:640
Height:480
Speed:60
BackgroundsColor:seleccionaelcolornegrodefondo

Ahoraaadeunainstanciadecadaenlanueva rm_portada yarrastralaroomencimadela


rm_tableroparaquequedecomolaprimeraordenada.Tetendraquequedarmsomenosalgoas:

Aadiendo funcionalidad a los botones

Ahoraabreel
obj_btn_salir
,creauneventoMouseLeftPressedyaadeunapiezadecdigo:

/// Salir del juego
game_end();

Ahoraabreel
obj_btn_3_puntos
,aadeotroeventoMouseLeftpressedyaadeelcdigo:

/// Establecer modo, reiniciar marcador e ir a la room del juego


global.puntos_ganador = 3;
global.puntos_jugador = 0;
global.puntos_cpu = 0;
room_goto(rm_tablero);

Hazlomismoconelobj_btn_10_puntos:

/// Establecer modo, reiniciar marcador e ir a la room del juego


global.puntos_ganador = 10;
global.puntos_jugador = 0;
global.puntos_cpu = 0;
room_goto(rm_tablero);

Ya lo tienes prcticamente listo,slo faltaindicarlacomprobacindepuntospara volveralaportaday


borrar la instancia del marcador antes de hacerlo. Vealobjeto
obj_marcador,ymodificaelcdigode
laalarma

/// Reiniciar la room o volver a la portada


if(global.puntos_jugador >= global.puntos_ganador or
global.puntos_cpu >= global.puntos_ganador){
instance_destroy();
room_goto(rm_portada);
} else {
room_restart();
}


Parte 9: Mejorando la portada

Unaformadehacermsamigabletuinterfazesaadiendomovimientooelementosinteractivos.

Rotando el ttulo

Un efecto genial es la rotacin. Para rotar un poco el objeto


obj_titulo
puedes utilizar variables para
controlar la rotacin y el incremento entre steps, de manera que se vaya cambiando de direccin
cuando se llegue a un ngulo. Por ejemplo puedes rotar de izquierda a derecha de 10 grados a+10
grados.

Abretuobjeto obj_titulo yaadeuneventoCreateconelsiguientecdigo:

/// Declarar variables de control


direccion = -1; // -1 derecha, 1 izquierda
rotacion = 0.5; // incremento de grados por step
limite = 10; // mximo de grados a rotar por lado

AhoraaadeunEventoStepyunapiezadecdigoparacontrolarelngulodelaimagen:

/// Controlar rotacin

// Caso hacia la derecha


if (direccion == -1){
// incremento negativo
image_angle-=rotacion;
// si llegamos al lmite cambiamos de direccin
if (image_angle <= -limite) direccion = 1;
}

// Caso hacia la izquierda


if (direccion == 1){
// incremento positivo
image_angle+=rotacion;
// si llegamos al lmite cambiamos de direccin
if (image_angle >= limite) direccion = -1;
}

Poneljuegoenmarchayobservacomoelefectodemovimientoempiezaadarleuntoquedistinto.

Aadiendo opacidad o a los botones

Otro buen efecto es el control de la opacidad. De hecho puedes jugar conlaopacidaddelosbotones


para resaltarlos cuando el cursor del ratn est porencima.Parahacerlopuedesdarlesunaopacidad
msbajamientrasestninactivosysubirlacuandoelusuariopongaelratnporencima.

Tienes cuatro botones, sera un poco tedioso modificar todo su cdigo uno a uno. Te propongo crear
unobjetoobj_btn_base ,porahoravaco.Luegohazquelos3 obj_btn_ *heredendel.

Cuandolotengaslistoaadealobj_btn_baseuneventoCreateconelcdigosiguiente:

/// Variable de activacin


activo = false;

AcontinuacinaadeuneventoMouseMouseEnter,paradetectarcuandoelcursorestsobreel
objeto.Aadeunapiezadecdigo:

/// Botn activo


activo = true;

HazlomismoenuneventoMouseMouseLeave,paradetectarcuandoelcursornoestsobreel
objeto:

/// Botn inctivo
activo = false;

Finalmentecontrolaelprocesodedibujoparaaadirlaopacidad,aadiendouneventoDrawconel
siguientecdigo:

/// Dibujar el botn transparente o no
if(!activo) draw_set_alpha(0.7);
draw_sprite(sprite_index,image_index,x,y);
draw_set_alpha(1);

Como los hijos heredarn el cdigo del padre, ya debera funcionar y si pones el juego en marcha
notars las opciones del men un poco transparentesy cuandopasaselratn porencimaseiluminan
unpocoms.

Meloda en la portada

Otroaspectoquedaunbuentoqueanuestrosjuegoseslamsica.Headjuntadounamelodaen
8bitsquepuedequedarbienconelestilodeljuego.

Parareproducirlavealaroom
rm_portada yhazclicenCreationCode:



Aadelasiguientepiezadecdigoparareproducirelsonido:

audio_stop_all();
audio_play_sound(snd_melodia,100,true);

Delamismaformadebesasegurartequealiniciareljuegolamsicapare.Abrelaroom
rm_tablero
y
ensuCreationCodeaadelosiguiente:

audio_stop_all();

Listo,yatieneslamelodafuncionando.

Redisear la interfaz (optativo)

Finalmente puedes posicionar el ttulo ylosbotonesdeotrasformashastaencontraralgndiseoque


teguste,inclusoasignarelfondodelpongalaroomdelaportada:

Parte 10: ltimos retoques y distribucin

Evitar que el cursor se salga de ventana durante el juego

No s si te habr pasado pero ms de una vez el cursorsehasalidodelaventanamientrasjugabay


he perdido un punto. Si quieres evitarlo simplemente abre algunodelosobjetosdelaroom,comopor
ejemplo el obj_jugador . Dentro desuStepaadeuncdigoparaposicionarhorizontalmenteelcursor
todoelratoenmedio:

/// Rectificar posicin del ratn


my = clamp(mouse_y,96,416);
window_mouse_set(room_width/2,my);

Desactivar el cursor durante el juego

El cursor ya no se sale de la ventana pero siguesiendounpocoincmodoquesevea enmediodela


pantalla todo el rato. Vamosaactivarlonicamenteenlaroom rm_portadayadesactivarloduranteel
juego.

Primerovealaroom rm_portada ,yensuCreationCodeaadejustoalfinalestalnea:

window_set_cursor(cr_handpoint);

sto activar el cursor si est inactivo y le dar el icono de mano haciendo clic de Windows. A
continuacin ve a la room rm_tablero y en su Creation Code aade este otro cdigo al final para
desactivarelcursor:

window_set_cursor(cr_none);

Ahorayadeberaquedarperfecto.

Controlador global

Es un poco incmodo que nuestro juego no tenga una forma de volver atrs. Puedes aadir un
controlador global que capture en todo momento si apretamos por ejemplo la teclaESC paravolvera
laroomanteriorosalirdeljuegosiestamosenlaportada.

Creaunnuevoobjeto obj_controlador ,dalelapropiedadPersistenteyaadeuneventoStepyel


siguientecdigo:

/// Capturar tecla Escape


if (keyboard_check_pressed(vk_escape)){
if (room != room_first){
room_goto_previous();
} else {
game_end();
}
}

Y aade una instancia en la room


rm_portada
. Ahorayadeberaspodersalirdeunjuegoconlatecla
escapeovolveralaportadasiestsenlaportada.

Preparar la distribucin

Seguramente ya te has percatado que cuando pones el juego en marcha se muestra por defecto el
nombreGameMaker:Studioysaleuniconoblancoconellogodelprograma:

ParaeditarestosvaloresdebesiralapartadoGlobalGameSettings,pestaaWindows:

En Display Name pon el nombre del juego que quieras, por ejemplo Pong: Remake. Optativamente
tambinpuedeseditarotrainformacin:

Version:Versindelejecutable
Company:Nombredelacompaaodeldesarrollador
Product:Nombredelproducto
Copyright:Informacinacercadeltitulardelosderechos
Descripcin:Breveexplicacindeljuego

En la parte derecha podrs cambiar tambin el Splash Screen, la imagen que sale mientras secarga
eljuego,oelegirsiquieresonomostrarunamarcandoDisplaySplashScreen.

La otra parte que teinteresaesenOptions,dondepone GameIconapretaenUpdateybuscaelicono


queteadjuntoenlacarpeta Recursos\graficos denombreicono.icoyguardaenOK:

Generar el ejecutable

Yaesttodolistoparadistribuireljuego.

PrimeroestatesegurodetenermarcadoTargetWindowsenelmensuperior:

Acontinuacinvealiconodedistribucinenelmensuperior:



SeleccionaeltipoSingleruntimeexecutableparacrearunejecutableenunficheronico:

Guardaryesperaaquesegenere.Unavezlistodeberasvereliconoenelprograma:


YsiponeseljuegoenmarchatambinaparecereliconoenlabarradeWindowsyenlaventana:

Felicidades!Yatieneseljuegoacabadoypuedescompartirlocontusamigos.

Despedida

AsacabaestemanualpasoapasosobrecmocrearunjuegoretroestiloPong.

Esperoquetehayagustadoyhayasaprendidounpocomssobreestemundo,sinembargostono
esunadespedidadeverdad.Siquieresseguiraprendiendoacrearnuevosvideojuegosconmis
vdeosotienesalgunadudapsatepor
micanaldeYoutube
ovisita
miblogpersonal
.

Hastaentoncestedeseolomejorymedespidoconunademisfrasesfavoritas:

Baby steps lead giant strides


(Los pasos de beb conducen a pasos de gigante)

S-ar putea să vă placă și