Beruflich Dokumente
Kultur Dokumente
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.