Sie sind auf Seite 1von 47

INTRODUO A GML

Game Maker Language

Alex Ferreira Costa

Compilado de Tutoriais sobre a linguagem


de programao do GameMaker: Studio

INTRODUOEMGML
Aula01EditordeScriptdoGM:S

(Atualizado08/02/2015)
PessoalestareipostandoaulasparainiciantesemGML.Soaulasbsicas,praquemaindanoconseguiu
dominaraGML.Entovamosnossa1aula:
ParaabriroeditordoGM:Sabraseuobjeto,adicioneumevento(Create,Step,Alarm,etc)ev
abacontrolearrasteocone"Executeapieceofcode".Comonaimagem:

Aseguintejanelaseraberta:

Osseguintesbotesexecutamasseguintesfunes:

1Ok:Cliquenestaopoparasalvarseuscdigosevoltaraoobjeto.
2Loadacodefromatextfile:Abriarquivosdetexto(.txt)quecontenhamcdigos.
3Savethecodetoatextfile:Salvaocdigoabertoemumarquivodetexto(.txt).
4Printthecode:Cliquenestaopoparaimprimirocdigo.
5Setaparatrs:paradesfazerumaaonocdigo.
6Setaparafrente:pararefazerumaaonocdigo.
7Cut:recortar.
8Copy:copiar.
9Paste:Colar.
10Localizar:Localizaumapalavra.
Usadoparaencontrareousubstituiralgumapalavraoutextoporoutro.Umpainelserexibidodireitada
janeladecdigos:

VocpodedigitarotextoaserencontradonacaixaFind.Notequenocdigodetodasasocorrnciasdo
textoecontradosoimediatamentemostradascomumfundoamarelo.Digiteotextoasersubstituidona
caixaReplace.
Findfunesdosbotes:
Next:Selecionaaprximaocorrncia
Previous:Selecionaaocorrnciaanterior
First:Selecionaaprimeiraocorrncia
Last:Selecionaaultimaocorrncia.
Replacefunesdosbotes:

Next:Ssubstituiaprximaocorrncia

Previous:Substituiaocorrnciaanterior

First:Substituiaprimeiraocorrncia
Last:Substituiaultimaocorrncia.
ReplaceAll:Substituitodasasocorrncias.
11esquerdatemosaativao/desativaodoverificadordeerrosedireitatemosativao/desativao
doautocompletadordecdigos.

AplliesTo(aplicarem):
Self:Prprioobjeto
Other:Objetoqueestcolidindocomeste.
Object:Escolheumobjetoexistentenojogo.
Exemplificaodeerro:

Autocompletardefunesevariveis:
AodigitarpartedeumafunoouvarivelnativaoGMlistatodasasfunes,vriaveisenomesderesources
(Sprites,backgrounds,sons,etc)emumapequenajanela:

Paramudardeopobastausararodinhadomouseouassetasdirecionaiscimaebaixoeparaselecionara
teclaEnteroucliquecomobotoesquerdodomouse.

INTRODUOEMGML
Aula02VariveiseConstantes

(Atualizado08/02/2015)
Variveissoutilizadasparaarmazenarvriostiposdevalores,comonmeros,textosefrases.Elastambm
sochamadasdeidentificadores,poisapontamumvalor.
Umnomedevarivelpodeconterletras(semacentosgrficoseo),nmeros(Desdequenocomececom
umex:8_tiro)ealgunssmboloscomoounderline(_).Asquearmazenamnmerossochamadasde
variveisdevalorRealeasquearmazenamtextossochamadasdeStrings.
Vejaalgunsexemplos:
Atribuiovalor100varivelbalas:

Cdigo:Selecionartodos

balas=100

Atribuiovalor55varivelBALAS:

Cdigo:Selecionartodos

BALAS=55

Atribuiovalor7.5varivelforca:

Cdigo:Selecionartodos

forca=7.5

Atribuiovalor3varivel_vidas_:

Cdigo:Selecionartodos

_vida_=3

Atribuiovalor"JooPedroJos"varivelNome3:

Cdigo:Selecionartodos

Nome3="JooPedroJos"

Atribuiovalorfalsevarivelpode_atirar:

Cdigo:Selecionartodos

pode_atirar=false

Repareque:
AsquatroprimeirasvariveissodevalorReal.
AvarivelforcadevalorRealfracionado.Aquiusamospontos(.)enovirgulas(,).
AsvariveisbalaseBALASsoduasvariveisdiferentes.Issoporcausadocasesensitive,ouseja
mesmoquesumadasletrassejamaisculajumanovavarivel.
ApenltimavarivelumaString.
Altimavariveldevalorbooleano.
Entendamelhor:
String:Textos,palavraseletrasquedevemvirentreapstrofos,como"Euvenci!Entoeusouoganhador".
Realinteiro:Nmerosinteiroscomo5,670,100000,e31.
Realfracionado:Nmerosfracionados5.67,100.55,e0.5.
Booleano:truequeamesmacoisaque1efalsequeomesmoque0.Tantofazvocusar1como
usartrue,ambostemomesmovalor.
Existemtrscontextosparavariveis:global,localdeinstnciaelocaldeeventoquedefinemcomoede
ondeasvariveispodemseracessadas.
Varivellocaldeinstncia:
OGameMakerusaobjetosparacriaraaplicao.Ecadaobjetotemsuasatribuiespadro,comoa
posionaroom(Cenrio).Cadaobjetoesuasrplicas(instncias)tmumaposio,ousejaas
variveisxey.Vamoscriarumexemplo:

Crieumobjetoeumaroom.
AdicioneoeventoCreate(eventoqueacontece1vez,quandooobjetocriado)aoobjeto.
Nesteeventoinsiraocdigo:

Cdigo:Selecionartodos

saude=irandom(100)

Issoatribuiovaloraleatriode0a100paraavarivelsaude.
PS:afunoirandom(X)nosdevolveumnmerointeirode0aX,nocaso100.Aprenderemosmaissobre
funesmaisafrente,nosepreocupeementenderissoagora.
AdicioneoeventoDraw(Eventodedesenho,ocorreotempotodo)aoobjeto.Nesteeventoinsiraocdigo:

Cdigo:Selecionartodos

draw_text(x,y,saude)

Issodesenhaovalorarmazenadonavarivelsaudenaposiox,ydoobjeto.
Adicionevriosdesteobjetonaroom.Depoisexecute(F5).
Oresultado:

Vejaquecadainstnciadoobjetotemumasaudediferente.dessamaneiraquefuncionaumavarivellocal
deinstncia.Paravertodasasvariveisdeinstnciapadro/nativaparaosobjetos,vnabarrademenu
cliqueemScriptsdepoisselecioneaopoShowBuiltinVariables.Elasestonofimdalistaemazulcom
oinicio"local:".
Acessoumavarivellocalapartirdeoutroobjeto:Deixareiemumspoiler,poispodeserquesejaum
poucocomplexoaprenderessaparte.Sequiserpularelanohproblema,depoisvoltepradarumaolhada.
SPOILER:Cliqueparaverocontedo

Varivelglobal:
Esseotipodevarivelquepodeserutilizadaportodososobjetoseemqualquermomentodurantea
execuodaaplicao(desdequesejacriadaantesdemodificadaouacessada).

Cdigo:Selecionartodos

global.saude=100

Diferentementedasvariveislocaisdeinstncia,asvariveisglobaisnosoreplicadas,elassonicas.
Ousejaumvalorquepodeseralteradoporqualquereventoouobjeto,masums.Vejaque
colocamosglobal.antesdonomedavarivel.Issoqueatransformaemumavarivelglobal.
Faaomesmoprocedimentoquefizemoscomavarivellocaldeinstncia
trocandosaudeporglobal.saude(Nosdoiscdigos).Osresultadosdetodasasinstanciasseroos
mesmos,poisestamosfalandodeumamesmavarivel.
Resultado:

Sevoccriou6instncias,avarivelvaisermodificada6vezes,sendoqueovalorquevaiaparecersero
doltimoobjetoadicionadoaroom.
ListadealgumasvariveisglobaisembutidasnoGameMaker:
health:varivelpararepresentarasadedoplayer
lives:varivelpararepresentaraquantidadedevidas
room:varivelquedefine/representaaroomatual
score:varivelquerepresentaapontuao
mouse_x:variavelquerepresentaaposioxdomouse
mouse_y:variavelquerepresentaaposioydomouse

Paravertodasasvariveisglobais,vnabarrademenuecliqueemScriptsdepoisselecioneaopoShow
BuiltinVariables.
Reparequeestasnopossuemglobal..Issoporquesodoprpriogamemaker.
Varivellocaldeevento:
Essavarivelcomumentechamadade"variveltemporria".Issoporqueeladeclaradaemumeventoe
descartadanessemesmoevento.Vamosfazerumexemplosimples,masantesvamosaprenderadeclarar
essavariveltemporria:
[var][nomedavarivel][]

Cdigo:Selecionartodos

varmeu_x;
Dessamaneiravocdeclarouavarivelmeu_x.Voccolocaoconstrutorvardepoiscolocaonomeda
variveleporfimcolocapontoevirgula().Paradeclararmaisdeumavariveltemporriafaaoseguinte:

Cdigo:Selecionartodos

varmeu_x,meu_y,meu_cachorro,meu_papagaio;
Vocacabadecriarquatrovariveistemporrias.Vejaquevocsprecisouapenascolocarvirgulas(,)sema
necessidadedecolocarosoutrosconstrutores.
Apsdeclararavariveltemporriavocpodedarumvalorela.amesmaformadeumavarivelcomum:

Cdigo:Selecionartodos

//Declaroavarivelmeu_x
varmeu_x;
//Colocoovalor320navarivelmeu_x
meu_x=320

Faaumteste.ColoqueessecdigonoeventoCreatedeumobjetoecoloqueonaroom.Agoraadicione
essecdigonoeventoStep:

Cdigo:Selecionartodos

//Mudaaposioxdoobjetoparaaposiodavarivelmeu_x
x=meu_x

Execute.Vocreceberumamensagemdeerro.Issoporqueavarivelmeu_xjnoexistemais.Elafoi
deletadaaofimdoeventoCreate(QueocorreantesdoStep).Ento,percebeuarelaodavarivelcomo
evento?
Paraterumaideiamaisclara,transfiraocdigoparaoeventoCreate,ondeelafoideclarada.Vejaque
funcionaperfeitamente.
Resumindo,avarivellocaldeeventousadaparareduziroconsumodememriadaaplicao.Ouseja,ele
nodeixaainformaoparadanamemriasemuso.Elamantmseuvalorporapenas1step(frame),depois
eladeletada.TantoqueseausssemosnoeventoStep,teramosquedeclarlasempreantesdeausar:

Cdigo:Selecionartodos

//Declaravariveltemporria
varmeu_numero;
//Guardaovalor5navarivel
meu_numero=5
//Moveoobjetoadicionando5aStepaox
x+=meu_numero

Constantes:
Umaconstanteumidentificadorquenopodeterovalormodificado,porissoonomedeconstante,valor
constante,ousejaquenomuda(Aocontrriodasvariveis).

Paravertodasasconstantes,vnabarrademenuecliqueemScriptsdepoisselecioneaopoShow
Constants.
EparaadicionarsuasprpriasconstantesvnaarvorederecursosecliqueemMacrosedepoisselecionea
opoAllConfigurations.Semprequequiseradicionarumanovacliqueeminsertedefinaonomee
ovalor:

Resumindo:
Varivellocaldeinstncia*spodesermodificadapeloobjetoemquefoicriada(*Oudeoutroobjeto
chamandoestequandoeleaindaexiste).
Varivellocaldeeventospodesermodificadanoeventoemquefoicriada.
Varivelglobalpodesermodificadaporqualquerobjetoeevento.
EasConstantesnopodemterseuvalormodificado
MUITOIMPORTANTE:
Nodosmesmosnomesparavariveisglobais,deinstnciaedeevento.Ex:

Cdigo:Selecionartodos

carro=5
varcarro;
carro=5
global.carro=5

Issovaicausarumasriedeerros.Logo,utilizenomesdiferentesparacadaumadostiposvariveis.O
mesmovaleparanomesdeconstantes,sprites,backgrounds,sons,paths,fonts,scripts,timelines,
objetoserooms.Todosdevemternomesdiferentes.

INTRODUOEMGML
Aula03OperaesMatemticas

(Atualizado08/02/2015)
Aquivouensinarausarasquatrooperaesmatemticas(adio,subtrao,divisoemultiplicao).
Aestruturafuncionadaseguinteforma:

Cdigo:Selecionartodos

[varivel][sinal]=[varivel,expressoounumero]

Adio:
Comovimosnaaulapassadaumavarivelpodeguardarnmerosentovamosfazeroseguinte:
CrieumobjetoeemseueventoCreatecoloque:

Cdigo:Selecionartodos

//pontuaoiguala0
pontos=0

Agoranostepcoloque:

Cdigo:Selecionartodos

//somando1ponto
pontos+=1

ComooStepumeventoconstante,elesemprevaiocorrerenquantoesteobjetoexistir."+"osinalde
adio,entoonmeroaumentar.
Masparapoderveroqueestaocorrendo,vamosusarumcdigonoeventodedesenhos,oDraw:

Cdigo:Selecionartodos

draw_text(10,10,pontos)

Issodesenhaumtextonatelainformandoovalordavarivelnaposiox10ey10naroom.
Noprocureentenderessecdigoagora.Faaoseguinte,coloqueesseobjetonaroomevamosveroque
acontece.Execute.
Depoisdeexecutarvocdevetervistoumnmeroaumentandosempararnocantoesquerdosuperiorde
suatela.Essaaadioemao.Lembrandoquevocpodeusarnmerosmenoresque1,como0.25e
nmeromenoresque0,como1,7eetc(Fazendoojogosesinal).Noapaguenada,usaremosesse
mesmoobjetonaprximaoperao.
Subtrao:
Substituaocdigodostepporesse:

Cdigo:Selecionartodos

//subtraindo1ponto
pontos=1

Agoraexecuteelenovamente.Dessavezvocveronmerodiminuindoeficandonegativo.aSubtrao
emaoseusinal"".
Multiplicao:
AindanomesmoobjetosubstituaocdigodoCreatepor:

Cdigo:Selecionartodos

pontos=2

Fazemosissopoissemultiplicarmos0poroutronmeroelecontinuar0(0*5=0).
Nomesmoobjetodeleteoeventostep,eadicioneoeventoKeypress>Spaceecoloqueoseguintecdigo:

Cdigo:Selecionartodos

//multiplicandopontospor2
pontos*=2

Executeojogoenoaperteespaomuitasvezes,poisonmerochegaraoseulimiteeojogotravar.
Nessaoperaoosnmerosaumentamrapidamente,amultiplicaoemaoeseusinal"*".
Diviso:

Continuandonomesmoobjeto,substituaocdigodocreateporeste:

Cdigo:Selecionartodos

//pontosiniciaisiguala10000
pontos=10000

SubstituaoqueestanoKeypress>Spacepor:

Cdigo:Selecionartodos

//dividindopontospor2
pontos/=2

Depoisdeterexecutado,vocdeveterpercebidoadivisodonmeroatchegarem0,essaadivisoem
aoeseusinal"/".Ecomo0divididopor0iguala0,eleparaporai(Aconteceumerro,poisnadapode
serdivididopor0).
Consideraes:
Vejaqueusamosasoperaesdiretamentenasvariveis,modificandoas.Masesequisermosqueo
resultadodadivisode5por2vparanossavarivel?
Simples,fazemosisso:

Cdigo:Selecionartodos

//Pontosterovalorde5divididopor2,que2.5
pontos=5/2

Tambmpodemosusaroutrasvariveiseobteroutrosresultados:

Cdigo:Selecionartodos

//Pontosterovalordadivisodovalordavarivelscoreem2
pontos=score/2

Cdigo:Selecionartodos

A=5
B=4
C=A+B

Notequenousamosooperador"="juntocomooperadormatemtico.Casousssemosaconteceriaum
erro.
Vocpodeusarparentesesparadefiniraordemdasoperaes:

Cdigo:Selecionartodos

A=5
B=3
C=(A+B)/2

Ouseja,primeiramentesomaA+Bedepoisdivideseuresultadopor2.Casoestivessesemparentesesa
divisoiriaserexecutadaprimeiro,ousejaBdividopor2somadoaA.
Operadoresdivemod:
Sooperadoresdediviso,massodiferentesde"/".
div:retornaumvalorinteirodadiviso:

Cdigo:Selecionartodos

valor=5div2

Oresultadoseria2,5emumadivisonormalcom"/".Mascomosretornaumnmerointeirooresultado
2.
mod:retornaorestantedeumadiviso:

Cdigo:Selecionartodos

valor=5mod2

Eleretornaoqueodivignora,ousejaoRESTOdadivisoque1.Equandoadivisoexata0
retornado,poisnohsobra.

comoentregar50balaspara20crianas,vocd2paracadaumaeficacom10.
Comentrios:
Comodeveterpercebidonoscdigos,semprecoloco"//"eumafraseexplicandoocdigo,essessoos
comentriosenoinfluenciamnadanojogo,depoisdepor"//"orestodalinhaaserdigitadoserum
comentrio.Htambmcomocomentaremblocosdefinindooinciocom"/*"eofimcom"*/".
Exemplo:

Cdigo:Selecionartodos

//Estlinhanoservepranada
minha_var=50
/*Aquieupossopularumalinha
Econtinuaracomentar,issoestandodentrodoblocodecomentrios.
*/

INTRODUOEMGML
Aula04If/WhileeExpresses

(Atualizado08/02/2015)
IF:
umaestruturadechecagemcondicionalqueemportugussignifica"se".Agoraexplicareiumaestrutura
bsicadecdigousandoif:

Cdigo:Selecionartodos

ifvariavel==0
{
variavel2=100
}

Traduo:

Cdigo:Selecionartodos

Sevariaveliguala0oqueestaentrechavesacontece,ouseja,variavel2ig
uala100.

Vamosfazermaisumexemplosimples.OSuperMariotemduasvariveisbemconhecidas,moedasevidas.
Paraseconseguirumavidacoletandomoedas,temqueconseguir100destas.
Baixeaseguinteengine:
[GM:S]DOWNLOADDAENGINE
[GM8]DOWNLOADDAENGINE
Nelaamovimentaodopersonagemestpronta.Nosepreocupeementenderessescdigosde
movimentoegravidade,poisnasprximasaulasestareiensinandoamovimentao.
NoeventoOther>>GameStartdocontrolecoloque:

Cdigo:Selecionartodos

//Nmerodevidas
global.vidas=3
//Nmerodemoedas
global.moedas=0

Ouseja,semprequeojogoiniciaropersonagemter3vidase0moedas.
Agoranostepvamosfazerumachecagemdevariveis,ecomoostepconstanteelesempreestar
checando:

Cdigo:Selecionartodos

//Semoedasformaiorouiguala100
ifglobal.moedas>=100
{
//Retira100moedas
global.moedas=100

//Ganhaumavida
global.vidas+=1
}

Vocdeveterpercebidoousodo">"nestecdigo,emmatemticasignificamaiorque,tambmtemo"<"
(menorque),eadicionamosestesmboloantesdosinaldeigual.Explicareimelhorissomaisabaixo,
emExpresses.
Colocamosesseoperadoraliporquesevocaumentaronmerodemoedasmuito
rpido,global.moedaspodepassarde100.Sefosse"ifglobal.moeda=100..."ocdigonofuncionariabem,
poisssefosseexatos100queaoutraexpressoaconteceria.
Naenginetemumobjetochamado"moeda",cuidado!!!Nuncadenomesdevariveiseobjetosequalquer
outroelemento(background,sprite,sons,rooms,fonts,pathseetc)iguais,senoaconteceroerros.Ex:voc
nopodedaromesmonomeaumaspriteeaumobjeto.
Entovocpercebeuagora,porqueavarivelsechama"global.moedas"eoobjeto"moeda"?
NesseobjetomoedaadicioneoeventoCollisioneselecioneoobjetoplayerecoloqueoseguintecdigo:

Cdigo:Selecionartodos

global.moedas+=1

instance_destroy()

Ouseja,ganhamos1moedaeainstanciadeobjetomoedaserdestrudaquandocolidircomoplayer.
Agoraparavermosasvariveisvamosaoobjetocontroleparadesenharasnossasvariveis.Sempreuse
umobjetoseparadoparadesenharcoisascomopontuao,vidaseetc.
NoeventoDrawdoobjetocontroleabraoeditordecdigosecoloqueoseguintecdigo:

Cdigo:Selecionartodos

draw_text(10,10,"Vidas:"+string(global.vidas)+"#"+"Moedas:"+string(glob
al.moedas))

Essecdigodesenhaasvariveisglobal.vidaseglobal.moedas.
Quandofordesenhartextossempreoscoloqueosentreaspas"texto".Ejaqueestamosdesenhandotextos,
tivemosqueconvertervaloresreais(nmeros)emstrings(palavras)usandoafunostring(str).
"#"serveparapularumalinha.Esemprequeforadicionarmaisdeumtextoemaisdeumavarivel
intercaladosusaseosomandoseusvaloresparaformarumnovotexto.
Agoratestemsuasengines,paravercomosaramosresultados.Casotenhasadoalgoerradobaixeesta
outraenginequeestacompleta:
[GM:S]DOWNLOADDAENGINE
[GM8]DOWNLOADDAENGINE

WHILE:
whilequaseigualaoif,shumadiferena:
Imaginetodoojogocomoumcicloqueocorreinfinitamente.Quandoesseciclopassapeloifelefaza
checagemnormalmente,independenteseacondioforverdadeiraounoecontinuaseminterromperesse
ciclo.
Jquandoociclopassapelowhile(queumciclotambm),ociclopausaatqueacondiovinculadaaele
sejafalsa.Exemplo:
Crieumnovoprojeto.
Adicioneumnovoobjetoeumnovaroom.
NoCreatedoobjetocoloque:

Cdigo:Selecionartodos

moeda=0
ifmoeda<100
{
moeda+=1
}

NoDrawcoloque(parasabermosovalorfinaldavarivelmoeda):

Cdigo:Selecionartodos

draw_text(10,10,moeda)

Insiraoobjetonaroomeexecute.
Ovalordavarivelmoedamostrado1.IssoporqueoCreateocorreapenasumaveznoiniciodociclodo
objetoesdeutempodechecaracondioumanicavez.
AgoratroqueoIFporWHILEeexecutenovamente.
Repareque:
Atelaficapretaporalgunsinstantes(Essaapausanocicloprincipaldojogo,aguardandoociclowhile
acabar).
Ovalordemoedaagora100.
Ouseja,owhilesegurouoCreateatqueavarivelmoedanofossemaismenorque100.
Muitocuidadoaousarowhile,seacondionuncaficarfalsaojogovaificartravado.

EXPRESSES:
Vimosqueparaifewhilefuncionarem,anteseleschecamumacondioparaqueoqueestdentrodas
chavesocorra.
Essacondioumaexpresso.Asqueusamosatagoraforamsimples,mashformasdechecarmaisde
umacondioemumamesmaexpresso,eaindausarumaexpressoemumaoperaoaritmtica.
Paraquefiquetudomaisorganizado,pegueocostumedeusarparentesesnassuascondies.Ex:
if(moedas>=100)...

Anossaexpresso(moedas>=100),elaretorna1(true)ou0(false)paraoif.Ousejaumvalorbooleano.
Operadoresdecomparao:
>maiorque
<menorque
>=maiorouigualque
<=menorouigualque
==iguala(diferentedeapenas=,quesignificaatribuio)
!=diferentede
Agoravamosasexpressescompostas:
AND:

Cdigo:Selecionartodos

if((energia>50)and(arma==3))
{
energia=50
}

Nessecdigoaaosaconteceseduascondiesforemsatisfeitas,termaisde50deenergiae
aarmaser3.Seumadasduasforfalsaaaonoocorre.Usamosooperadorandquefazcomquedois
ladosdeumacondiotenhamqueserverdadeirosparaaaoocorrer.
OR:

Cdigo:Selecionartodos

if((cor==c_red)or(cor==c_orange))
{
cor_quente=true
}

Nessaexpressonecessrioqueapenasumacondiosejaverdadeiraparaqueaaoocorra.Usamoso
operadororquefazcomquepelomenosumdosladosdeumaexpressotenhaqueserobrigatoriamente
verdadeiroparaaaoocorrer.
Comovimosexpressesnosdevolvem1ou0comovalor.Podemosusarissoparasimplificarcdigos:

Cdigo:Selecionartodos

x+=(anda==true)*5;

Ouseja,casoandaterovalor1oobjetovaimudardeposioem+5.Reparetambmqueestouusando"==
true"nasexpresses.Naverdadeseeuqueroverificarseelaverdadeira,noprecisoadicionarnada.Daio
cdigoseria:

Cdigo:Selecionartodos

x+=(anda)*5;

Obteremosomesmoresultado.amesmacoisacomoexemplodasmoedas.Seeuquisessepoderiater
feitoassim:

Cdigo:Selecionartodos

if(moedas>=100)==true
{
}

Squedesnecessriochecarseela"verdadeverdadeira",sacaram?Masquandoqueremoschecarse
aexpressofalsanodevemosomitiro"==false".
Enfimterminamosmaisessa!

INTRODUOEMGML
Aula05ElseeSwitch

(Atualizado08/02/2015)
ELSE:
umapalavraeminglsquesignifica"seno".NoGameMakerelausadaemconjuntocomo"if".
Ex:

Cdigo:Selecionartodos

//semoedasformaiorouiguala100
ifmoedas>=100
{
moedas=0
vidas+=1
}
else//seno
{
moedas+=2
}

Ousejasemoedasnoformaiorouiguala100adicionarmaisduasmoedas.Paraveroresultadodisso
coloqueocdigoacimanostepeissonocreate:

Cdigo:Selecionartodos

vidas=0
moedas=0

Eissonodraw:

Cdigo:Selecionartodos

draw_text(10,10,"Vidas:"+string(vidas)+"#"+"Moedas:"+
string(moedas))

Testeevejaoresultado.
Voctambmpodeadicionarvrioselsesseguidosemconjuntocomif:

Cdigo:Selecionartodos

iftipo==0//sefor0
{
forca=10
}
elseiftipo==1//senofor0efor1
{
forca=20
}
elseiftipo==2//senofor0ou1efor2
{
forca=30
}
else//senofornenhum
{
forca=0
}

Umavezusadoelseifnaestruturaoelsesozinhospodeaparecernaltimacondio.

SWITCH:
Quandousamosmuitoselseeifseguidospodemosficarumpoucoperdidos.Aestruturaswitchumaforma
simplesedinmicadeorganizareotimizarocdigo:

Cdigo:Selecionartodos

switchtipo//Expressochecadaseravariveltipo
{
case0://casofor0
forca=10
break;
case1://casofor1
forca=20

break;
case2://casofor2
forca=30
break;
default:forca=0;//casofornenhum
}

casemarcaoiniciodeumblocoebreakofim.
ExemplodoGM:

Cdigo:Selecionartodos

switch(keyboard_key)
{
casevk_left:
casevk_numpad4:
x=4
break
casevk_right:
casevk_numpad6:
x+=4
break
}
Repareque:
Osdoispontos(:)sonecessrios,jopontovirgula()noobrigatrio.
Odefault(padro)usadocasonenhumdoscasosocorrer.
Vocpodeusar2casosoumaisparaapenasumresultado.
Suasdeclaraesdevemficarentreosdoispontos(:)obreak.

INTRODUOEMGML
Aula06For,do,untilerepeat

(Atualizado08/02/2015)
FOR:
umcicloassimcomoowhile.Masesteconfigurvel.Elepoderealizarvriasrotinassimultaneamente.
Essaestruturausadaparapouparotamanhodocdigo.Masnosparaisso,servetambmparater
controlesobrevrioselementosusandoumcurtocdigo.
Ex:
Sequisermosdesenhar10crculosalinhadoshorizontalmentecomespaosde64pixelsentreseuscentros
natela,faramososeguintecdigo:

Cdigo:Selecionartodos

//Escolheacorvermelha
draw_set_color(c_red)
//Desenhacirculos
draw_circle(0,32,32,false)
draw_circle(64,32,32,false)
draw_circle(128,32,32,false)
draw_circle(192,32,32,false)
draw_circle(256,32,32,false)
draw_circle(320,32,32,false)
draw_circle(384,32,32,false)
draw_circle(448,32,32,false)
draw_circle(512,32,32,false)
draw_circle(640,32,32,false)

Comofaleiantesoforpoupaotamanhodocdigoecriarotinassimultneas,entosequisssemosusar
ofornocdigoseriasimplesmenteisso:

Cdigo:Selecionartodos

//Escolheacorvermelha
draw_set_color(c_red)
//Criaciclo
for(varxx=0;xx<640;xx+=64)
{
//Desenhacirculos
draw_circle(xx,32,32,false)
}

Entendeu?Non.
Aestruturadofordivididadaem3partes:
Inicializao:declaramosumvalorinicialpraumavarivel(varxx=0)
Condioparacontinuaodociclo:defineumacondioparafimparaociclo(xx<640)
incrementodavarivel:Aumentaoudiminuiovalordavarivelparaqueemalgummomentoelano
satisfaamaisacondio(xx+=64).
Emtodasasposiesemquexxpassou(0,64,128,192,256,320,384,448e640)serdesenhadoocirculo
vermelho.
Resumindo:enquantoxxnoformenorque640,seroadicionadosmais64aoxxatqueeleno
sejamenorque640.Eemcadapassoqueelefezparachegarlaserdesenhadoumcirculovermelho.
Desenhandoumalinhausandopontos:

Cdigo:Selecionartodos

//Criaciclo
for(varyy=0;yy<100;yy+=1)
{
//Desenhapixel
draw_point(10,yy)
}

Elefezumalinhaverticalde100pixelscerto?
Agoraficoumaissimplesn?Esperoquetenhamaprendido,porqueumpoucocomplicadoexplicaroFor,
atmesmopraquemsabeusalo!XD.
Lembrandoqueoforumciclotambm,entoquandoeleforexecutadoelevaipausarociclodoobjetoat
quesuaexpressosejafalsa.

DOeUNTIL:

Essessosempreusadosemconjuntoetambmfazemumciclo.Exemplo:

Cdigo:Selecionartodos

do{moeda+=1}untilmoeda>=100
Traduzindo:faa{moeda+=1}atquemoeda>=100
Issofazcomquesejaadicionado1atqueavarivelmoedasejamaiorouiguala100.Lembrandoquea
aoocorrepelomenosumavezjqueacondiochecadadepoisdamesma.Logo,independentede
moedassermaiorque100,omoedas+=1ocorreraomenosumavez.

REPEAT:
Muitosimples.Essaexpressorepeteumblocodecdigoonmerodevezesquevocdesejar:

Cdigo:Selecionartodos

//Repete10vezes
repeat(10)
{
//Criaumainstanciadetiro
instance_create(x,y,tiro)
}
repete10vezesocdigoentrecolchetes,criando10instanciasdeobjetotirodeumavez.

INTRODUOEMGML
Aula07FuneseScripts

(Atualizado08/02/2015)
Umafunochamadaporumnome,econtmzerooumaisargumentosdentrodeparnteseseseparados
porvrgulas.
Exemplo,instance_create(funoquetemvariosargumentos):
Cdigo:Selecionartodos

//nome_da_funo(argumento1,argumento2,argumento3)
//criando_objeto(posiox,posioy,nomedoobjeto)
instance_create(x,y,obj)

Exemplo,instance_destroy(funoquenotemargumentos):

Cdigo:Selecionartodos

//nome_da_funo()
//destruir_instncia()
instance_destroy()

OGameMakerpossuivariasfunesprontasparauso.Paravertodas,vanomenuscripts>ShowallBuilt
inFunctions.
QuandovocdigitapartedeumafunodoGM,elebuscaasfunesmaisprximasdoquevocdigitou,
comonaimagemabaixo:

Digiteisomenteobject_eelejaprocurouelistoutodasasfunesquecomeamcomobject_.Casoa
funoquevaiusarjatenhaaparecidolaembaixo,decliquenelaeelacompletadanoseucdigo.Assim
vocpoupamaistempodigitando.
Scriptscriandofunes:
Qualquerscriptquevoccrieumafuno.Osscriptssonecessriosparapouparrotinasextensase
otimizarocdigo.
Aocriarumscript,dumnomeele.Exemplo,vamoscalcularoIMC(ndicedemassacorporal)queo
peso/altura.

Cdigo:Selecionartodos

//calcula_imc(peso,altura)
imc=argument0/(argument1*argument1)
returnimc

Repareque:
argument0(representaopeso)oprimeiroargumento(peso)dafunoeargument1(altura)osegundo
argumento.
Guardamosoresultadonavarivelimc.

Retornamosovalordeimcparaafuno.
Oreturnserveparaquepossamosutilizarafunocomosefosseuma"varivel":

Cdigo:Selecionartodos

Meu_IMC=calcula_imc(82,1.80)

OvalordavarivelMeu_IMCseroquefoiretornadonafuno.Ouseja,ovalordavarivelimc.
Htambmasfunesquenoretornamumvalorsignificativo(Retorna0ou1,quenuncamudam).Por
exemplo,voctemumarotinaondehmuitocdigoqueusadoemvariassituaes,masnomudamuito.
Elenocalculanadaeservesomenteparacriarumaao:

Cdigo:Selecionartodos

//cria_explosao(som,objeto)
//Tocaosomdeexploso
sound_play(argument0)
//Criaoobjetoexploso
instance_create(x,y,argument1)

Usariaassim:

Cdigo:Selecionartodos

cria_explosao(sd_explosao,obj_explosao)

Noretornamosnenhumvalor(Porquenoprecisavamos)etodasituaoqueemquecriarmosuma
explosoocdigosermenorepersonalizvel,podendoescolherosomeoobjetodaexploso.
Vocpodeusarat16argumentosdentrodeumscript(deargument0argument15).
Nasprximasaulasveremosmuitasoutrasfunes.EparasaberoqueasfunesembutidasnoGame
Makerretornam,vejaoHELP(F1).

INTRODUOEMGML
Aula08ObjetoseInstncias

Atualizada(25/02/2015)
Objetos:
Rapaz,essaumaaulaessencial,prestaatenonela!umtantolonga,entonoprecisavertudodeuma
vez.
Hojeiremosaprenderosistemabaseemquesoinseridosnossoscdigos,osobjetos.
Suadefiniopodevariardependendodalinguagem,masoessencialvocsaberqueumobjetocontrolaos
aspectoslgicosdonossojogo,tantovisveis,comoinvisveis.
Exemplosdoquepodeserumobjeto:
Mario
Inimigo
Moeda
Controladorqueescolhequemsicadevetocaremqualfase.
Aocriarumobjetonanossaarvorederecursosnosdeparamoscomoseguinte:

Name:aquidamosumnomeaoobjeto.
Sprite:definimosumaimagemdapastaSpritesparaoobjeto.OsbotesNEWeEDITsoatalhosparacriar
umanovaspriteoueditaraqueestselecionada.
Visible:Seesteobjetoiraparecerduranteaexecuodojogo.IssoincluioseventosDrawdoobjeto.
Solid:Seesteumblocoquenosemove,comochoouparede,marqueestaopo.Assimafsicabsica
dojogotrataresseobjetodeformadiferente,tentandoimpedirqueoutrosoatravessem.
Persistent:Issomudaocomportamentodoobjetoduranteapassagementreumaroomeoutra.Quando
trocamosderoom,todososobjetosdaroomanteriorsodeletadoseosdanovaroomaparecem.A
persistncia,fazcomqueoobjetonosejadeletadonessapassagemderoom.Todassuascaractersticas
sopreservadas,comosuaposioporexemplo.Eleumobjeto"teimoso"xD.
UsePhysics:SelecioneissoseforusaroSistemadefsicadoGMS.
Depth:Aquisedefineaprofundidadeemquedesenhadooobjeto.Todostemporpadroovalor0,eoque
vaidefinirseumobjetodesenhadosobreoutroaordemdecriao:

porissoqueexisteessaopode"camada".Colocandoumavalormenoroobjetoserdesenhadopor
cima,colocandoumvalormaioreleserdesenhadoatrs:

Parent:Aquivocescolheumpaiparaseuobjeto.Esseobjetoirherdartodasasconfiguraesecdigosdo
seupai.Logoeleumfilho.Vamosdizerquetutemuminimigoequercriaroutro,masestetemapenasa
spritediferente.Emvezdeescrevertodoocdigonovamente,tusimplesmentedefineonovoobjetocomo
filhodoinimigo,mudandoapenasasprite.
Mask:Quandovoccriaaspritequeirusarnoobjeto,aoladojpodeconfiguraramascaradecoliso.Por
padroamascaraareatotaldaimagem,ousejaumretngulo.Maspormuitasvezesvoctemum
personagemcomvriasspritesemdiversosmovimentos,etodaselasdedimenses(alturaxlargura)
diferentes.Issosetornaumproblema,poisnahoradamudanadasspritesopersonagempodeficarpreso
aocho,poisaspritedepuloeramaisaltaqueanormal.ResolvemosissousandoumaSpritecomomscara
decoliso.Escolhemosgeralmenteumaretangularnoanimada.

Eventos:
Aocentrotemosocontroledeeventosdoobjeto,trataremosdissoamplamentenaprximaaula.Masfique
comesseresumofixonacabea:
Create:ocorreapenasumavez,quandoobjetocriado
Step:ocorreotempotodoenquantooobjetoexistir
Draw:ocorreotempotodo,masusadoparainserirfunesdedesenho(draw_)

Aes:
Aoladotemosaesquepodemosadicionaraogame.HmuitosbloquinhosDrag&Drop,masusaremos
somenteodaabacontrol>Executeapieceofcode.aquiondecolocamosnossocdigoepodemos
fazertudoquefeitocomosoutrosbloquinhosdeaoeaindamuitomais.
Funes:

Cdigo:Selecionartodos

object_exists(obj);

obj:nomedoobjeto.
Verificaseumobjetoexisteounonaarvorederecursos(Nonaroom).
Exemplo:

Cdigo:Selecionartodos

//Seoobj_lutadorexiste
ifobject_exists(obJ_lutador)
{
//Mudaaposiohorizontaldoobj_lutadorpara32
obj_lutador.x=32
}

Cdigo:Selecionartodos

object_get_depth(obj);

obj:nomedoobjeto.
Pegaovalordeprofundidadededesenhodeumobjeto.
Exemplo:

Cdigo:Selecionartodos

//Seaprofundidadedoplayerformaiorque50
ifobject_get_depth(obj_player)>50
{
//Aprofundidadedoplayerser50
obj_set_depth(50,player);
}

Cdigo:Selecionartodos

object_get_mask(obj);

obj:nomedoobjeto.
Retornaaspritequeestsendousadacomomascarapeloobjeto.
Exemplo:

Cdigo:Selecionartodos

//Pegaamscaradoobjetoluigi
mask_index=object_get_mask(luigi)

Cdigo:Selecionartodos

object_get_name(obj);

obj:nomedoobjeto.
Retornaonomedoobjetoselecionadoemumastring.
Exemplo:

Cdigo:Selecionartodos

//Guardaastring"player"navarivelmeu_nome
meu_nome=object_get_name(player);

Cdigo:Selecionartodos

object_get_parent(obj);

obj:nomedoobjeto.
Retornaoobjetoquepaidoobjetoselecionado.
Exemplo:

Cdigo:Selecionartodos

//Pegaopaidoobj_inimigo_3
pai_do_outro=object_get_parent(obj_inimigo_3)

Cdigo:Selecionartodos

object_get_persistent(obj);

obj:nomedoobjeto.
Retornaseoobjetopersistente(true)ouno(false).

Cdigo:Selecionartodos

object_get_solid(obj);

obj:nomedoobjeto.
Retornaseoobjetoslido(true)ouno(false).

Cdigo:Selecionartodos

object_get_sprite(obj);

obj:nomedoobjeto.
Retornaaspriteescolhidainicialmentepeloobjetoselecionado.Simaqueladajaneladepropriedadesdo
objetodiferntementedosprite_indexquepegaaspriteusadanomomento.

Cdigo:Selecionartodos

object_get_visible(obj);

obj:nomedoobjeto.
Retornaseoobjetovisvel(true)ouno(false).

Cdigo:Selecionartodos

object_get_physics(obj);

Retornaseoobjetousafsica(true)ouno(false).

Cdigo:Selecionartodos

object_is_ancestor(obj);

obj:nomedoobjeto.
Retornaseoobjetopaideoutrosobjetos(true)ouno(false).

Asfunesdotipo_set_,aoinvsdepegaruminformaoatribuem.Sendooprimeiroargumentoovalor,eo
segundooobjetoselecionado.
Exemplo:

Cdigo:Selecionartodos

ifdesaparecer==true
{
object_set_visible(false,obj_bloco);
}

Lembrandoqueessasfunesalteramascaracteristicasdetodasasrplicasdesseobjeto.Ousejaas
instancias,queveremosabaixo.

Instancias:
Vocdeveterreparadoquepodemosadicionarquantasrplicasquisermosdenossosobjetosnoeditorde
roomsdoGMS,certo?Onomedadoaessasrplicasinstanciadeobjeto.

Vejamosasfunes:

Cdigo:Selecionartodos

instance_change(obj,perf);

obj:objetoasertrocado.
perf:SeirexecutaroeventoDestroydoantigoobjetoeoCreatedonovo.

Trocaoobjetoatualporoutro.
Exemplo:

Cdigo:Selecionartodos

/*Trocaparaoobjetoplayer_morrendosemexecutaro
eventoDestroydoobjetoanterioreoCreatedoobjeto
novo.*/
instance_change(player_morrendo,false);

Cdigo:Selecionartodos

instance_copy(perf);

perf:Irexecutarocreatedanovacpia(trueoufalse).
Essafunocriaumacpiaexatadainstanciaatual,comtodosseusvalores(Incluindoaposio).Vocpode
escolhersequerounoqueocreatedacpiaacontea.
RetornaoIDdacpiacriada.

Cdigo:Selecionartodos

instance_count

Estavarivelretornaaquantidadedeinstnciasdequalquerobjetoativas.

Cdigo:Selecionartodos

instance_create(x,y,obj);

x:posiohorizontalondesercriadoonovoobjeto.
y:posioverticalondesercriadoonovoobjeto.
obj:objetoasercriado.
Criaumanovainstnciadeobjetoemumadeterminadaposio.

RetornaoIDdainstnciacriada.
Exemplo:

Cdigo:Selecionartodos

//Criaumainstanciadeobj_balaelheatribuivelocidadehorizontal10.
vartt=instance_create(x,y,obj_bala);
tt.hspeed=10;

Cdigo:Selecionartodos

instance_destroy();

Destriainstncia.

Cdigo:Selecionartodos

instance_exists(obj);

obj:objetoouinstnciaaserchecado.
Checaseexisteumobjetoouumainstanciadeobjeto.Retornatruecasosimefalsecasono.
Exemplo:

Cdigo:Selecionartodos

//Senoexistirpelomenosuminstnciadoobj_iminigo
ifnotinstance_exists(obj_inimigo)
{
room_goto(fase_10);
}

Cdigo:Selecionartodos

instance_find(obj,n);

obj:nomedoobjeto.
n:numerodaordem.
Procuraumainstanciadeobjetodadaasuaordem(Domaisvelhoaomaisnovo)comeandoporzeroe
terminadono[totaldeinstancias1].
RetornaaIDdainstanciaencontrada.
Exemplo:

Cdigo:Selecionartodos

/*Procuratodososobjetoseverificasepassoudaparteinferiordaroom,
casoalgumasimelevaipracima*/
for(vari=0;i<instance_number(obj_inimigo);i+=1)
{
varo=instance_find(obj_Enemy,i);
ifo.y>room_height{o.vspeed=15;}
}

Cdigo:Selecionartodos

instance_furthest(x,y,obj);

x:posiohorizontalondeserchecadoadistnciadoobjeto.
y:posioverticalondeserchecadoadistnciadoobjeto.
obj:objetoaserchecado.
RetornaaIDdainstnciadeobjetomaislongedaposiodada.
Exemplo:

Cdigo:Selecionartodos

varlonge=instance_furthest(x,y,obj_inimigo);
//Destriainstanciadeobj_inimigomaislonge
with(longe)
{

instance_destroy();
}

Cdigo:Selecionartodos

instance_id[0...]

Vetor/Arrayqueguardatodasasinstanciasdetodosobjetosativasnaroom.
Exemplo:

Cdigo:Selecionartodos

for(vari=0;i<instance_count;i+=1;)
{
with(instance_id[i]){speed+=5;}
}

Cdigo:Selecionartodos

instance_nearest(x,y,obj);

x:posiohorizontalondeserchecadoadistnciadoobjeto.
y:posioverticalondeserchecadoadistnciadoobjeto.
obj:objetoaserchecado.
RetornaaIDdainstnciadoobjetomaisperto.
Exemplo:

Cdigo:Selecionartodos

varperto=instance_furthest(x,y,obj_inimigo);
//Segueinstanciadeobj_inimigomaisperto
mp_potential_step(perto.x,perto.y,5,0);

Cdigo:Selecionartodos

instance_number(obj);

obj:objaserchecado.
Retornaonmerodeinstanciasdedeterminadoobjeto.

Das könnte Ihnen auch gefallen