42
ulation is running) current game time; ol ollisions and collision time me es s; ; ve c collisions. h co oll lliding pair i, j) ) // Cálculo a an nt te es es d d da a po po si si içã çã o o de de e c c col ol olis is são ão o e e e e Vect V Vect t V Vect tor o or or or3D or o or r V_i V nit[ t[ [ [ [N N N N] = N N ini n tial tial vel el l elocit ocit t t o ies; ; ; es V V Vect V V or3D or3D r3 r3 3D 3D p_i p nit[ [ [ nit[ [N N N] = ] = N] N N ini n in tial al cen cen n nter ter ter r r posi posi s s tion t ons; s; s; V V Vect V or3D D D D g(0 g g g g g g g g .0, , .0, , 0 0 0 0.0, -9. 9 81); ; float mas m s[N] [ [N] [N s[N] N N = p = p = p = p = p =p = p parti article c cle cle mass mass mass ass mass as es; es; es; es; es es; e es float tim tim ime_in e_in i e in i i i it[N it[N it[N N N] ] ] = ] = per r part art t rticle ic cle sta st st st st s rt t t t t ti i imes m im ; float float float oat a a eps eps eps eps s s s s = = = = c = coe oefficien ent of of f f res re titu u u utio tion n; ; // L / / // L // L / oop o prin n principa a a al do l d l d d l do jog g o/re ender nd izaç za za za a a ão. ão ão ão o whil whi whil w w while e (g e (g e e e (game me ame ame e simu simu mu simu mu ul lati lati lati l on i on on i on i on o o on s s ru ru s s ru runnin nnin nnin ng g g) g) g) ) ) g) { { float o t = = cur cur cur ur ur rrent gam gam m ga e e time me; me; e; e; e dete det dete et ct c ct c coll oll oll olli lisio sion sion sion sio sio s an an nd d co d collis llis l lli ll ion o o ion o time times; s s; s; s // R // // R // Resol esol o ve ve c e ve colli olli llisi sion on sion s s s. for r r for for (eac ac eac c (eac (eac ch co h co h co h co h co co co h collid i i llid lli id i i ing ing ing ng g pair air pa air p p i i, i i i, j) j j j j) j) ) j j j j) // // á ál á l d i ã d d d li ã VOLUME 2 Programação: técnica, linguagem e arquitetura Tradução da 2ª edição norte-americana DESENVOLVIMENTO DE INTRODUÇÃO AO STEVE RABIN (EDITOR) t g am am e t m me e; t i Ve Ve V Ve V V V V ct ct t t ct ct ctor or or or or or or or or or or o o o or r3D 3D 3D 3D 3 V V V V V V V V_i _i _i i ini n ni nit[ t[ [ [ [ [ t[ [ [ [ [ [ N] N] N] N] N] N] N] N] N] = i i ini ni ni ni ni ni ni ni i n t ti ti t ti ti tial al al al v v v v v v vel el el e e el e oc o o oc oc oc oc oc oc oc oc oc oc oc o o ocit it it i it it it i it i i ie i i i ie Ve Ve Ve Ve Ve Ve Ve Ve Ve Ve Ve Ve Ve Ve Ve e e e ect ct ct ct ct ct ct c ct ct ct t c ct c c c c or or or o or or or or or or or or or or r3 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3 3D D 3D 3D 3D 3D p p p p _i _i _i _i _i _in n ni n ni it[ t[ t[ t[ t[ t[ t[ [ t[ t[ t[ t[ t N] N] N] N] N] N] N N] N] N] N N] N] ] ] = = = = = = = i i i i ini ni ni niti ti ti tial al al a al al l l al c c c c c c cen en en en en e en en n n en n n nte te te te te t te te te te te er r r r r r po po po po po po po po po p p po p p Ve Ve Ve Ve e ec ct ct t t t t t t ct t t o o or or o o o 3D 3D D D D D D 3D D D D D D g g g g g(0 (0 (0 (0 (0.0 .0 .0 0 0 0 0 0 0 0 0 0 0 0 .0, , , , 0 0 0. 0 0 0. 0 0. 0. 0 0 0 0 0 0 0 0, 0 0, 0, 0 0 0 0 0 0, 0 - - - - - - - - - - - -9. 9. 9. 9. 9 9 9. 9 9 9 9 9 9. 9 9. 9 9 9 8 81 8 8 8 81 1 8 8 8 8 8 8 81 8 8 ); ); ); ); ); ); ; ; ; ; flo flo flo flo flo float at at t t t at t t t t at t t t t m m m m m m m m mas as as a as s as s a s[ s[ s[ s[ s[ s s[N] N] N] N] N] N] = = = = = = = = = = = p p p p p p p p p p p pa ar ar ar arti ti ti ti t ti ticl cl cl cl cl c c c e e e e e ma m ma ma ma m ma m m m ss ss ss ss ss ss s s s s s s s s ses es es es es es e e es es es es s e ; ; ; ; ; ; ; ; ; ; ; ; ; flo flo flo flo oat at at t t t t at at t t t tim im im m m m m me_ _ e_ e_ e_ e_in n nit it it it it t t[N [N [ [ [N [N [N [N [N [N [N [N [N N N N N N N N N] ] ] ] ] ] ] ] ] ] ] ] ] = = = p pe p p p pe p per pa a pa a a a a a art rt rt t t rt tic ic c ic c c c c c c c c icle le le le le le le le e s s s s s s s s s s s s sta t ta ta ta ta t t ta ta ta t t t ta t rt rt rt rt rt rt rt rt t t flo flo flo o o o o o o o o o o o o oat at at at at at at at at a at at at t t e e eps p ps s s = = c c c co o o o oe o ffi ffi ci ci ci ci ci ci ci ci cien en en en en en e en en en en en nt t t t t t t t t t t of of of of of of of f f f f of of of of f o r r r r r r r r res es es es es es s es es esti t ti ti ti ti ti t titu tu tu tu tu tu tu u tuti ti ti ti ti t ti tion on on on on on on o on on n n n n n; ; ; ; ; ; ; ; ; ; // // // // // // // / // / / / // // L L L L L L L L L L L L L L L Loo oo oo oo oo oo o oo oo o oo o oo o o o op p p p p p p p p p pr pr pr pr pr pr pr pr pr prin in in in in n n in in n in nci ci ci ci ci ci ci c c c ci ci c c c pa pa pa pa pa pa pa pa pa pa pa a pal l l l l l l l do do do do do do do do do do o o d d j j j j j j j j j jog og og og og g og og og g g g g g g go/ o/ o/ o/ o/ o/ o/ o/ o/ o/ o o o o re re re re re e e e e re e e r nd nd nd nd nd nd nd nd n n nd n n er er er er r r er riz iz iz z iz iz iz iz iz iz z z z z z zç wh wh wh w wh wh wh wh wh wh h wh w whil il il l l l l le e e e e e e e e e e e e e e e e e (g (g (g (g (g (g (g (g (g (g (g (g (g (g ( ( ( am am am am am am am am am am am am am am m m m am me e e e e e e e si si si si si si si si i s s si s mu mu m mu m mu mu mu mu mu mu mu mu mu mu mu mu ula la la l la la la la la la lati ti ti ti ti ti ti ti ti ti ti ti ti t ti t ti i i ion on on on on on on on on on on o on on on o on n n on n i i i i i i is s s s s s s s s s s s ru ru ru ru ru ru ru u ru r r r ru r r r r r nn nn nn nn nn nn nn nn nn nn n n n n n nin in in in n in in in n in in in in in n n n in n n ng) g) g) g) g) g) g g g g g g g { { { { { { flo flo o flo flo flo o flo flo o flo flo o o o o oat a a at at at at at at at t at a at t at at t t t t t t t t t t t t t t t t t t t = = = = = = = = = = = = c c c c c c c c c c r r r ur ur ur r r r r r r rre re re re re re re re re e re r r re rent nt nt nt nt nt nt nt nt nt nt nt nt t t t nt n nt nt g g g g g g g g g g g g g g g g g g g g g g g gam am a a am am am am am am am am am am am am am am am am a am ame e e e e e e e e e e ti t t t ti ti ti ti ti t ti ti t ti ti ti ti t ti t t t ti ti t m m m m me me me me me me me me me me me me m de de de d de de de d d d d d d te te te te te te te te e e e te tect ct ct ct ct ct ct ct ct ct ct c c c c c c c c c c c c c c c c c c col ol ol ol ol ol ol ol ol ol ol ol ol olli li li li li li li li li li li li li li li lisi si si si si si s si si si si si si si sion on on on on on on on on on on on on on n n ns s s s s s s s s s s s s s s an an an an an an an n n n nd d d d d d d d d d d d d d co co co co co co co c c c ll l l ll l llis s is is s is s s si i i i i i i i i // // // // // // // // // // // // // / // // // R R R Res es es es es es s s s s s e es esol o ol o ve e ve e e ve e e e e e e c c c c c c c c c c c col o ol ol o ol o o o o li li lisi si si si si si s s sion on on on on n on on on on n n on o s. s s. s. s. s. s. s s. s s s s s s fo fo fo fo f fo f r r r r r (e (eac ac a a a h co o oll ll ll l ll llid id id id id din in ing g g g p p pa p pair ir i i i i i i i i j j) j) j) j) ) pi i = = p p + + 0 0 0 5 5 5 5 5 5 * * * * * g g * ( (tm tmti ti * * tm mti) i); ; ; cu u si siç ç oc ocid dad ade d de e e o o Eq Eq Eq Eq Eq Eq es s 4 e 5). ). m m t[j] ; ; pj j = p p p p p_ _i _ _ n nit[ t[ [j j] ] + ( (V V_ V_i ] * t tmti); ); pj = = p p + 0 0 0 0 5 .5 * * g g g * ( ( (t t tmt mti) i); vj vj v v vj = = V V V V i _i i i _in ni n n t[ [j] j] j] j] j] ] ] j] + + * t tm mti; // C // C // C // C / / // C á álc á álcu á culo lo a lo a ante es s nt tes da da pos p p po osi p p ç ção o o o o o o o ç de c de c de c de c c de colis olis olisão e o ão e ão e o // v / // veloc elo l eloc c e oc e c l l idad a e e de e obj obj j j i i ( (Eq Equa Equa Equ ua a a ações ç ções çõ ções 4 e e 5 5). 5 flo float floa oat at t t t t float oa tm tmt mt mt tmt t t t tmti= i = i = i = = i= i= i= i= = i time time time time me tim time t c co ol co col collisi isi s si is lis is is lis l ion - n - on - n - on n n on on n n o tim tim tim tim me in e_in e_in e e init[i it[i it[i it[i] ]; ]; ]; ] // C / // C / álcu ál l lcu álc l lo a o o ntes tes s da d d pos posi pos os posi p çã ção ção ção de colisão ão [j j] + (V_ (V_init init it[ [j j j] ] tm m m tmti); ti); 5 5 * *g g * *(tmt mti t *t *tmt mti) t t ; o o o o o o o o o o b b m m V V V V V V V V V V VO O O O O O O OL L L L L L U UME 2 Pr Pr Pr Pr Pr P Pr P P P og og o og gra ra r rama m ção: técnica, linguagem e arquitetura Tr Tr T Tr ad ad d a ão ã ã d da a 2ª edição norte-americana flo at tm mt mti i = = ti ti tim me me_c _co olli is si ion on on on - t tim im me e_ in init t t[i [i [i]; ]; ] ]; ]; float tmti = time_collision - time_init[i]; pi = p p p i in ni it[ t[ t[ [i] i] + + ( (V V V V V in in in in nit it it it t[ [i] * * tm tmti ti); pi = p nit[i] + (V init[i] * tmti) pi = pi = pi = p p i p p_i i[ it[ nit[ [ [i] ] i] + i (V_ V (V_ V V_ _init in t ini in [ [i] i i] ] i [ [ * tm * tm * * tm * * tm m m mti ti); ti); ; _init[i] + (V_init[i] * tmti); p pi = p = p + p p 0.5 5 5 5 * g g g g * ( * ( * ( * * tmti tmti t ti tm tm i * t t tmt mti) mti) mti) t t ; ; ; + 0.5 * g * (tmti * tmti); vi vi i = vi = vi = v v vi i Vi Vi V_i V_ V_i V_ V_i V nit it[ nit[ nit[ nit[ [ nit[ n i] + i] + i] + i] i] i] i] g * g * g* g* g * g * g g tm tmt mt mt t m tmt m mt mt m i i; i; ; i; _init[i] + + g * g g tmt t mti; i // velocid da ad ade e d de de e o ob bj bj i ( (Eq Equ ua uaçõ ções es es es 4 4 4 4 e e e 5 5 5) ). ). // velocidade de ob i (Equações 4 e 5) STE STE STE STE STE STE TE ST ST STE S S ST VE VE V V VE E R RABIN (E ED (ED ( (E ITOR)

Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

Embed Size (px)

DESCRIPTION

A indústria de games ainda é jovem e se encontra em um ritmo de expansão impressionante, com tendência a resistir a grandes crises econômicas, gerando oportunidades para novas ideias, novas formas de jogar e a necessidade de novos talentos para a indústria. Esse crescimento inspirou alguns dos especialistas mais brilhantes e respeitados da indústria de jogos a unir sabedoria e experiência para produzir esta obra, que aborda o desenvolvimento de um jogo, com a profundidade necessária para entender e apreciar o estado da arte dos processos tecnológicos.

Citation preview

Page 1: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

do jogo/renderização.ulation is running)

current game time;olollisions and collision timemeess;;

ve ccollisions.h coolllliding pair i, j))

// Cálculo aanntteeses dddaa popopppp sisiiçãçãççç oo dedee cccolololisissãoãoo eeee

VectVVecttVVecttoroororor3Doroorr V_iV nit[t[[[[NNNN] =NN inin tialtial velellelocitocittto ies;;;esVVVectVV or3Dor3Dr3r33D3D p_ipp_p_p nit[[[nit[[NNN] =] =N] NN ininin tialal cencennnter ter terrr posiposiss tiont ons;s;s;;VVVectV or3DDDD g(0gggggggg .0, , .0, , 0000.0, -9.9 81);;flflfloatfl masm s[N][[N][Ns[N]NN = p= p= p= p= p= p= ppartiarticle ccle cle massmassmassassmassas es;es;es;es;eses;ees;flflfloatflflflflflfl timtimime_ine_inie iniii it[Nit[Nit[NNN]]] =] = per r partarttrticleiccle staststststs rt tttttiiimesmim ;

floatfloatfloatoataa epsepsepsepsssss ==== c= coeoefficienent ofofff resre tituuuutiotionn;;

// L//// L// L/ oop o prinnprincipaaaal dol dl ddl do jogggo/reendernd izaçzazazaaa ão.ãoãoãoowhilwhiwhilwwwhilee (ge (geee (game meameamee simusimumusimumuullatilatilatil on ionon ion ionooon ss ruruss rurunninnninnninnggg)g)g)))g){{

floato t == curcurcurururrrent gamgammga ee timeme;me;e;e;edetedetdeteet ct cct ccollollollollilisiosionsionsionsiosio s ananndd cod collisllislllill ion ooion o timetimes;ss;s;s;

// R// // R// Resolesolo veve ceve colliollillisisiononsions ss.for rrfor for (eacaceacc(eac(eacch coh coh coh coh coco coh collidiillidlliidii ing ing ingngg g pairairpaairpppp ii, iii, j)jjjj)j))jjjj)

/////// ááláá l d i ã ddd li ã

Este livro foi elaborado por um timede vários profissionais com muita experiência na indústria de jogos.Cada um contribuiu de maneira profunda, cobrindo sua especialidade, para que o resultado fosse uma obra completa,com toda a área de desenvolvimentode jogos explorada.

EditorSteve Rabin

Autores• Bretton Wade• Chuck Walters• David Johnson• Ed Bartlett• Eric Lengyel• Graham Rhodes• Isaac Barry• James Boer• Jeff Selbig• Kathy Schoback• Leslie Stirling• Mark Peasley• Noel Llopis• Peter Lewis• Robert T. Bakie• Stephen Rubin• Sue Bohle• Syrus Mesdaghi• Tito Pagan• Todd M. Fay• Tom Forsyth• Tom Sloper• Tommy Tallarico

Outras obras

Desenvolvimento de gamesTradução da 2ª edição norte-americana

Jeannie Novak

Desenvolvimento de games com Macromedia® Flash® Professional 8Glen RhodesSérie Profissional

Design de games: uma abordagem práticaPaul SchuytemaSérie profissional

Introdução ao desenvolvimento de gamesVolume 1 - Entendendo o universo dos jogos

Tradução da 2ª edição norte-americana

Steve Rabin (ed.)

Programação de games com Java®Tradução da 2ª edição norte-americana

Jonathan S. Harbour

Próximos lançamentos

Introdução ao desenvolvimento de gamesVolumes 3 e 4

Tradução da 2ª edição norte-americana

Steve Rabin (ed.)

VOLUME 2Programação: técnica, linguagem e arquiteturaTradução da 2ª edição norte-americana

DESENVOLVIMENTO DEINTRODUÇÃO AO

STEVE RABIN(EDITOR)

t gamame t mmee;t

i

VeVeVVeVVVV ctctttctctctorororororororororororoooorr3D3D3D3D3 VVVVVVVV_i_i_iiininninit[t[[[[[t[[[[[[[N]N]N]N]N]N]N]N]N]] = iiininininininininiin ttitittititialalalal vvvvvvveleleleeele ocooocococococococococococooocitititiitititiiti iieiiiiessVeVeVeVeVeVeVeVeVeVeVeVeVeVeVeeeeectctctctctctctcctctcttcctcccc orororoororororororororororr33D3D3D3D3D3D3D3D3D3D3D33DD3D3D3D3D pppppppp_i_i_i_i_i_innninniit[t[t[t[t[t[t[[t[t[t[t[t[N]N]N]N]N]N]NN]N]N]NN]N]]]]]] ======= iiiiininininititititialalalaalalllal ccccccceneneneneneenennnennnntetetetetetteteteteteer r r r r r popopopopopopopopopppoppppVeVeVeVeeecctctttttttcttttooororooo 3D3DDDDDD3DDDDDD ggggg(0(0(0(0(0.0.0.000000000000.0,,,,, 000.000.00.0.0000000 0,00,0,000000,0 ------------9.9.9.9.999.999999.99.999 8818888118888888188 ););););););;;;;flflflofloflofloflofloatatattttatttttattttt mmmmmmmmmasasasaassassa s[s[s[s[s[ss[N]N]N]N]N]N] =========== ppppppppppppaarararartitititittiticlclclclclccc eeeee mammamamammammm ssssssssssssssssssssseseseseseseseeesesesesse ;;;;;;;;;;;;;floflofloflflflooatatatttttatat ttttimimimmmmmme__e_e_e_e_innnititititittt[N[N[[[N[N[N[N[N[N[N[N[NNNNNNNNN]]]]]]]]]]]]] === ppeppppepper paapaaaaaaartrtrtttrtticicciccccccccciclelelelelelelelee ssssssssssssstattatatatatttatatattttat rtrtrtrtrtrtrtrttt

flflofloflooooooofloooflooooatatatatatatatatataatatattt eeepsppsss == ccccoooooeo ffififififfififififificicicicicicicicicieneneneneneneenenenenennt t t tttttttt ofofofofofofofffffofofofoffo rrrrrrrrresesesesesessesesestittititititittitututututututuututititititittitionononononononoononnnnnn;;;;;;;;;;

///////////////////////// LLLLLLLLLLLLLLLLooooooooooooooooooooooooooop p p pp p pppp prprprprprprprprprprinininininnnininninncicicicicicicicccciciccc papapapapapapapapapapaapallllllll dodododododododododooodd jjjjjjjjjjogogogogoggogogoggggggggo/o/o/o/o/o/o/o/o/o/oooo rerererereeeeereeer ndndndndndndndndnnndnn ererererrrerrizizizzizizizizizizzzzzzzaçaçaçaçaçaçaçaçaççããããããwhwhwhwwhwhwhwhwhwhhwhwwhilililllllle e ee e e eee e eeeeeeee (g(g(g(g(g(g(g(g(g(g(g(g(g(g((( amamamamamamamamamamamamamammmmammeeeeeeee sisisisisisisisiisssis mumummummumumumumumumumumumumumuulalalallalalalalalalatititititititititititititittittiiiionononononononononononoonononoonnnonn iiiiiiissssssssss ss rururururururuururrrrurrrrr nnnnnnnnnnnnnnnnnnnnnnnnnnininininninininninininininnnninnnng)g)g)g)g)g)ggggggggg{{{{{{

floflooflofloflooflofloofloflooflooooataaatatatatatatattataattatatt tttttttttttttttttt ============ cccccccccc rrrurururrrrrrrrrerererererererereererrrerentntntntntntntntntntntntnttttntnntnt ggggggggggggggggggggggggamamaaamamamamamamamamamamamamamamamamaamame eee ee eeeee tittttititititittitittitititittittttitit mmmmmemememememememememememem ;;;;;;;;dedededdedededddddd teteteteteteteteeeetetectctctctctctctctctctctccc ccccccccccccccccolololololololololololololollilililililililililililililililisisisisisisissisisisisisisisiononononononononononononononnnns sss s ss ssssssss ananananananannnnndddddddddddddd cocococococococcc lllllllllissisississssioioioioioioiioioo

///////////////////////////////////// RRRResesesesesesssssseesesoloolo veeveeeveeeeeee ccccccccccccoloololooloooo lililisisisisisisisssionononononnononononnnono s.ss.s.s.s.s.ss.ssssssfofofofoffof rrrrr (e(eacacaaa h cooolllllllllllidididididdininingggg pppappaiririii iiiii jj)j)j)j))

p pp__ [[ ]] ( _____ [ ]] );pii == pp ++ 000 555555 ***** gg * ((tmtmtiti ** tmmti)i);;;

cuu sisiçççocociddadade ddeee oo EqEqEqEqEqEq ess 4 e 5).).

mm t[j]];;pjj = ppppp__i__ nnit[t[[jj]] + ((VV_V_i ] * ttmti););pjpjpjpjj == pppp + 0000 5.5 ** ggg * (((tt tmtmti)i);vjvjvvvjj == VVVV i_iii_inninn t[[j]j]j]j]j]]]j] ++ * ttmmti;

// C// C// C// C//// C/ áálcáálcuá culolo alo aanteessnttes da da pospppoosippp çção ooo o o ooç de cde cde cde ccde colisolisolisão eoão eão eo// v/// velocelolelocce oce cll idada ee dee objobjjj i i ((EqEquaEquaEquuaaaaçõesççõesçõções 4 ee 55).5flofloatfloaoatatttttfloatoa tmtmtmtmttmtt tttmti =i = i =i = = i =i =i =i ==i timetimetimetimemetimtimet ccoolcocolcollisiisissiislisisislisl ion -n -on -n -onnnononnno timtimtimtimme ine_ine_inee init[iit[iit[iit[i]];];];]]

// C/// C/ álcuálllcuálcl lo aoo ntestess dadd posposipososposip çãçãoçãoção de colisãoão

[jj] + (V_(V_initinitit[[jjj] ] tmmmtmti);ti);55 ** gg* * (tmtmtit * t* tmtmti)tt ;

s;s;oooooooooosisisisisis titititittitiononononononnnononns;s;s;s;sssssss

ttttttttttimimimimimimimim ;

ãoãoãoãoãoãoãoãoãoãoooooooã ......

ooooooonnnnnnnnnnnnn titititititittittit mmmmemem s;s;s;s;s;s;;

poposisiçãçãoo dee ccololisisãoão eebjbj i ((EqEquaaçõçõeseses 444 e 5).).olollilisisisiononon - timimee_iinit[i];itt[i[i]] ** tmtmtiti););

mmtit * ttmtm i);mti;mti;

Tradução da 2ª ed

Jeannie Novak

DesenvolvimentoMacromedia® FlaGlen RhodesSérie Profissional

Design de games:PaPaPaPaPaPaPauululul SSchc uytemaSérie profissional

Introdução ao dett seeVolume 1 - Entende

Tradução da 2ª ed

Steve Rabin (ed.)

Programação deTradução da 2ª ed

Jonathan S. Harb

Próximos la

Introdução ao des;;

Volumes 3 e 4

Tradução da 2ª edeseseseseeses;;;;es;Steve Rabin (ed.)

VVVVVVVVVVVOOOOOOOOLLLLLLUUME 2PrPrPrPrPrPPrPPP ogogooggrararramam ção: técnica, linguagem e arquiteturaTrTrTTradadda uçuçãoãã dda a 2ª edição norte-americana

flofl at tmmtmtii == tititimmeme_c_coolliissiionononon - ttimimmee__ininittt[i[i[i];];]];];float tmti = time_collision - time_init[i];pi = ppp iinniit[t[t[[i]i] ++ ((VVVVV ininininnititititt[[i] ** tmtmtiti);pi = p nit[i] + (V init[i] * tmti)

_pi =pi =pi =p p ipp_i i [it[nit[[[i]]i] +i (V_V(V_VV__initin tiniin [[i]ii]]i[[ * tm* tm* * tm* * tmmmmtiti);ti);;_init[i] + (V_init[i] * tmti);ppi =p = p +pp 0.5555 * gggg * (* (* (** tmtitmtittitmtm i * tttmtmti)mti)mti)tt ;;;+ 0.5 * g * (tmti * tmti);vi vi i =vi =vi =vvvii V iV iV_iV_V_iV_V_iV nitit[nit[nit[nit[[nit[n i] +i] +i] +i] i]i]i] g *g *g *g *g *g *g g tmtmtmtmttmtmtmmtmtm ii;i;;i;_init[i] ++ g *g gg tmttmti;i

// velociddaadadee ddedee oobbjbj i ((EqEquuauaçõçõeseseses 4444 eee 555)).).// velocidade de ob i (Equações 4 e 5)

STESTESTESTESTESTETESTSTSTESSST VEVEVVVEE RRABIN(EED(ED((E ITOR)

Vector3D p_init[N] = initial center positions;Vector3D g(0.0, 0.0, -9.81);float mass[N] = particle masses;float time_init[N] = per particle start times;

float eps = coefficient of restitution;

// Loop principal do jogo/renderização.while (game simulation is running){

float t = current game time;detect collisions and collision times;

// Resolve collisions.for (each colliding pair i, j)

// Cálculo antes da posição de colisão e// velocidade de obj i (Equações 4 e 5).float tmti = time_collision - time_init[i];pi = p_init[i] + (V_init[i] * tmti);pi = p + 0.5 * g * (tmti * tmti);vi = V_init[i] + g * tmti;

// Cálculo antes da posição de colisão e// velocidade de obj j (Equações 4 e 5).tmti = time_collision - time_init[j];pj = p_init[j] + (V_init[j] * tmti);pj = p + 0.5 * g * (tmti * tmti);vj = V_init[j] + g * tmti;

Vector3D V_init[N] = initial velocities;Vector3D p_init[N] = initial center positions;Vector3D g(0.0, 0.0, -9.81);float mass[N] = particle masses;float time_init[N] = per particle start times;

float eps = coefficient of restitution;

// Loop principal do jogo/renderização.while (game simulation is running){

float t = current game time;detect collisions and collision times;

// Resolve collisions.for (each colliding pair i, j)

// Cálculo antes da posição de colisão e// velocidade de obj i (Equações 4 e 5).float tmti = time_collision - time_init[i];pi = p_init[i] + (V_init[i] * tmti);pi = p + 0.5 * g * (tmti * tmti);vi = V_init[i] + g * tmti;

// Cálculo antes da posição de colisão e// velocidade de obj j (Equações 4 e 5).tmti = time_collision - time_init[j];pj = p_init[j] + (V_init[j] * tmti);pj = p + 0.5 * g * (tmti * tmti);vj = V_init[j] + g * tmti;

indústria de games ainda é jovem e se encontra em um ritmo de

expansão impressionante, com tendência a resistir a grandes crises

econômicas, gerando oportunidades para novas ideias, novas formas

de jogar e a necessidade de novos talentos para a indústria.

Esse crescimento inspirou alguns dos especialistas mais brilhantes e respeitados

da indústria de jogos a unir sabedoria e experiência para produzir esta obra, que

aborda o desenvolvimento de um jogo, com a profundidade necessária para entender

e apreciar o estado da arte dos processos tecnológicos.

Introdução ao desenvolvimento de games, Volume 2 – Programação: técnica,

linguagem e arquitetura apresenta uma sólida organização didática, com apresentação

estruturada dos conceitos, sistematização de exemplos e situações modelares. Toda a

abordagem é reforçada por exercícios que cobrem o conteúdo de cada capítulo.

O texto ainda conta com uma considerável quantidade de pseudocódigos e códigos,

o que acentua a característica didático-pedagógica da obra.

Este volume apresenta-se como um material muito útil para todos que estudam,

pensam e pesquisam a grande área da programação de games e também para

aqueles que querem ter acesso a uma referência conceitual sólida e à indicação de

fontes consagradas.

AplicaçõesLivro-texto para o curso de Desenvolvimento de Jogos que tenha disciplinas que

envolvam programação, inteligência artificial, fundamentos matemáticos, gráficos,

animação e áudio. Para os cursos de pós-graduação, é um precioso recurso para a

pesquisa de tópicos avançados.

A

ST

EV

E R

AB

IN (E

d.)

INT

RO

DU

ÇÃ

O A

O D

ES

EN

VO

LV

IME

NT

O D

E G

AM

ES

• V

OL

UM

E 2

Para suas soluções de curso e aprendizado,visite www.cengage.com.br

ISBN-13: 978-85-221-1144-2ISBN-10: 85-221-1144-8

9 7 8 8 5 2 2 1 1 1 4 4 2

C

M

Y

CM

MY

CY

CMY

K

VALE.ESTA.gamesVOL2.18x26.ai 1 14/02/12 23:59

Page 2: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura
Page 3: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

volume 2 Programação: técnica, linguagem e arquitetura

Austrália • Brasil • Japão • Coreia • México • Cingapura • Espanha • Reino Unido • Estados Unidos

Tradução da 2a edição norte-americana

Traduçãoopportunity translations

Revisão Técnicaluís Carlos Petry

Doutor em Comunicação e Semiótica pela PUCS-SP. Professor no Programa de Pós-Gradua ção em Tecnologias da Inteligência e Design Digital e no Curso de Tecnologia Superior em Jogos Digitais da PUC-SP. Coordenador do Núcleo de Pesquisas em Hipermídia e Games da PUC-SP.

Editado por

steve rabin

Introdução aodesenvolvImento

de games

games2.indb 3 3/2/2012 16:47:55

Page 4: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

VII

sumário

Prefácio xxviiPrefácio à edição brasileira xxxiiiBiografia dos colaboradores xxxv

PARTE 3 – PRogRAmAção dE jogos: lInguAgEns E ARquITETuRA

3.1 – equIPes e ProCessos 165

visão geral 165

equipes de programação 165

Áreas de programação 166Código do jogo 166Motor do jogo 166Ferramentas 167

organização da equipe 167Habilidades e personalidades 168

metodologias 169

Código e correção 169Cascata 169Iteração 170metodologias ágeis 170

Práticas comuns 171

Controle de versão 171Padrões de codificação 172versões automatizadas diariamente 172

qualidade 173

revisões do código 173assertivas (asserts) e travamento 173testes de unidade 175testes de aceitação 175Base de dados de erros (bugs) 176

aproveitando código existente 176

Plataformas 178

games2.indb 7 3/2/2012 16:47:55

Page 5: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIoVIII

Computadores pessoais (PCs) 179Consoles de jogo 180Portáteis e celulares 180Jogos de navegador (browser) e de download 181desenvolvimento multiplataforma 181

resumo 183

exercícios 183

referências 183

3.2 – C++, Java e lInguagens de sCrIPt 185

visão geral 185

C++ e desenvolvimento de jogo 185

vantagens 186Desempenho 186Características de alto nível 186Herança C 187Bibliotecas 188

Fraquezas 189Nível muito baixo 189Muito complicado 189Carência de recursos 189Iteração lenta 190

quando utilizar? 190

Java 191

Por que Java? 191desempenho 192Plataformas 193

linguagens de script 194

Por que linguagens de script? 194Facilidade de desenvolvimento 195Tempo de iteração 195O código se torna um recurso 195Recursos 196

desvantagens de linguagens de script 196Desempenho 196

games2.indb 8 3/2/2012 16:47:55

Page 6: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIo IX

Suporte a ferramentas 197Encontrando erros 197Interface com o restante do do jogo 198

linguagens de script populares 198Python 198Lua 198Outras linguagens padronizadas 199Linguagens customizadas 199

escolhendo uma linguagem de script 199Você precisa de uma linguagem de script? 200De que características você precisa? 200De que tipo de desempenho você precisa? 200Que facilidades de depuração a linguagem possui? 200Em quais plataformas as linguagens de script precisam funcionar? 201Que especialidades e recursos você tem disponível? 201

resumo 201

exercícios 202

referências 202

3.3 – Fundamentos da Programação 205

visão geral 205

estruturas de dados 205

arrays 206listas conectadas 207dicionários 207outro 208empacotamento de bit 209Flags 209Comunicação em rede 211números de ponto flutuante 212outros usos 212

design orientado a objetos nos jogos 213

Conceitos orientados a objetos 213Herança 213Polimorfismo 215Herança múltipla 217

games2.indb 9 3/2/2012 16:47:55

Page 7: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIoX

sistemas de componente 219

limitações da herança 219Acoplamento forte Fluxo de controle incerto 219Não é flexível o suficiente 220Hierarquia estática 221

organização do sistema de componente 221Composição direcionada a dados 222desvantagens e análises 223

Padrões de design 224

singleton 225Problema 225Solução 225Aplicação ao desenvolvimento do jogo 225Consequências 225

Fábrica de objeto (object Factory) 226Problema 226Solução 226Aplicação ao desenvolvimento do jogo 226Consequências 227

observador (observer) 228Problema 228Solução 228Aplicação ao desenvolvimento do jogo 228Consequências 229

Composto (Composite) 229Problema 229Solução 229Aplicação ao desenvolvimento do jogo 230Consequências 230

outros padrões 231

resumo 231

exercícios 231

referências 232

3.4 – arquItetura do Jogo 233

visão geral 233

games2.indb 10 3/2/2012 16:47:56

Page 8: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIo XI

estrutura principal 233tipos de arquitetura 234

Arquitetura Ad-Hoc 234Arquitetura modular 234Arquitetura de grafos acíclicos dirigidos (DAG) 235Arquitetura em camadas 236

Ferramentas domésticas 237

visão panorâmica de um jogo 238

etapas de inicialização/desligamento 238visão geral 239aquisição de recurso é inicialização 240otimizações 241

Desligamento rápido 241Reinicialização a quente 241

loop do jogo principal 242

tarefas 242Etapa de tempo 242Input 243Rede 244Simulação 244Colisão 244Atualizações de objeto 245Renderização 245Outros 245

estrutura 245acoplamento 247ordem de execução 247

entidades do jogo 250definição 250organização 251atualizando 251Criação 252Instanciação de nível 256Identificação 258Comunicação 259

resumo 261

exercícios 261

referências 262

games2.indb 11 3/2/2012 16:47:56

Page 9: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIoXII

3.5 – memórIas e sIstemas I/o 263

visão geral 263

gerenciamento de memória 263

trabalhando com memória 264Segurança 264Conhecimento 264Controle 265

Fragmentação de memória 265alocação estática 266alocação dinâmica 268gerenciador de memória personalizado 269

Operadores globais new e delete 269Operadores específicos de classe new e delete 271Verificação de erro 273Detectando vazamentos de memória 275Agrupamentos de memória 276

arquivo I/o 280

sistema de arquivo unificado independente de plataforma 280arquivos 282Buffering 283empacotamento de arquivos 285extensões e usos avançados 287

recursos de jogos 288

trabalhando com os recursos de jogo 288gerenciador de recurso 288tempo de vida do recurso 290

Tudo de uma vez 290Gerenciamento explícito de tempo de vida 291Contagem de referência 291

recursos e instâncias 292Pré-cache do recurso 292

serialização 293

gravação 293Interface ISerializable 293Implementando o Write 294Identificadores únicos 295Recursos 296

games2.indb 12 3/2/2012 16:47:56

Page 10: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIo XIII

Ponteiros de gravação 296Carregamento 296

Criando objetos 296Ponteiros de carregamento 297

resumo 299

exercícios 299

referências 300

3.6 – dePurando os Jogos 303

visão geral 303

o processo de depuração em cinco etapas 304

Passo 1: reproduzir o problema de forma consistente 304Passo 2: Coletar pistas 305Passo 3: localizar o erro 305

Método 1: Proponha uma hipótese 305Método 2: Divida e conquiste 306

Passo 4: Corrigir o problema 306Passo 5: testar a solução 307

dicas especializadas de depuração 307

questione suas suposições 308minimize interações e interferência 308minimize aleatoriedade 308divida cálculos complexos em etapas 308verifique as condições-limite 308Interrompa computações em paralelo 308explore ferramentas no depurador 308verifique o código modificado recentemente 309explique o erro para alguém 309depure com um parceiro 309afaste-se um pouco do problema 309obtenha ajuda externa 309

Padrões e cenários de depuração complicada 309

o erro existe no compilado, mas não na depuração 310o erro existe no hardware do console do consumidor, mas não no kit de desenvolvedor 310o erro desaparece quando muda algo inócuo 310

games2.indb 13 3/2/2012 16:47:56

Page 11: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIoXIV

Problemas verdadeiramente intermitentes 310Comportamento inexplicável 311erros do compilador interno 311quando você tem a suspeita de não ser o seu código 312

entendendo o sistema subjacente 312

adicionando infraestrutura para ajudar na depuração 313

altere variáveis de jogos durante a sessão de jogo 313diagnósticos visuais de Ia 313Capacidade de registro 313Capacidade de gravação e reprodução 313rastreie alocação de memória 314Imprima o máximo de informações durante o travamento 314treine sua equipe inteira 314

Prevenção de erros 314

resumo 316

exercícios 316

referências 317

PARTE 4 – PRogRAmAção dE jogos: mATEmáTIcA, dETEcção dE colIsão E físIcA

4.1 – ConCeItos matemÁtICos 321

visão geral 321

trigonometria aplicada 322Funções trigonométricas 322Identidades trigonométricas 324Funções trigonométricas inversas 326as leis dos senos e cossenos 327

vetores e matrizes 329

aritmética de vetor 329aritmética de matriz 332Produto escalar 336o produto vetorial 340

transformações 343

games2.indb 14 3/2/2012 16:47:56

Page 12: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIo XV

transformações do sistema de coordenadas 343Coordenadas homogêneas 344transformações comuns 345transformando vetores normais 347

geometria 349

linhas 349Planos 349distância de um ponto para a linha 351Interseção de uma linha e um plano 351

resumo 352

exercícios 352

referências 353

4.2 – deteCção de ColIsão e resolução 355

visão geral 355

detecção de colisão 355

teste de sobreposição 356

resultados 356

limitações do teste de sobreposição 356

teste de interseção 358

limitações do teste de interseção 359

lidando com complexidade 360

geometria simplificada 360

soma de minkowski 361

vinculando volumes 362

alcançando complexidade de tempo o(n) 363

varredura de plano 364

detecção de colisão de terreno 364

redes irregulares trianguladas (tIns) 366

resolução de colisão 368

Prólogo 368

games2.indb 15 3/2/2012 16:47:56

Page 13: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIoXVI

Colisão 368epílogo 368resolvendo testes de sobreposição 369resolvendo teste de interseção 370

resumo 370

exercícios 371

referências 371

4.3 – FísICa dos Jogos em temPo real 373

visão geral 373

rebobinando: um novo olhar sobre física básica 374

a importância de unidades consistentes 374Cinemática de partículas 375as famosas leis de newton 376o ciclo de movimento 377o efeito de uma força constante em um movimento de partícula 377Consistência de unidades, ainda importante 378movimento de projétil 378resposta de colisão sem atrito 379a história até agora 382

Introdução à simulação de física numérica 384

Integração numérica da equação newtoniana do movimento 385usando integração numérica para simular uma coleção de partículas 387resposta de colisão no loop de simulação 388

Complexidades sutis na resposta de colisão 389Uma breve explicação sobre métodos alternativos de resposta de colisão 389

Problemas de estabilidade numérica e alternativa para integração explícita de euler 391a importância da independência da taxa de frames 393

além das partículas 394

motores de física de terceiros 395

objetos estáticos e cinemáticos 395dinâmicas de corpo rígido 396dinâmicas de corpo flexível 396restrições 398ragdoll e física de personagem 398

games2.indb 16 3/2/2012 16:47:56

Page 14: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIo XVII

dinâmicas de fluido 399Criação de conteúdo de física 400tendências emergentes 400

resumo 401

material complementar disponível para download 402

exercícios 402

referências 403

PARTE 5 – PRogRAmAção dE jogos: gRáfIcos, AnImAção, IA, áudIo E REdE

5.1 – grÁFICos 407

visão geral 407

Fundamentos dos gráficos 407

Frame buffer e back buffer 408visibilidade e depth buffer 408Stencil buffer 409triângulos 410vértices 410espaços de coordenadas 411texturas 413shaders 413materiais 414

organização de alto nível 414

Interações entre o jogo e o renderizador 414objetos de renderização 415Instâncias de objetos de renderização 415malhas 415esqueletos 416Particionamento do volume de renderização 416Portais 417Particionamento de espaço binário (BsP) 419Quadtrees e Octrees 420Conjunto potencialmente visível (Pvs) 421usos comuns 421velocidade e eficiência 422

games2.indb 17 3/2/2012 16:47:56

Page 15: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIoXVIII

tipos de renderização de primitivos 423texturas 426

Formatos de texturas 426mapeamento de texturas 429Filtragem de textura 430renderização para textura 432

Iluminação 433

Componentes 434representação do ambiente de iluminação 435representando múltiplas luzes 437Iluminação difusa 439

Mapas normais 440Mais sobre espaço tangente 442Transferência de brilho pré-computada 443

Iluminação especular 444Mapas de ambiente 446

o pipeline de renderização do hardware 447

montagem de entrada 448sombreamento do vértice 448montagem de primitivo, seleção e corte 448Projeção, rasterização e antialiasing 450sombreamento de pixel 451operações de Z, stencil e alpha-blend 451múltiplos alvos de renderização 452Características de shader 452linguagens de programação de shader 454Pipelines de função fixa 454

resumo 455

exercícios 455

referências 456

5.2 – anImação da Personagem 457

visão geral 457

Conceitos fundamentais 458

a hierarquia do esqueleto 458a transformação 459

games2.indb 18 3/2/2012 16:47:56

Page 16: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIo XIX

Ângulos de euler 460a matriz de rotação 3x3 461quatérnios 462animação versus deformação 463modelos e instâncias 463Controles de animação 464

armazenamento de animação 464

decomposição e eliminação de constante 465Keyframes e interpolação linear 466Interpolação de ordem mais alta 469looping 471

reproduzindo animações 472

scrubbing 473

Combinando animações 474

a lerp 474métodos de combinação de quatérnions 475Combinando múltiplos caminhos 477máscaras de ossos 478lerp mascarada 479Combinação hierárquica 479

extração de movimentos 480

extração de movimento linear 480extração de movimento composto 481extração de delta variável 482encontrando suas raízes 483se uma árvore se anima em uma floresta... 484

deformação da malha 485

1. transformar cada osso em espaço do mundo 4852. encontrar o delta da pose de descanso 4853. deformar as posições de vértice 4864. deformar as normais do vértice 487

Cinemática inversa 488

IK de um único osso 488IK de múltiplos ossos 489IK de dois ossos 491IK por interpolação 492

games2.indb 19 3/2/2012 16:47:56

Page 17: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIoXX

attachments 495

detecção de colisão 495

resumo 496

exercícios 497

referências 497

5.3 – IntelIgênCIa artIFICIal: agentes, arquItetura e téCnICas 499

visão geral 499

Ia para jogos 500

especialização 501

agentes de jogos 502

Percepção 502Visão 502Audição 503Comunicação 504Tempos de reação 504

Pensamento 504Conhecimento especializado 505Busca 505Aprendizagem da máquina 505Flip-flopping 506

ação 506

aprender e lembrar 507

tornando os agentes estúpidos 507

trapaça do agente 507

resumo dos agentes do jogo 508

máquina de estados finitos 508

a máquina de estados finitos básica 508definindo uma Fsm 509estendendo a Fsm básica 513Fsms múltiplas 514depurando Fsms 514resumo das Fsms 514

games2.indb 20 3/2/2012 16:47:56

Page 18: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIo XXI

técnicas comuns de Ia 514a* Pathfinding 514

Exemplo de jogo 515Árvore de comportamento 515

Exemplo de jogo 515Hierarquia de comando 515

Exemplo de jogo 516navegação estimada 516

Exemplo de jogo 516Comportamento emergente 516

Exemplo de jogo 516Flocagem 516

Exemplo de jogo 517Formações 517

Exemplo de jogo 517mapeamento de influência 517

Exemplo de jogo 517Ia de nível de detalhe 518

Exemplo de jogo 518distribuição de tarefas do gerenciador 518

Exemplo de jogo 518evitar obstáculos 519

Exemplo de jogo 519scripting 519

Exemplo de jogo 520máquina de estados 520

Exemplo de jogo 520máquina de estados baseada em pilha 520

Exemplo de jogo 520arquitetura de subsunção 521

Exemplo de jogo 521análise de terreno 521

Exemplo de jogo 521sistema de acionamento 521

Exemplo de jogo 522

técnicas promissoras de Ia 522

redes bayesianas 522Exemplo de jogo 522

arquitetura de quadro-negro 522Exemplo de jogo 522

games2.indb 21 3/2/2012 16:47:56

Page 19: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIoXXII

aprendizado da árvore de decisão 523Exemplo de jogo 523

aleatoriedade filtrada 523Exemplo de jogo 524

lógica fuzzy 524algoritmos genéticos 524

Exemplo de jogo 525Predição estatística n-grama 525

Exemplo de jogo 525redes neurais 526

Exemplo de jogo 526Perceptrons 526

Exemplo de jogo 526Planejamento 526

Exemplo de jogo 527modelagem do jogador 527

Exemplo de jogo 527sistemas de produção 527

Exemplo de jogo 527aprendizado por reforço 528sistema de reputação 528

Exemplo de jogo 528terreno inteligente 528

Exemplo de jogo 529reconhecimento de fala e texto para fala 529aprendizado da modificação de fraqueza 529

Exemplo de jogo 529

resumo 530

exercícios 530

referências 531

5.4 – IntelIgênCIa artIFICIal: vIsão geral da PatHFIndIng 535

visão geral 535

representando o espaço de busca 536

grades 536gráficos de waypoint 537

games2.indb 22 3/2/2012 16:47:56

Page 20: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIo XXIII

malhas de navegação 539Pathfinding 540

random-trace 541entendendo o algoritmo a* 542Breadth-First 544Best-First 545dijkstra 546a* 548

resumo 549

exercícios 550

referências 551

5.5 – Programação de ÁudIo 553

visão geral 553

Programando áudio básico 554

terminologia básica de áudio e física 555representação digital do som 558Pipeline de áudio e recursos de mixagem 560reprodução de amostra e manipulação 561Fazendo streaming de áudio 562Formatos comprimidos de áudio 563envelopes adsr 564Áudio 3d 565efeitos de ambiente 567Padrões de efeitos de ambiente: I3dl2 e eaX 568

Programando sistemas musicais 569

um reprodutor de música baseado em mIdI 569dls 570iXmF 570um reprodutor de fluxo (stream) de áudio digital 570um sistema de música interativa conceitual 571

Programando áudio avançado 572

Integração de efeitos de ambiente de áudio 3d 572Integração de motor e script de áudio 574tecnologia de sincronização de lábios (lip-sync) 575

games2.indb 23 3/2/2012 16:47:56

Page 21: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIoXXIV

reprodução avançada de voz 576reconhecimento de voz 576

resumo 576

exercícios 577

referências 577

5.6 – rede e multIJogador 579

visão geral 579

modos multijogador 579

temporização de evento 580Baseado em turnos 580Tempo real 580

I/o compartilhada 580tela cheia 580tela dividida 581Conectividade 582

Protocolos 583

Pacotes 583request for comments [solicitação de comentários] 584

Pilha de protocolos 584

Camada física 585

largura de banda e latência 585meio de conexão 586

Camada de conexão de dados 587

Camada de rede 587

endereços IP 587difusão ponto a ponto 587endereços especiais 588

Multidifusão 588Transmissão local 588Transmissão direcionada 588Loop back 588Endereço qualquer 588

nome de domínio 589

games2.indb 24 3/2/2012 16:47:56

Page 22: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIo XXV

Camada de transporte 589

Portas 589Protocolo de controle de transmissão 590

Entrega em ordem garantida TCP 590Conectado 590

usar datagram Protocol (udP) 591Broadcasting 591

Camada de sessão 591

soquetes 591origens 592Winsock 592modos de soquete 592modelos de soquete padrão 593

Criação do soquete 593Conexão TCP 593Ouvinte TCP 594Transmissões stream 594Transmissões de datagramas 595

modelos de soquete de alto desempenho 596

Camada de apresentação 597

Compressão 597Criptografia 598serialização 598Buffering 599

Coalescência de pacote 599Latência induzida 599Dados mortos 599Pacotes maiores 600

Camada do aplicativo 600

verificação da versão 600modelos de atualização 600

Reflexão de entrada 600Reflexão de estado 602

sincronização 603Navegação estimada (DR) 603Assistência de IA 603Arbitragem 603

games2.indb 25 3/2/2012 16:47:56

Page 23: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

SUmárIoXXVI

Comunicação em tempo real 603

modelos de conexão 604Transmissão (Broadcast) 604Peer to peer 605Cliente/servidor 605Complexidade de conexão 606Largura de banda 606

ambientes assíncronos 607

segurança 607

Criptografia 608Chave pública (assimétrica – pares de chave) 608Chave secreta (simétrica – mesma chave) 608Codificações 608Retenção da mensagem 608Certificados 608

Proteção de cópia 609Marca d’água 609

Criptografia de execução 609Ofuscação do código 609Heap Hopper 609Execução do estouro da pilha 610Hacks inoperantes 610Hacks de temporizador 610Correção de DLL 610

Privacidade do usuário 610Interceptação de nome de usuário e senha 611Firewalls 611

Filtro de pacotes 611Proxies 611Gateways de circuito 612Tradução de endereço de rede (NAT) 612Encaminhamento de porta 612Ativação de porta 613DMZ 613Determinando o IP WAN 613

resumo 613

exercícios 614

referências 616

índice 618

games2.indb 26 3/2/2012 16:47:56

Page 24: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

XXVII

Prefácio

Bem-vindo à Introdução ao desenvolvimento de games, Volume 2 – Programação: técnica, lingua-gem e arquitetura. Este é um livro único que combina a sabedoria e a experiência de mais de 20 profissionais do setor de jogos para lhe dar uma visão sem precedentes do desenvolvimento de jogos – desde o design, programação, produção até questões de negócios.

O maior desafio na criação deste livro foi abordar praticamente todo o desenvolvimento de um jogo, tentando manter a profundidade necessária para realmente entender e apreciar o estado da arte dos processos tecnológicos. A solução foi reunir alguns dos especialistas mais brilhantes e respeitados na indústria e permitir que cada autor fosse fundo nos detalhes para cobrir sua espe-cialidade. Esse processo resultou em um livro bastante longo, dividido em quatro volumes. Apesar de ser uma obra longa comparada à maioria, tal aspecto foi peça-chave para manter conceitos e ideias importantes, dando-lhe discernimento profundo para os problemas do desenvolvimento real de jogos.

O histórico dos autores é impressionante. Grande parte tem mais de uma década de experiên-cia na indústria de jogos e são líderes em seus respectivos campos, palestrando regularmente na Game Developers Conference,1 ministrando aulas de desenvolvimento de jogos em nível superior, ou até mesmo escrevendo seus próprios livros. O que destaca esta obra é a incrível percepção e experiência que cada autor traz para seu capítulo, com todas as áreas do desenvolvimento de jogos sendo exploradas. Ninguém poderia criar um livro como este, já que requer vidas de especializa-ção e experiência para entender e refinar os problemas. Contudo, não leve minhas palavras em consideração; observe a biografia dos autores nas páginas a seguir.

estrutura do livro e inspiração A estrutura da obra é totalmente apoiada na Estrutura de Currículo da International Game Deve-lopers Association (IGDA) proposta pelo IGDA Curriculum Development Committee. Por meio da cooperação entre os profissionais respeitados da indústria e da academia, esse comitê foi capaz de definir uma estrutura que daria orientação para escolas e universidades para criar seus próprios programas acadêmicos no desenvolvimento de jogos. Por ser a Estrutura de Currículo da IGDA um continuado processo, ela forneceu a orientação e a inspiração para este livro.

Não é a intenção que todo tópico e capítulo deste livro sejam ensinados completamente em uma aula de desenvolvimento de jogos. Em vez disso, a obra contém uma classificação de assun-tos, divididos em partes, que podem ser misturados e combinados para criar um currículo custo-mizado, porém direcionado a um programa acadêmico particular.

Embora o livro possa ser customizado para criar um foco em particular, há um valor imenso na compreensão de todos os elementos do desenvolvimento de jogos e como eles interagem. O desenvolvimento de jogos não é apenas o design, programação ou criação de modelos 3D. Ele abarca o processo completo e como cada elemento interage e influencia os demais. Especialistas em programação não serão muito úteis se não entenderem as motivações do designer de jogos, artistas ou produtor. Os artistas irão criar uma arte inútil se não levarem em conta as limitações da programação do hardware e não criarem uma arte que combine com o design do jogo. Por fim,

1 N.R.T.: A Game Developers Conference é um evento da indústria de games que se organiza em vários módulos. Consul-te o site da GDC em http://www.gdconf.com/.

games2.indb 27 3/2/2012 16:47:57

Page 25: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

PrefáCIoXXVIII

seria prejudicial a um projeto se a área comercial não entendesse os desafios técnicos envolvendo programação e criação de arte. O desenvolvimento de jogos é um processo cooperativo que de-pende de que cada departamento compreenda as motivações, os requisitos e as limitações coloca-das pelos demais. Este livro deseja estabelecer um respeito mútuo e atitude de equipe de trabalho para o desenvolvimento de jogos.

atualizações da segunda edição A primeira edição deste livro foi desenvolvida em 2004-2005, antes do lançamento do Xbox 360, PS3 e Wii. Durante essa última transição dos consoles, vimos os processadores passarem do single core para o multicore,2 os preços dos jogos subirem de US$ 50 para US$ 60, a distribuição digital se tornar cada vez mais aceita mundialmente e um retorno à ênfase na jogabilidade sobre materiais visuais impressionantes. E por mais que o desenvolvimento de jogos tenha mudado nos últimos quatro anos, os fundamentos principais continuam os mesmos. O único modo de ter sucesso é produzir grandes jogos que se concentrem na experiência do jogador.

Nesta segunda edição, tornamos mais eficiente a seção Design de Jogos (no Volume 1), expan-dindo métodos e técnicas para fazer o design dos jogos. Um novo capítulo sobre Escrita de jogos e contando histórias interativas (Interactive storytelling) foi adicionado. Este capítulo, que também faz parte do Volume 1, complementa e completa a seção Design de Jogos, dando orientação na disciplina de como construir e contar uma história dentro de uma experiência interativa. Além disso, atualiza-mos todos os capítulos para refletir o avanço tecnológico no desenvolvimento comercial de jogos.

desenvolvimento de jogos no século XXI Passados são os dias que um desenvolvedor solitário fabricava sozinho o design, o código e a arte do jogo. Desenvolvimento de jogos no século XXI trata da luta de grandes equipes para atingi-rem uma meta comum, em um período de vários anos. A indústria de jogos é um negócio “movi-do por grandes êxitos”, e é necessário incrível talento, experiência, criatividade, marketing e sorte para produzir o próximo jogo de sucesso. Contudo, nessa indústria inovadora e evolutiva, há uma enorme oportunidade para alcançar novas barreiras e empurrar a tecnologia ainda mais além.

Enquanto a primeira edição do livro estava em produção, a indústria de jogos testemunhou o aparecimento do Nintendo DS. Esse sistema de jogos portáteis se mostrou como um exemplo perfeito de como a inovação continua a surgir ao nosso redor, ano após ano. O sistema suporta múltiplas telas, um microfone, um painel de toque, conectividade sem fio, e o jogar por transferên-cia sem fios. Cada um desses elementos já existia há algum tempo, de uma forma ou de outra, mas ao colocarem tudo em um único pacote que milhões de pessoas compraram, os desenvolvedores podem contar com a presença dessas características na exploração de novos modos de jogabili-dade. Centenas de empresas dedicaram seus desenvolvedores mais talentosos na criação de jogos que exploram essa nova interatividade.

Com quase 40 anos de idade, a indústria de videogames ainda é jovem e se encontra em um ritmo de expansão impressionante. A receita global de 2007 foi de US$ 41,9 bilhões e foi estimada em torno de US$ 57 bilhões em 2008. Apesar da crise econômica global ao final de 2008 e 2009,

2 N.R.T.: Os computadores contam atualmente com uma arquitetura de multiprocessamento, designada como multicore, baseada em estudos da indústria e, em pesquisadas do MIT. Maiores detalhes em: http://www.ic.unicamp.br/~rodolfo/Cursos/mc722/2s2007/trabalhos/g20_texto.pdf.

games2.indb 28 3/2/2012 16:47:57

Page 26: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

PrefáCIo XXIX

os videogames parecem ser mais à prova de recessão do que as outras indústrias e irá resistir ao ambiente econômico muito bem, talvez alcançando US$ 68 bilhões em receita global em 2012 de acordo com a PricewaterhouseCoopers LLP.

Esse crescimento incrível significa oportunidade para novas ideias, novas formas de jogar e a necessidade de novos talentos para a indústria. Este livro espera inspirar, motivar e guiar gerações futuras de desenvolvedores a criar jogos inovadores que continuem a elevar as fronteiras do que foi criado no passado.

www.Introgamedev.comJuntamente com a publicação do livro, temos um site que serve de suporte aos aspirantes a desen-volvedores de jogos. Nele você encontrará informações sobre tudo o que deve saber e conhecer para o desenvolvimento de jogos. O site funciona como um guia para encontrar artigos e in-formações sobre desenvolvimento de jogos; dicas que não estão disponíveis em qualquer outro local. São mais de 1.300 artigos, categorizados por disciplinas como física, IA ou design de jogos. Utilize-o como ferramenta e recurso quando for explorar as técnicas e conhecimentos de desen-volvimento de jogos. As informações estão disponíveis em inglês.

material complementar disponível para downloadEste livro disponibiliza para download códigos-fonte, demonstrações, arquivos de arte, e outros materiais que podem ser muito úteis para estudos e exercícios apresentados ao longo do texto. Esses materiais estão disponíveis na página do livro, no site da editora em www.cengage.com.br. O conteúdo está disponível em inglês, consulte o link.

Requisitos do sistemaSéries Intel® Pentium®, AMD Athlon ou processadores mais recentes recomendados. Windows XP (64MB RAM) ou Windows 2000 (128MB RAM) ou superior recomendado. Placas gráficas de ví-deo 3D necessária para algumas aplicações de amostra. DirectX 9 ou o mais recente. Software ne-cessário para utilizar todos os arquivos fornecidos: Microsoft Visual Studio .NET 2003, 3ds max 6, Microsoft Word, Microsoft Excel, Microsoft PowerPoint, Adobe Reader e QuickTime Player.

Como utilizar este livroÀ primeira vista , a natureza desta obra pode ser desencorajadora para qualquer estudante, instrutor ou aspirante a desenvolvedor de jogos. Claramente, não é a intenção de que todo o capítulo seja ensinado de modo minucioso em uma aula acadêmica, mas encorajamos que vá-rias partes sejam usadas para criar uma experiência educacional customizada. Personalizando o conteúdo deste livro, muitos programas acadêmicos com propósitos um pouco diferente po-dem ser satisfatoriamente atendidos. As partes e os capítulos são independentes, o que facilita a sua customização. É possível ignorar certas partes ou mover capítulos quando necessário. As informações a seguir fornecem uma orientação e exemplos de como usar o livro em um contexto educacional.

Entender as várias partes deste livro é a chave para criar um currículo customizado. Como mostra a Figura 1, os volumes que compõem o livro estão divididos em quatro categorias prin-cipais: entendendo os jogos, programação de jogos, criação de arte/recursos e negócios/gerencia-mento. Para qualquer currículo, o objetivo é encontrar um equilíbrio entre as quatro categorias.

games2.indb 29 3/2/2012 16:47:57

Page 27: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

PrefáCIoXXX

Em um curso de desenvolvimento de jogos, promovido por um departamento de ciência da computação, é, sem dúvida nenhuma, importante se concentrar nos aspectos de programação (Partes 3, 4 e 5 – Vol. 2). Contudo, é essencial para motivar o que está sendo construído (Partes 1 e 2 – Vol. 1), evidenciar que existem limitações relacionadas a recursos que vão ser integrados (Parte 6 – Vol. 3), e como um projeto de jogo é gerenciado (Parte 7 – Vol. 4). Em um curso de dez semanas, seria apropriado dedicar sete a oito semanas em programação, enquanto se intercala o tópico principal, com aproximadamente duas ou três semanas, de entendendo os jogos, criação de arte/recurso, e questões de negócios/gerenciamento.

Cada vez mais em universidades, cursos interdisciplinares especiais estão sendo oferecidos na área do desenvolvimento de jogos, abrangendo estudantes de disciplinas diferentes como ciência da computação, arte, música e negócios. Em um ambiente dinâmico e rico, este livro pode ajudar de diversas maneiras, desde design de jogos, programação, criação de arte até no gerenciamento de projetos de equipes. Nesse tipo de curso, estudantes adotam um papel e interagem uns com os outros como se fossem parte de uma equipe real de desenvolvimento de jogos. As aulas podem ser divididas dentro das quatro categorias principais, observando-se uma maior ênfase na parte da programação. O livro fornece profundidade suficiente para que os estudantes em cada disciplina se aprofundem mais e explorem tópicos individuais.

Outros currículos, como os de design de jogos, podem se beneficiar da exploração das inter- -relações de todos os aspectos do desenvolvimento que este livro oferece. Enquanto a maioria dos tópicos de programação poderia ser abordada superficialmente ou de maneira esparsa, há uma grande quantidade de material a explorar nas Partes 1 e 2 (Vol. 1), 6 (Vol. 3) e 7 (Vol. 4). Um curso sobre design de jogos dedicaria mais ou menos três semanas à história dos jogos e à análise de jogos, outras duas a três ao design principal, então as quatro semanas restantes na relação da programação seriam dedicadas a criação de recurso e questões de negócios (como regulamento de conteúdo) com o design do jogo. Por exemplo, temas como inteligência artificial ou áudio podem ter um grande impacto no design de um jogo proporcionando muitas oportunidades interessan-tes de jogabilidade.

Em resumo, três currículos de exemplo são dados na Tabela 1 para cada um dos três tipos de cursos apresentados. Cada um aborda a maioria dos capítulos deste livro, mas a diferença está no

figura 1 Quatro categorias principais para equilibrar um currículo.

entendendo os Jogos (volume 1)

Programação de Jogos (volume 2)

Criação de arte/recursos (volume 3)

negócios/gerenciamento (volume 4)

Parte 1estudos Críticos

de Jogos

Parte 2 Design

de Jogos

Parte 3Programação de Jogos:

Linguagens e Arquitetura

Parte 4 Programação de Jogos:

matemática, Detecção de Colisão e física

Parte 5 Programação de Jogos:Gráficos, Animação, IA,

áudio e rede

Parte 6 Design Audiovisual e

Produção

Parte 7 Produção de Jogos e o

Negócio dos Jogos

games2.indb 30 3/2/2012 16:47:57

Page 28: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

PrefáCIo XXXI

foco e na profundidade. Ao dedicarem tempo apropriado a cada tópico, os estudantes garantem aprofundar-se em um assunto, porém podendo apreciar as questões tecnológicas, artísticas e de negócios que são parte integrante do desenvolvimento do jogo. Observe também que as partes e os capítulos são geralmente independentes e podem ser omitidos, misturados ou distribuídos em pares conforme for necessário.

Tabela 1 Três exemplos de currículos baseados em um curso de nível superior, de 10 semanas.

semana curso orientado à programação curso interdisciplinar curso de design de jogos

1 Visão geral e design de videogames (Caps. 1.1, 1.2, 2.1, 2.2) – Vol.1

Visão geral de videogames (Caps. 1.1, 1.2) – Vol.1

História dos videogames (Cap. 1.1) – Vol. 1

2 equipes e a produção de jogos (Caps. 3.1, 7.1) – Vols. 2 e 4

equipes e a produção de jogos (Caps. 3.1, 7.1) – Vols. 2 e 4

Questões sociais e culturais dos jogos (Cap.1.2) – Vol.1

3Linguagem e arquitetura (Caps. 3.2 – 3.6) – Vol. 2

o papel da indústria de jogos e a economia (Caps.7.2, 7.3, 7.4) – Vol.4

estudando os jogos a partir de uma perspectiva acadêmica (Cap. 1.3) – Vol.1

4 matemática, detecção de colisão e física (Caps. 4.1, 4.2, 4.3) – Vol. 2

Design de jogos (Caps. 2.1, 2.2) – Vol.1

Design de jogos (Caps. 2.1, 2.2) – Vol.1

5Gráficos, modelos 3D, texturas (Caps. 5.1, 6.2, 6.4, 6.7) – Vols. 2 e 3

Criação de recursos e arte (Caps. 6.1 – 6.7) – Vol. 3

Design de jogos (Caps. 2.1, 2.2) – Vol. 1

6Programação de animação e criação (Caps. 5.2, 6.7) – Vols. 2 e 3

Linguagens de programação e arquitetura (Caps. 3.2 – 3.6) – Vol. 2

Influência da inteligência artificial e do áudio no design de jogos (Caps. 5.3, 5.5, 6.8) Vols. 2 e 3

7 Gráficos e animação (Caps. 5.1, 5.2) – Vol. 2

Conceitos de matemática e física 3D (Caps. 4.1, 4.3) – Vol. 2

equipes e produção de jogos (Caps. 3.1, 7.1) – Vols. 2 e 4

8 Inteligência artificial (Caps. 5.3, 5.4) – Vol.2

Visão geral dos gráficos e animação (Caps. 5.1, 5.2) – Vol. 2

Visão geral da criação de arte e recursos (Caps. 6.1 – 6.7) – Vol. 3

9áudio e rede (Caps. 5.5, 5.6) – Vol.2

Visão geral de inteligência artificial, áudio e rede (Caps. 5.3, 5.5, 5.6) – Vol. 2

Papel da indústria de jogos e da economia (Caps. 7.2, 7.3, 7.4) – Vol. 4

10Questões legais e de negócios (Caps. 7.2 – 7.6) – Vol. 4

Propriedade intelectual e regulamento de conteúdo (Caps. 7.5, 7.6) – Vol. 4

Propriedade intelectual e regulamento de conteúdo (Caps. 7.5, 7.6) – Vol. 4

games2.indb 31 3/2/2012 16:47:57

Page 29: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

XXXIII

Prefácio à edição brasileira

A primeira edição brasileira de Introdução ao desenvolvimento de games, Volume 2 – Programação: técnica, linguagem e arquitetura, editado por Steve Rabin, liderando uma equipe de profissionais e desenvolvedores com larga e comprovada experiência na área dos jogos, dá mais um passo na promoção da cultura e desenvolvimento de jogos no Brasil.

O conjunto de livros que forma a Introdução ao desenvolvimento de games se caracteriza por uma sólida organização didática, a qual se pauta pela apresentação estruturada dos conceitos, pela sistematização de exemplos e situações modelares, pela discussão de alternativas e opções adicio-nais, sempre acompanhados de exercícios que cobrem o conteúdo de cada capítulo. Além disso, traz uma excelente bibliografia para estudo e materiais de apoio (disponíveis no site da editora) que compõem um conjunto de recursos didático-pedagógico extremamente rico e versátil.

O cenário internacional da teoria e desenvolvimento de jogos sofreu profundas alterações nos últimos cinco anos, com o incremento dos motores de jogos acompanhando a evolução dos pro-cessadores, e com o crescimento da comunidade de desenvolvedores e jogadores.

O Brasil, por sua vez, passou da simples posição de consumidor secundário para a condição de território emergente de consumo e produção. Empresas brasileiras e profissionais começaram a se destacar dentro do plano internacional, seja na participação em projetos de jogos, seja no desenvolvimento de metodologias associadas aos motores de jogos, a progressiva liberação dos motores de jogos e ferramentas para produtores indie e para o uso educacional, conceito até então ignorado pela indústria tecnológica. Nesse tempo, viu-se o surgimento de inúmeros estúdios de desenvolvimento independentes no Brasil e um aumento significativo de cursos universitários que agora voltam sua atenção para a formação de profissionais focados inteiramente na concepção e desenvolvimento de jogos.

É sob esse panorama efervescente que esse volume, que trata da grande área da programação para games (linguagem, arquitetura, inteligência artificial, fundamentos matemáticos e físicos, gráficos, animação, áudio etc.), vem cobrir uma demanda por novos e consistentes materiais conceituais.

Da mesma forma como o primeiro volume (Entendendo o universos dos jogos), este é um ex-celente recurso disponível para todos os que estudam, pensam e pesquisam jogos. Vejo-o como essencial para o ensino e aprendizagem da produção de jogos que buscam uma referência concei-tual sólida e a indicação de fontes consagradas. Se para as graduações de jogos ele pode ser tomado como uma bibliografia básica, já nos cursos de pós-graduação se converterá em precioso recurso para a pesquisa de tópicos avançados.

Assim, como recurso didático-pedagógico, o volume apresenta uma considerável quantidade de pseudocódigos e códigos. Aqui uma observação metodológica que é de interesse para a pro-gramação, bem como para a matemática e para a física dos jogos: os autores utilizam o Sistema Internacional de Unidades, mas seguem a norma norte-americana quanto ao separador decimal. Um dos resultados disso é que utilizam o ponto como separador decimal, e não a vírgula como no Brasil e Portugal. Como essa organização interessa diretamente à programação, na revisão técnica deste volume, seguiu-se a regra da coerência conceitual, que reza manter a estrutura lógica em sua notação original. Ao mesmo tempo, sempre que necessário, notas explicativas e complementares foram introduzidas, todas elas tendo em mente a utilidade didática para os iniciantes no assunto.

games2.indb 33 3/2/2012 16:47:57

Page 30: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

PrefáCIoXXXIV

A revisão técnica do livro contou com o apoio de uma comunidade de pesquisadores em jogos, aos quais agradeço pelas contribuições e discussões. Com Leonel Morgado, da Universidade do Mi-nho (Portugal), foram discutidos inúmeros termos e seus usos, desde o primeiro volume, na busca por equilibrar a terminologia dentro da comunidade de língua portuguesa. De Cristiano Natal To-néis, recebi um positivo acolhimento na discussão detalhada das questões referentes aos conceitos matemáticos e físicos presentes no livro. Vários outros pesquisadores colaboraram na discussão dos conceitos desta edição: referente a linguagens, arquiteturas, inteligência artificial e redes, agradeço a contribuição de Rogério Cardoso dos Santos, David de Oliveira Lemes, Reinaldo Ramos, Leonardo Silva, Jaderson Aparecido de Souza, Felipe Dacal Fragoso, Maigon Pontuschka e Carlos Augusto Pinheiro de Sousa; na parte de programação de áudio, agradeço a Lucas Correia Meneguette.

Luís Carlos Petry

games2.indb 34 3/2/2012 16:47:57

Page 31: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

XXXV

Biografias dos colaboradores

robert t. Bakie

[email protected] Rob Bakie é um profissional da indústria de jogos desde 1998 e um ávido jogador desde pouco tempo após seu nascimento. Atualmente, trabalha na Nintendo of America como webmaster no grupo de suporte ao desenvolvedor. Antes, trabalhou na divisão on-line multijogador WON.net da Sierra Entertaiment. Já escreveu críticas e revisões de jogos para revistas e sites norte-americanos. Rob é bacharel em Commu-nications-Broadcast Journalism pela University of Washington com formação secundária em Música Computacional.

Isaac Barry

[email protected] Isaac Barry é diretor de Criação para a GameHouse, o primeiro estúdio de desenvolvimento de games casuais em Seattle, Washington. Próximo do final do século XX, começou a procurar trabalho e logo en-controu o de designer de jogos. O trabalho com design em todos os tipos de sistemas e conteúdos o levou a uma paixão pelo desenvolvimento de ferramentas visando à melhoria de seu trabalho e da indústria em geral. Ele teve a sorte de ter encontrado sua segunda casa em um campo no qual os profissionais se dedicam na criação de experiências afetivas, e grato à sua primeira casa por continuar a apoiar e sus-tentar seu processo.

ed Bartlett

[email protected] Ed Bartlett, vice-presidente e cofundador do IGA Worldwide Europa, é um profissional da nova geração de visionários da indústria multidisciplinar, combinando um histórico de 15 anos no setor de video-games com uma perspicácia de negócios e especialidade em mídia e publicidade comprovada. Tendo participado de cargos de produção e criatividade sênior em lançamentos importantes de jogos para produtoras, incluindo a Sega, Virgin Interactive, BMG Interactive, Acclaim e Hasbro Interactive, Bartlett passou para o desenvolvimento de negócios em 1999, como diretor de um renomado estúdio de desen-volvimento de jogos, The Bitmap Brothers.Bartlett é um dos pioneiros da publicidade de jogos, dedicadamente fundando a agência Hive Partners, à frente da concorrência em 2003. Como diretor executivo, levou a empresa a lucrar em seu primeiro ano, conseguindo contas globais de anunciantes como Red Bull, e alcançando acordos revolucionários com pro-dutoras de videogame, incluindo Sega e Vivendi Universal Games. Em 2005, negociou a aquisição da Hive Partners pela IGA Worldwide, unindo as companhias como membro fundador e ajudando a aumentar os US$ 17 milhões de capital de risco da empresa. Desde então é responsável pela construção das fundações da Radial Network, líder no setor, garantindo negócios mundiais com empresas como Electronic Arts, Valve, Sega, Atari e Codemasters. A IGA Worldwide foi selecionada pela Sony Computer Entertainment America e pela Sony Computer Entertainment Europe como a principal parceira para a inserção de publi-cidade a ser realizada no interior de jogos do Playstation3 (os in-game advertising plataform).

games2.indb 35 3/2/2012 16:47:57

Page 32: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

BIoGrAfIAS DoS CoLABorADoreSXXXVI

James Boer

[email protected] James Boer está na indústria de jogos desde 1997, trabalhando em títulos como Deer Hunter, Deer Hunter II, Trophy Hunter, Pro Bass Fishing, Microsoft Baseball 2000, Tex Atomic’s Big Bot Battles e Digimon Rumble Arena 2. Também contribuiu de maneira frutífera com a mídia impressa da indústria de jogos, tendo escrito vários artigos para a revista Game Developer, com coautoria no DirectX Complete, autoria em Game Audio Programming e contribuído com quatro volumes de Game Programming Gems. Atualmen-te, trabalha na ArenaNet, onde é responsável pela criação de sistemas de áudio e cinemática, bem como de ferramentas para títulos que ainda estão em produção.

sue Bohle

[email protected] Sue Bohle é uma profissional de relações públicas altamente conceituada. Iniciou sua carreira na Burson-Marsteller, a maior agência de relações públicas do mundo. Ela então foi contratada pela J. Walter Thompson Co. para ajudar a empresa a desenvolver uma presença de relações públicas em Los Angeles.No prazo de três anos, tornou-se a primeira vice-presidente da JWT na Costa Oeste e, um ano depois, a primeira mulher em Los Angeles a ser nomeada gerente geral de um escritório de uma empresa in-ternacional de Relações Públicas. Em 1979, Sue decidiu abrir sua própria empresa de relações públicas. Hoje, The Bohle Company é uma das 50 maiores agências independentes de Relações Públicas nos Es-tados Unidos e a maior empresa focada em tecnologia no Sul da Califórnia. Profissionalmente ativa, é membro e ex-presidente do College of Fellows, PRSA, uma honra concedida a profissionais avaliados como modelo na indústria de Relações Públicas. Ela também é ex-presidente da Counselors Academy, uma organização nacional de chefes de agências, bem como ex-presidente da Los Angeles Chapter of Public Relations Society of America. Sue possui tanto o bacharelado como o mestrado da Northwestern University’s Medill School of Journalism. Antes de entrar em relações públicas, ela era instrutora de jor-nalismo dos ensinos médio e superior.

todd m. Fay

[email protected] Todd M. Fay era o diretor de desenvolvimento para a Game Audio Network Guild (www.audiogang.org). Já trabalhou com Creative Labs ATC, Blizzard Entertainment, THQ, Vivendi Universal, Black Ops Entertain-ment, G4 Media, e Tommy Tallarico Studios. Seu talento chamou a atenção na Game Developer Magazine, Gamasutra.com, Music4Games.net e, no G4: Television for Gamers, a rede 24 horas dedicada a jogos e ao estilo de vida dos jogadores. No G4 Media, Todd supervisionou o desenvolvimento dos programas Filter and Cheat!: Pringle’s Gamer’s Guide, bem como o Special: Splinter Cell da Icon. Enquanto trabalhava com a Creative Labs, contribuiu com o desenvolvimento do EAX 3.0, e foi também autor do guia do designer para essa tecnologia. Todd produziu seu primeiro livro, DirectX 9 Audio Exposed: Interactive Audio De-velopment, para a Wordware Publishing em 2003, que lhe proporcionou o Prêmio G.A.N.G.3 em 2004. Possui bacharelado em música pela University of Massachusetts Lowell (UML), cujo Departamento de Tecnologia em Gravação de Som foi ganhador do Prêmio Lowell (UML).

3 N.R.T. : Consulte o site da G.A.N.G em http://www.audiogang.org/.

games2.indb 36 3/2/2012 16:47:57

Page 33: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

BIoGrAfIAS DoS CoLABorADoreS XXXVII

tom Forsyth

[email protected] Tom é um arquiteto de software e hardware na Intel trabalhando no projeto Larrabee. Anteriormente, escreveu software de animação para a RAD Game Tools, motores gráficos de jogos para a Muckyfoot Productions e drivers para placas de vídeo Direct3D para a 3Dlabs. Em seu tempo livre, fez uma varie-dade de pesquisas relacionadas aos gráficos, com foco em sombras, e já escreveu e editou muitos livros e artigos, notavelmente como parte da série ShaderX.

david Johnson

[email protected] David iniciou sua carreira como colorista na CST Technology, em 1994, colorizando desenhos animados e filmes. Após estudar animação e efeitos especiais no Santa Monica College’s Academy of Entertain-ment Technology, tornou-se um modelador 3D. Trabalhou como modelador profissional na 3Name3D e Viewpoint Digital. David tem créditos em um filme, créditos em vários jogos e já criou modelos para diversos sites e comerciais de TV. Está trabalhando em jogos desde 1999 e é um dedicado artista de efeitos desde 1995. Trabalhou em títulos como Shadowrun, Halo 3 e também no Modern Warfare 2, da Infinity Ward.

eric lengyel

[email protected] Eric Lengyel é arquiteto chefe no Terathon Software, onde comanda o desenvolvimento do C4 Engine. Ele se dedica à pesquisa de gráficos 3D há mais de 15 anos e é autor do best-seller Mathematics for 3D Game Programming and Computer Graphics. Também é autor do OpenGL Extensions Guide e já escreveu muitos artigos para publicações da indústria desde o Gamasutra.com até a série Game Programming Gems.

Peter lewis

[email protected] Peter Lewis trabalha com gráficos de computador desde metade dos anos 1980, quando começou a pro-gramar câmeras de controle de movimento para a indústria de filmes. Começou a atuar na indústria de videogames em 1991 com a Dynamix, Sierra Online, onde criou o Cinematics e gráficos 3D para jogos. Foi senior art lead4 na WildTangent, Mad Doc Software, estúdio ACES dentro da Microsoft Game Studio, e é atualmente diretor de arte na Reality Gap. Peter é instrutor no DigiPen Institute of Technology, onde ensina animação de computador para estudantes de arte e programação; tem sido instrutor do programa de animação de computador certificado pela University of Washington Extension.

noel llopis

[email protected] Noel Llopis é fundador da Snappy Touch, desenvolvendo independentemente jogos para iPhone. Ante-riormente cofundou a Power of Two Games. Também foi arquiteto técnico chefe na High Moon Studios onde coordenou a pesquisa e o desenvolvimento de tecnologia de ponta. No Day 1 Studios, arquitetou e

4 N.R.T.: Senior art lead é um cargo da indústria de games. Ele é o responsável pela produção, processamento e a loca-lização das artes e recursos dentro do jogo. O cargo é ocupado por um artista com ampla experiência e conhecimento; uma versão possível seria: artista principal sênior.

games2.indb 37 3/2/2012 16:47:57

Page 34: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

BIoGrAfIAS DoS CoLABorADoreSXXXVIII

desenvolveu a tecnologia que está na base de jogos como Mech Assault 1 e 2. É um entusiasta dos méto-dos de desenvolvimento ágil, testes automatizados e desenvolvimento direcionado por testes. É autor do livro C++ for Game Programmers, contribuiu com diversos artigos para a série Game Programming Gems, e atualmente escreve a coluna Inner Product na Game Developer Magazine. Obteve bacharelado pela University of Massachusetts Amherst e mestrado pela University of North Carolina em Chapel Hill.

syrus mesdaghi

[email protected] Syrus Mesdaghi é o engenheiro chefe de IA na Dynamic Animation Systems, onde é o chefe de tecno-logia em um projeto FPS (First Person Shooter) para treinamento tático de tomada de decisões baseadas em equipe, assumindo muitos aspectos do projeto, o que inclui a IA. Anteriormente foi diretor do Curso de IA no programa de Desenvolvimento e Design de Jogos da Full Sail University. Além de sua paixão por IA, dedicou-se à melhoria, demonstração e promoção da tecnologia Java. Desenvolveu e exibiu tec-nologia de jogos de ponta para DAS, Full Sail University e Sun Microsystems em diversas conferências como GDC, SIGGARH, QuakeCon e I/ITSEC em projetos, desde jogos de FPS, RTS, luta e corrida. Realizou apresentações na GDC e é um dos autores de Practical Java Programming. Contribuiu ainda com outras publicações como AI Game Programming Wisdom.

tito Pagan

[email protected] O diretor de arte Tito Pagan é um veterano desenvolvedor de jogos e escritor com 17 anos de expe riência na indústria, além de possuir créditos em dezenas de títulos de jogos. Sua experiência vai desde artista de texturas, designer de nível, chefe de animação, modelador de personagem, artista de conceito, diretor de captura de movimentos e diretor técnico. Há pouco tempo fundou o BoldFist, um estúdio de animação e captura de movimentos em Washington. Anteriormente para a WildTangent, Tito chefiou a direção de arte de títulos de jogos Internet, bem como a edição de jogos para a Internet publicados de forma customizada para os clientes. Os ciclos de desenvolvimento agressivos na WildTangent ensinaram muito a Tito sobre produção e terceirização otimizada de arte nos jogos, com uma média de três jogos por ano durante seus cinco anos de empresa. Com o lançamento da Gas Powered Games, chefiou o trabalho de animação, com a tarefa de coordenar os elementos de movimentação do personagem no jogo Dungeon Siege.

mark Peasley

[email protected] Mark Peasley é um veterano na indústria de jogos, com 20 anos de experiência produzindo ilustrações, cronogramas, gerenciando equipes e fazendo trabalhos impossíveis. Durante esse tempo, foi artista, di-retor de arte, produtor e diretor de projeto. Trabalhou em mais de 25 títulos de PC, 3DO, Xbox e Xbox 360. Recentemente na Microsoft Games Studio, trabalhou com Forza Motorsport, Forza Motorsport 2, Midtown Madness e Rallisport.

steve rabin

[email protected] Steve Rabin é engenheiro de software principal da Nintendo of America, onde pesquisa novas técnicas para as plataformas atuais e futuras da Nintendo, ferramentas de desenvolvimento para arquitetos como o WiiProfiler e dá suporte aos desenvolvedores da empresa. Antes da Nintendo, trabalhou principal-mente como engenheiro IA em diversas empresas iniciantes em Seattle incluindo Gas Powered Games,

games2.indb 38 3/2/2012 16:47:57

Page 35: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

BIoGrAfIAS DoS CoLABorADoreS XXXIX

WizBang Software Productions e Surreal Software. Organizou e editou a série de livros da AI Game Programming Wisdom, o livro Introduction to Game Development e tem dúzias de artigos publicados na série Game Programming Gems. Palestrou na conferência AIIDE em Stanford, na Game Developers Conference e em muitas conferências de desenvolvimento da Nintendo na América do Norte e Europa. Organizou a AI Summit com duração de dois dias na GDC 2009 e moderou as mesas-redondas de IA na GDC. Steve também fundou e gerencia um grupo profissional conhecido como AI Game Programmers Guild. Ensina inteligência artificial para jogos na University of Washington Extension e no DigiPen Institute of Technology. Possui bacharelado em Engenharia da Computação e mestrado em Ciência da Computação, ambos pela University of Washington. Por fim, mantém um site que cataloga mais de mil artigos de desenvolvimento de jogos no www.introgamedev.com.

graham rhodes

[email protected] Graham Rhodes começou a fazer jogos nos computadores Commodore e Atari de 8 bits quando ainda estava no ensino médio. Desde então vem criando software para gráficos 3D em tempo real, jogos e si-mulações. Foi programador chefe para uma série de jogos educacionais para o World Book Multimedia Encyclopedia, bem como em diversos “serious games” em primeira/terceira pessoa, além de contribuir em inúmeros projetos de modelagens procedurais de simulações baseadas em física. Graham contri-buiu com capítulos para diversos livros na série Game Programming Gems. É moderador do fórum de matemática e física no site gamedev.net, apresentou-se na Game Developers Conference (GDC) anual e outros eventos e regularmente participa da GDC e da conferência anual ACM/SIGGRAPH. Graham é membro da ACM/SIGGRAPH, da International Game Developer’s Association (IGDA), da North Caro-lina Advanced Learning Technologies Association (NC Alta) e da Long Now Foundation.

dr. stephen rubin , esquire

[email protected] Steve Rubin representa desenvolvedores e distribuidores engajados em todos os aspectos da indústria de jogos em assuntos tais como contratos, licenças, proteção e aplicação da propriedade intelectual e litígio, formação de negócios, aquisições e financiamento. Antes de criar sua própria empresa, Steve era um advogado na Divisão Antitruste do Departamento de Justiça dos Estados Unidos, professor de direito na University of Florida e sócio em um escritório onde chefiava as práticas de propriedade intelectual e an-titruste. Também atuou como special master5 e como mediador na Corte Federal norte-americana para casos de patentes e outros litígios. É autor de diversos livros e artigos sobre antitruste e propriedade inte-lectual. Além disso, é palestrante sobre tópicos de direito e negócios na Game Developers Conference.

Kathy schoback

[email protected] Como vice-presidente executiva e diretora global de marca para a Game Group of Think Ser vices, Kathy supervisiona a série de eventos da Game Developers Conference, localizada em São Francisco, CA; Austin, TX; Vancouver, Canadá; Xangai, China; e Colônia, Alemanha. Também gerencia produtos impres sos e sites para o Game Group, que inclui Gamasutra.com e Game Developer. Uma veterana da indústria de jogos, Kathy começou sua carreira na SEGA of America e em seus nove anos lá ocupou uma variedade de cargos de desenvolvimento de gerenciamento e negócios. Outra experiência profissional inclui trabalhar

5 N.R.T.: O special master é um cargo judiciário nos EUA, designado pelo juiz. Sua função é a de cuidar que as ordens judiciais sejam seguidas criteriosamente.

games2.indb 39 3/2/2012 16:47:57

Page 36: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

BIoGrAfIAS DoS CoLABorADoreSXl

como diretora de Operações de Produtos na Eidos e vice-presidente de Aquisição de Conteúdo para AGEIA Technologies, bem como fazer parte do comitê consultivo da Game Developers Conference, como diretora da International Game Developers Association, e participar no comitê de direção do Women in Games International. Kathy se graduou com summa cum laude no bacharelado em Inglês da University of California, Berkeley.

Jeff selbig

[email protected] Jeff trabalha na indústria de jogos desde 2000 como artista 3D, diretor de arte e gerente de terceirização. Anteriormente, atuou como geologista de exploração para ARCO e engenheiro geotécnico no Alasca. Gasta seu tempo livre convencendo sua família de que jogar World of Warcraft e Guild Wars é pesquisa relacionada a trabalho.

tom sloper

[email protected] Tom Sloper é produtor e designer de jogos há mais de 25 anos, projetou e produziu jogos para grandes plataformas desde o Vectrex e Atari 2600 até Playstation, Dreamcast, Nintendo DS, Xbox 360 e IPTV. Trabalhou para Sega, Atari, Activision e Yahoo. Como palestrante, proferiu palestras na KGC, GDC e no Smithsonian. Como autor contribuiu com diversos livros sobre jogos e a indústria (Secrets of the Game Business, Game Design Perspectives, Introduction to Game Development). Sloper está na faculdade da University of Southern California, onde ensina design de videogames, produção e garantia de qualidade. É um autor e um expert internacionalmente reconhecido do clássico jogo chinês de mah-jongg.

leslie stirling

[email protected] Leslie é escritora de jogos e contadora de histórias profissional de jogos. Possui mestrado em Biblioteco-nomia e Ciência da Informação, com ênfase em narrativas e tecnologia pela University of Washington. É uma jogadora de longa data e gerencia ativamente uma guilda MMO on-line com mais de 2.500 jogadores.

tommy tallarico

www.tallarico.com Tommy Tallarico é compositor musical para videogames há mais de 18 anos. Em 1994, fundou o Tommy Tallarico Studios, o maior estúdio de produção de áudio da indústria de multimídia. Foi o primeiro a utilizar um áudio 3D em um jogo (Q-sound) , responsável por trazer o verdadeiro som surround inte-rativo digital 5.1 (seis canais) para a indústria dos jogos. Tommy trabalhou na indústria de jogos como analista de jogos, gerente de produto, produtor, escritor, designer e chefe dos departamentos de Vídeo e Música. É o fundador e presidente da Game Audio Network Guild (G.A.N.G.), uma organização sem fins lucrativos para educar e elevar a percepção do áudio para o mundo interativo (www.audiogang.org). Tommy está no comitê consultivo da Game Developers Conference, é um orgulhoso membro da International Game Developers Association, e membro da comissão de indicação da Academy of Inte-ractive Arts & Sciences. Já ganhou mais de 20 prêmios da indústria pelo melhor áudio de videogames e trabalhou em mais de 20 títulos, até hoje, com total de vendas de mais de 75 milhões de unidades e 2 bilhões de dólares.

games2.indb 40 3/2/2012 16:47:57

Page 37: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

BIoGrAfIAS DoS CoLABorADoreS XlI

Bretton Wade

[email protected] Bretton Wade é um veterano da indústria de gráficos e jogos. Atualmente é diretor na SC Technologies and Clockwork 3. Foi diretor de tecnologia da Firaxis Games, gerente da equipe de software do sistema Xbox, líder de um estúdio independente contratado pela Blizzard Entertainment e líder de desenvolvi-mento no projeto do Microsoft Flight Simulator.

Chuck Walters

[email protected] Chuck Walters atualmente contrata desenvolvimento de jogos por meio da Gamegineer Corp. Também instrui cursos sobre Arquitetura de Jogos Multijogador (Multiplayer Game Architecture) e ASP.NET na University of Washington Extension. Seus empreendimentos anteriores incluem Magic The Gathering Online na Wizards of the Coast, jogos para celulares baseados na plataforma Brew para a Tooned In, o jogo de corrida Need for Speed para a Electronic Arts, demonstrações para Microsoft Research Group, transferência de jogos de uma plataforma para outra para Manley & Associates, ferramentas de soft ware para a Tektronix, engenharia de hardware para Attachmate, e um artigo sobre dispositivos de feedback de força para Game Developer Magazine.

games2.indb 41 3/2/2012 16:47:57

Page 38: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

Programação de jogos: linguagens e

arquitetura

P a r t e

3

Gameentity

Weapon movingentity

Bow Sword PlayerAvatar AIentity

enemy NPC

games2.indb 163 3/2/2012 16:47:58

Page 39: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

visão geral

Há mais para programar um jogo do que sentar à frente de um computador equipado com seu editor e compilador favoritos e teclar a noite inteira. A maioria dos jogos comerciais é criada por grandes equipes, desde centenas de programadores, dependendo do tamanho do grupo e do es-copo do programa. Este capítulo explica como as equipes de programação são organizadas e que técnicas comumente são usadas para coordenar eficazmente o trabalho de todos os integrantes e criar um grande jogo.

equipes de programação

Anos atrás, no início dos anos 1990, os programadores estavam no centro do desenvolvimento de um jogo e eram a visão por trás dele. Contudo, com o crescimento de equipes e orçamentos e a mudança do foco do desenvolvimento de aprimoramentos técnicos para o próprio jogo, as pessoas perceberam que só porque alguém foi um programador brilhante não significa que seria um bom criador de jogos.

3.1 equipes e processos

neste capítulo

■ Visão geral■ equipes de programação■ metodologias■ Práticas comuns■ Qualidade

■ Aproveitando código existente■ Plataformas■ resumo■ exercícios■ referências

games2.indb 165 3/2/2012 16:47:58

Page 40: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

PArTe 3 ProGrAmAção De JoGoS: LINGUAGeNS e ArQUITeTUrA166

O papel dos programadores hoje é muito diferente do que era há algumas décadas. Atual-mente, o jogo é desenvolvido pelos criadores de conteúdo (artistas e designers) com pleno su-porte dos programadores. Os programadores são responsáveis por criar alguns códigos (seguindo as instruções dos designers), a tecnologia na qual o jogo irá funcionar (geralmente chamada de “motor do jogo”) e as ferramentas que os artistas e designers irão usar para criar o conteúdo do próprio jogo.

Isso não é de jeito nenhum um papel menos interessante ou prestigioso, mas é mais orientado a servir o resto da equipe de desenvolvimento e lhes fornecer meios para criar um jogo incrível. O destino da equipe está nas mãos dos programadores, e é sua responsabilidade ter certeza de que tudo corra de forma consistente e confiável.

Áreas de programaçãoExistem três áreas distintas da programação envolvidas na criação de um jogo.

Código do jogoO código do jogo é a parte principal em que os profissionais pensam quando se referem à progra-mação de um jogo. Isso inclui tudo diretamente relacionado ao próprio jogo: como a câmera se comporta quando o controle é pressionado, como a pontuação é mantida para um tipo de jogo em particular, ou como as entidades de IA no mundo reagem a certas situações.

Esse tipo de programação envolve escrever uma grande quantidade de código em linguagens de script (opostas à linguagem principal em que o resto do jogo é escrito, como C++). O propósito de usar linguagens de script nesse nível é:

■ Produzir uma iteração mais rápida evitando ciclos demorados de compilação, correção e execução.■ Permitir que designers e artistas inclinados tecnicamente mudem comportamentos diretamen-

te no jogo. ■ Apresentar uma linguagem mais apropriada para lidar com o domínio de problema (por exem-

plo, uma linguagem customizada de alto nível para lidar com problemas de IA é provavelmente mais fácil do que usar C++).

Motor do jogoA programação do motor do jogo envolve todos os códigos utilizados do início ao fim, e não os itens específicos do jogo. Em outras palavras, é todo o código de suporte necessário para que o jogo funcione. Algumas vezes, as pessoas erroneamente pensam em motor de jogo como algo res-ponsável pelo desenho de belos gráficos 3D, mas isso é função do renderizador gráfico (também chamado de “motor gráfico”, o que causa mais confusão), que é uma das muitas partes do motor do jogo.

Um dos propósitos de um motor é isolar o jogo do hardware no qual está funcionando. Isso acontece pela criação de uma camada abstrata entre o jogo e o hardware. Desse modo, o jogo torna-se independente dos detalhes da plataforma e concentra-se exclusivamente na própria lógi-ca do jogo. Exemplo desse tipo de abstração é a coleta de informações enviadas pelo controlador, colocando gráficos na tela, ou reproduzindo sons de fundo.

O motor também fornece funcionalidade comum necessária para partes diferentes do jogo. Por exemplo, ele irá dar suporte à serialização (leitura e escrita do estado dos objetos), comunicação

games2.indb 166 3/2/2012 16:47:58

Page 41: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

Visite a página deste livro na Cengage Learning Brasil e conheça também todo o nosso catálogo

Page 42: Introdução ao desenvolvimento de games vol.2 – Programação: técnica, linguagem e arquitetura

do jogo/renderização.ulation is running)

current game time;olollisions and collision timemeess;;

ve ccollisions.h coolllliding pair i, j))

// Cálculo aanntteeses dddaa popopppp sisiiçãçãççç oo dedee cccolololisissãoãoo eeee

VectVVecttVVecttoroororor3Doroorr V_iV nit[t[[[[NNNN] =NN inin tialtial velellelocitocittto ies;;;esVVVectVV or3Dor3Dr3r33D3D p_ipp_p_p nit[[[nit[[NNN] =] =N] NN ininin tialal cencennnter ter terrr posiposiss tiont ons;s;s;;VVVectV or3DDDD g(0gggggggg .0, , .0, , 0000.0, -9.9 81);;flflfloatfl masm s[N][[N][Ns[N]NN = p= p= p= p= p= p= ppartiarticle ccle cle massmassmassassmassas es;es;es;es;eses;ees;flflfloatflflflflflfl timtimime_ine_inie iniii it[Nit[Nit[NNN]]] =] = per r partarttrticleiccle staststststs rt tttttiiimesmim ;

floatfloatfloatoataa epsepsepsepsssss ==== c= coeoefficienent ofofff resre tituuuutiotionn;;

// L//// L// L/ oop o prinnprincipaaaal dol dl ddl do jogggo/reendernd izaçzazazaaa ão.ãoãoãoowhilwhiwhilwwwhilee (ge (geee (game meameamee simusimumusimumuullatilatilatil on ionon ion ionooon ss ruruss rurunninnninnninnggg)g)g)))g){{

floato t == curcurcurururrrent gamgammga ee timeme;me;e;e;edetedetdeteet ct cct ccollollollollilisiosionsionsionsiosio s ananndd cod collisllislllill ion ooion o timetimes;ss;s;s;

// R// // R// Resolesolo veve ceve colliollillisisiononsions ss.for rrfor for (eacaceacc(eac(eacch coh coh coh coh coco coh collidiillidlliidii ing ing ingngg g pairairpaairpppp ii, iii, j)jjjj)j))jjjj)

/////// ááláá l d i ã ddd li ã

Este livro foi elaborado por um timede vários profissionais com muita experiência na indústria de jogos.Cada um contribuiu de maneira profunda, cobrindo sua especialidade, para que o resultado fosse uma obra completa,com toda a área de desenvolvimentode jogos explorada.

EditorSteve Rabin

Autores• Bretton Wade• Chuck Walters• David Johnson• Ed Bartlett• Eric Lengyel• Graham Rhodes• Isaac Barry• James Boer• Jeff Selbig• Kathy Schoback• Leslie Stirling• Mark Peasley• Noel Llopis• Peter Lewis• Robert T. Bakie• Stephen Rubin• Sue Bohle• Syrus Mesdaghi• Tito Pagan• Todd M. Fay• Tom Forsyth• Tom Sloper• Tommy Tallarico

Outras obras

Desenvolvimento de gamesTradução da 2ª edição norte-americana

Jeannie Novak

Desenvolvimento de games com Macromedia® Flash® Professional 8Glen RhodesSérie Profissional

Design de games: uma abordagem práticaPaul SchuytemaSérie profissional

Introdução ao desenvolvimento de gamesVolume 1 - Entendendo o universo dos jogos

Tradução da 2ª edição norte-americana

Steve Rabin (ed.)

Programação de games com Java®Tradução da 2ª edição norte-americana

Jonathan S. Harbour

Próximos lançamentos

Introdução ao desenvolvimento de gamesVolumes 3 e 4

Tradução da 2ª edição norte-americana

Steve Rabin (ed.)

VOLUME 2Programação: técnica, linguagem e arquiteturaTradução da 2ª edição norte-americana

DESENVOLVIMENTO DEINTRODUÇÃO AO

STEVE RABIN(EDITOR)

t gamame t mmee;t

i

VeVeVVeVVVV ctctttctctctorororororororororororoooorr3D3D3D3D3 VVVVVVVV_i_i_iiininninit[t[[[[[t[[[[[[[N]N]N]N]N]N]N]N]N]] = iiininininininininiin ttitittititialalalal vvvvvvveleleleeele ocooocococococococococococooocitititiitititiiti iieiiiiessVeVeVeVeVeVeVeVeVeVeVeVeVeVeVeeeeectctctctctctctcctctcttcctcccc orororoororororororororororr33D3D3D3D3D3D3D3D3D3D3D33DD3D3D3D3D pppppppp_i_i_i_i_i_innninniit[t[t[t[t[t[t[[t[t[t[t[t[N]N]N]N]N]N]NN]N]N]NN]N]]]]]] ======= iiiiininininititititialalalaalalllal ccccccceneneneneneenennnennnntetetetetetteteteteteer r r r r r popopopopopopopopopppoppppVeVeVeVeeecctctttttttcttttooororooo 3D3DDDDDD3DDDDDD ggggg(0(0(0(0(0.0.0.000000000000.0,,,,, 000.000.00.0.0000000 0,00,0,000000,0 ------------9.9.9.9.999.999999.99.999 8818888118888888188 ););););););;;;;flflflofloflofloflofloatatattttatttttattttt mmmmmmmmmasasasaassassa s[s[s[s[s[ss[N]N]N]N]N]N] =========== ppppppppppppaarararartitititittiticlclclclclccc eeeee mammamamammammm ssssssssssssssssssssseseseseseseseeesesesesse ;;;;;;;;;;;;;floflofloflflflooatatatttttatat ttttimimimmmmmme__e_e_e_e_innnititititittt[N[N[[[N[N[N[N[N[N[N[N[NNNNNNNNN]]]]]]]]]]]]] === ppeppppepper paapaaaaaaartrtrtttrtticicciccccccccciclelelelelelelelee ssssssssssssstattatatatatttatatattttat rtrtrtrtrtrtrtrttt

flflofloflooooooofloooflooooatatatatatatatatataatatattt eeepsppsss == ccccoooooeo ffififififfififififificicicicicicicicicieneneneneneneenenenenennt t t tttttttt ofofofofofofofffffofofofoffo rrrrrrrrresesesesesessesesestittititititittitututututututuututititititittitionononononononoononnnnnn;;;;;;;;;;

///////////////////////// LLLLLLLLLLLLLLLLooooooooooooooooooooooooooop p p pp p pppp prprprprprprprprprprinininininnnininninncicicicicicicicccciciccc papapapapapapapapapapaapallllllll dodododododododododooodd jjjjjjjjjjogogogogoggogogoggggggggo/o/o/o/o/o/o/o/o/o/oooo rerererereeeeereeer ndndndndndndndndnnndnn ererererrrerrizizizzizizizizizizzzzzzzaçaçaçaçaçaçaçaçaççããããããwhwhwhwwhwhwhwhwhwhhwhwwhilililllllle e ee e e eee e eeeeeeee (g(g(g(g(g(g(g(g(g(g(g(g(g(g((( amamamamamamamamamamamamamammmmammeeeeeeee sisisisisisisisiisssis mumummummumumumumumumumumumumumuulalalallalalalalalalatititititititititititititittittiiiionononononononononononoonononoonnnonn iiiiiiissssssssss ss rururururururuururrrrurrrrr nnnnnnnnnnnnnnnnnnnnnnnnnnininininninininninininininnnninnnng)g)g)g)g)g)ggggggggg{{{{{{

floflooflofloflooflofloofloflooflooooataaatatatatatatattataattatatt tttttttttttttttttt ============ cccccccccc rrrurururrrrrrrrrerererererererereererrrerentntntntntntntntntntntntnttttntnntnt ggggggggggggggggggggggggamamaaamamamamamamamamamamamamamamamamaamame eee ee eeeee tittttititititittitittitititittittttitit mmmmmemememememememememememem ;;;;;;;;dedededdedededddddd teteteteteteteteeeetetectctctctctctctctctctctccc ccccccccccccccccolololololololololololololollilililililililililililililililisisisisisisissisisisisisisisiononononononononononononononnnns sss s ss ssssssss ananananananannnnndddddddddddddd cocococococococcc lllllllllissisississssioioioioioioiioioo

///////////////////////////////////// RRRResesesesesesssssseesesoloolo veeveeeveeeeeee ccccccccccccoloololooloooo lililisisisisisisisssionononononnononononnnono s.ss.s.s.s.s.ss.ssssssfofofofoffof rrrrr (e(eacacaaa h cooolllllllllllidididididdininingggg pppappaiririii iiiii jj)j)j)j))

p pp__ [[ ]] ( _____ [ ]] );pii == pp ++ 000 555555 ***** gg * ((tmtmtiti ** tmmti)i);;;

cuu sisiçççocociddadade ddeee oo EqEqEqEqEqEq ess 4 e 5).).

mm t[j]];;pjj = ppppp__i__ nnit[t[[jj]] + ((VV_V_i ] * ttmti););pjpjpjpjj == pppp + 0000 5.5 ** ggg * (((tt tmtmti)i);vjvjvvvjj == VVVV i_iii_inninn t[[j]j]j]j]j]]]j] ++ * ttmmti;

// C// C// C// C//// C/ áálcáálcuá culolo alo aanteessnttes da da pospppoosippp çção ooo o o ooç de cde cde cde ccde colisolisolisão eoão eão eo// v/// velocelolelocce oce cll idada ee dee objobjjj i i ((EqEquaEquaEquuaaaaçõesççõesçõções 4 ee 55).5flofloatfloaoatatttttfloatoa tmtmtmtmttmtt tttmti =i = i =i = = i =i =i =i ==i timetimetimetimemetimtimet ccoolcocolcollisiisissiislisisislisl ion -n -on -n -onnnononnno timtimtimtimme ine_ine_inee init[iit[iit[iit[i]];];];]]

// C/// C/ álcuálllcuálcl lo aoo ntestess dadd posposipososposip çãçãoçãoção de colisãoão

[jj] + (V_(V_initinitit[[jjj] ] tmmmtmti);ti);55 ** gg* * (tmtmtit * t* tmtmti)tt ;

s;s;oooooooooosisisisisis titititittitiononononononnnononns;s;s;s;sssssss

ttttttttttimimimimimimimim ;

ãoãoãoãoãoãoãoãoãoãoooooooã ......

ooooooonnnnnnnnnnnnn titititititittittit mmmmemem s;s;s;s;s;s;;

poposisiçãçãoo dee ccololisisãoão eebjbj i ((EqEquaaçõçõeseses 444 e 5).).olollilisisisiononon - timimee_iinit[i];itt[i[i]] ** tmtmtiti););

mmtit * ttmtm i);mti;mti;

Tradução da 2ª ed

Jeannie Novak

DesenvolvimentoMacromedia® FlaGlen RhodesSérie Profissional

Design de games:PaPaPaPaPaPaPauululul SSchc uytemaSérie profissional

Introdução ao dett seeVolume 1 - Entende

Tradução da 2ª ed

Steve Rabin (ed.)

Programação deTradução da 2ª ed

Jonathan S. Harb

Próximos la

Introdução ao des;;

Volumes 3 e 4

Tradução da 2ª edeseseseseeses;;;;es;Steve Rabin (ed.)

VVVVVVVVVVVOOOOOOOOLLLLLLUUME 2PrPrPrPrPrPPrPPP ogogooggrararramam ção: técnica, linguagem e arquiteturaTrTrTTradadda uçuçãoãã dda a 2ª edição norte-americana

flofl at tmmtmtii == tititimmeme_c_coolliissiionononon - ttimimmee__ininittt[i[i[i];];]];];float tmti = time_collision - time_init[i];pi = ppp iinniit[t[t[[i]i] ++ ((VVVVV ininininnititititt[[i] ** tmtmtiti);pi = p nit[i] + (V init[i] * tmti)

_pi =pi =pi =p p ipp_i i [it[nit[[[i]]i] +i (V_V(V_VV__initin tiniin [[i]ii]]i[[ * tm* tm* * tm* * tmmmmtiti);ti);;_init[i] + (V_init[i] * tmti);ppi =p = p +pp 0.5555 * gggg * (* (* (** tmtitmtittitmtm i * tttmtmti)mti)mti)tt ;;;+ 0.5 * g * (tmti * tmti);vi vi i =vi =vi =vvvii V iV iV_iV_V_iV_V_iV nitit[nit[nit[nit[[nit[n i] +i] +i] +i] i]i]i] g *g *g *g *g *g *g g tmtmtmtmttmtmtmmtmtm ii;i;;i;_init[i] ++ g *g gg tmttmti;i

// velociddaadadee ddedee oobbjbj i ((EqEquuauaçõçõeseseses 4444 eee 555)).).// velocidade de ob i (Equações 4 e 5)

STESTESTESTESTESTETESTSTSTESSST VEVEVVVEE RRABIN(EED(ED((E ITOR)

Vector3D p_init[N] = initial center positions;Vector3D g(0.0, 0.0, -9.81);float mass[N] = particle masses;float time_init[N] = per particle start times;

float eps = coefficient of restitution;

// Loop principal do jogo/renderização.while (game simulation is running){

float t = current game time;detect collisions and collision times;

// Resolve collisions.for (each colliding pair i, j)

// Cálculo antes da posição de colisão e// velocidade de obj i (Equações 4 e 5).float tmti = time_collision - time_init[i];pi = p_init[i] + (V_init[i] * tmti);pi = p + 0.5 * g * (tmti * tmti);vi = V_init[i] + g * tmti;

// Cálculo antes da posição de colisão e// velocidade de obj j (Equações 4 e 5).tmti = time_collision - time_init[j];pj = p_init[j] + (V_init[j] * tmti);pj = p + 0.5 * g * (tmti * tmti);vj = V_init[j] + g * tmti;

Vector3D V_init[N] = initial velocities;Vector3D p_init[N] = initial center positions;Vector3D g(0.0, 0.0, -9.81);float mass[N] = particle masses;float time_init[N] = per particle start times;

float eps = coefficient of restitution;

// Loop principal do jogo/renderização.while (game simulation is running){

float t = current game time;detect collisions and collision times;

// Resolve collisions.for (each colliding pair i, j)

// Cálculo antes da posição de colisão e// velocidade de obj i (Equações 4 e 5).float tmti = time_collision - time_init[i];pi = p_init[i] + (V_init[i] * tmti);pi = p + 0.5 * g * (tmti * tmti);vi = V_init[i] + g * tmti;

// Cálculo antes da posição de colisão e// velocidade de obj j (Equações 4 e 5).tmti = time_collision - time_init[j];pj = p_init[j] + (V_init[j] * tmti);pj = p + 0.5 * g * (tmti * tmti);vj = V_init[j] + g * tmti;

indústria de games ainda é jovem e se encontra em um ritmo de

expansão impressionante, com tendência a resistir a grandes crises

econômicas, gerando oportunidades para novas ideias, novas formas

de jogar e a necessidade de novos talentos para a indústria.

Esse crescimento inspirou alguns dos especialistas mais brilhantes e respeitados

da indústria de jogos a unir sabedoria e experiência para produzir esta obra, que

aborda o desenvolvimento de um jogo, com a profundidade necessária para entender

e apreciar o estado da arte dos processos tecnológicos.

Introdução ao desenvolvimento de games, Volume 2 – Programação: técnica,

linguagem e arquitetura apresenta uma sólida organização didática, com apresentação

estruturada dos conceitos, sistematização de exemplos e situações modelares. Toda a

abordagem é reforçada por exercícios que cobrem o conteúdo de cada capítulo.

O texto ainda conta com uma considerável quantidade de pseudocódigos e códigos,

o que acentua a característica didático-pedagógica da obra.

Este volume apresenta-se como um material muito útil para todos que estudam,

pensam e pesquisam a grande área da programação de games e também para

aqueles que querem ter acesso a uma referência conceitual sólida e à indicação de

fontes consagradas.

AplicaçõesLivro-texto para o curso de Desenvolvimento de Jogos que tenha disciplinas que

envolvam programação, inteligência artificial, fundamentos matemáticos, gráficos,

animação e áudio. Para os cursos de pós-graduação, é um precioso recurso para a

pesquisa de tópicos avançados.

A

ST

EV

E R

AB

IN (E

d.)

INT

RO

DU

ÇÃ

O A

O D

ES

EN

VO

LV

IME

NT

O D

E G

AM

ES

• V

OL

UM

E 2

Para suas soluções de curso e aprendizado,visite www.cengage.com.br

ISBN-13: 978-85-221-1144-2ISBN-10: 85-221-1144-8

9 7 8 8 5 2 2 1 1 1 4 4 2

C

M

Y

CM

MY

CY

CMY

K

VALE.ESTA.gamesVOL2.18x26.ai 1 14/02/12 23:59