Bottoms up! - Ett spel gjort för att fira nyåret 2011!
(fortsättning av inlägget ovan, då sidan hade en teckengräns)
Ett skott för att hinna i tid
Titeln ovan är åskådlig. Just som spelaren i "Bottoms Up!" är tvungen att kapplöpa med tiden med en avgränsad mängd skott, fann vi oss nu med en bildlig bössa vars enda laddade skott vore oss möjligheten att i tid träffa måltavlan i skepnad av nyårsdagen. Så inleddes det. Gränssnitt lades upp, ett sätt att spara banor valdes, musik och en bunt ljud gjordes, och finslipning, så som fallande snö, lades in, och en stor, fin och bjärt måne lades upp å den parallaxa skönheten som var vår stjärneströdda himlabakgrund.
Sedan skapades provutgåvans sex banor. Det fanns ingen banebyggare i detta läge, så jag byggde faktiskt upp dem alla med handskriven kod. Detta var både pilligt och otrevligt, och lättjan mot änden lyser med klarhet i genom ting som att tredje banan fullkomligen saknar istappar, då alla dessa var tvungna att sättas ut för hand med egna koder, icke bara för läge, men även vågrät och lodrät storlek, för mångfalds skull. Jag orkade bara icke göra det, ty annars skulle vi icke hava kunnat hinna i tid, då det var annat av högre vikt som göras skulle.
Att jag mera eller mindre somnade efter allt för många vakna timmar, då spelets sista tillägg gjordes, rätt innan dess att vi skulle släppa det, visar sig tydligen i skärmen med namn och upplysningar, där jag ens icke mindes att göra förhållandet mellan de två textrutorna en aning skevt lodrätt, som rutorna och knapparna i resten av gränssnitten i spelet är en aning slumpmässigt utsatta i förhållande till var andra, för att få till ett mera hårt och skitigt intryck, i enlighet med mina "blödande bildpunkter" som utmärker grafikstilen i hela spelet, för att stärka intrycket av den grova omgivningen i storbyn.
Några kvarvarande uttryck grundandes faktiskt i slumpmässiga eller oväntade val som aldrig helt hade tänkts i genom från början; till dömes är första banan, i provutgåvan som är tillgänglig, egentligen bara en finslipad utgåva av "banan" som nyttjades för att prova spelet under större delen av utvecklingstiden, innan dess att några sanna banor väl gjordes. Allt var egentligen bara ganska slumpmässigt utsatt, men det visade sig att det var ett ganska fint upplägg för en sann bana, och så ledes finslipades den bara, och hölls sedan fast i sin nästan ursprungliga skepnad.
Sista valet
I detta skede, med spelet släppt, såg vi det faktiskt som något fullbordat. Vi hade tänkt oss att släppa nya banor för nederladdning, då spelet var upplagt som så (och är än), att det är möjligt att släppa nya banor i rätt mapp, för att få in dem i spelet.
Runt två eller tre veckor senare hade dock inga nya banor gjorts tillgängliga. Det var vid runt denna tid som vi klargjorde att vi skulle taga detta mycket längre än vi ursprungligen hade tänkt oss; spelet skulle utvecklas för iOS, och både denna utgåva, och datorutgåvan, skulle komma att få mängder av nyheter och banor gjorda innan släppet, och vi ville även tänka i genom svaren som givits av folket som hade spelat provutgåvan, för att göra slutgiltiga spelet - i verklighet, denna gång - en njutbar och skönjbar upplevelse för alla.
Så huru skapades provutgåvan? Vad var det för närmre tankar som låg bak teckningen och mjukvaruupplägget? Vad möjliggjorde det för mig att få i gång spelet i en iPhone? Dessa är alla sagor för flera, framtida tillägg i "Bottoms Coming Up!". Detta var allt för del två; sitt bänkade för att läsa om skapandet av ljudeffekter, när Erik i morgon är värd för del tre.
Detta utdrag från utvecklingsfilmen är äldre än förra, och redan postat här en gång, men då utan inledningen, undertextningen för utlandet, och det fina avslutet. Även denna gång görs flaskan till en raket med hjälp av fläktar, men till skillnad från det andra klippet, vållades det icke av ett fel i spelet.
http://www.youtube.com/watch?v=JV-hDm7lqI0&hd=1
--------------------------------------
ÄN EN GÅNG SKREVS ALLT SOM FÖLJER AV ERIK.
--------------------------------------
Bottoms Coming Up!
Kapitel tre: The Dry Martini
--------------
Idag, barn, handlar det om ljudeffekter!
Första ljudet jag fixade var istapparna. Jag tänkte på vilket ljud jag skulle använda, men det tog inte lång stund innan jag bestämde mig för glas var bäst. Eftersom vi inte hade lång tid på oss, så valde jag att vara lat och skaffa ljud från internet. Jag valde http://soundsnap.com som min källa. Minns inte hur jag hittade den sidan, men den har extremt många ljud.
Hur som helst, jag använde Adobe Audition 1.5 för att redigera alla ljud. Med istappsljudet så tog jag alltså glas som krossas, pitchade ned och lade på lite reverb. Med andra ljud som t.ex. när man skjuter ett skott så har jag 3 ljud samtidigt; 1 för korken, 1 när man häller upp champagne i ett glas (som jag snabbat upp) samt 1 när champagnen fräser (som är konstant, då flaskan skummar konstant). Det fanns inga (eller jag hittade inga i alla fall) ljud när champagne sprutar, så jag fick experimentera lite. Fläktljudet är ett annat exempel där jag blandade flera ljud; jag tog ett brummande maskinljud och blandade med kraftig vind, då det mestadels bara fanns mesiga badrumsfläktar. Det som har flest ljud är introt; 2 olika samplingar av kyrkklockor i bakgrunden, 3 olika vindsamplingar och 2 fyrverkerier (varav 1 används 2 gånger).
Fläkten.
Introt.
En gång bestämde jag mig för att sampla eget material med min Zoom H4N (en portabel inspelare). Jag gick ut en tidig vintermorgon och tänkte spela in ljud när flaskan krockar och glider på snö. Jag använde mig av en flaska julmust men det slutade inte bra. Jo, flaskan höll men det gick inte alls bra att spela in. Det var svårt att få det som jag hade tänkt och det var väldigt kallt och jag var väldigt oerfaren med att spela in ljudeffekter. Det är jag visserligen fortfarande, men ändå.
Zoom H4N.
Jag kan berätta lite om programmet jag använder. Jag har använt mig av Adobe Audition sedan det hette Cool Edit Pro 2.0 och utvecklades av Syntrillium Software. Jag älskar det. Jag har provat Goldwave och Audacity, men tycker att de är väldigt klumpiga och jag tycker att jag inte kan få lika bra precision som i Adobe Audition.
Nä, jag är inte mycket för att göra ljudeffekter över huvud taget. Jag hoppas att jag slipper detta i framtiden och endast kan koncentrera mig på musiken (när det gäller ljud generellt). Jag ger ljudeffekterna i "Bottoms Up!" 3 av 5 flaskor.
Bottoms Coming Up!
Kapitel fyra: for (unsigned int i(4); i < 5; ++ i)
--------------
Titeln för denna del valdes tack vare mitt hemskt lättsinniga skrattlynne, vad gäller ordvitsar. Andra mjukvaruutvecklare hänger nog med i vad detta rör sig, och ser nog neder något väldigt å min så kallade humor, och för resten av eder, är det bara en ganska tydlig klargörelse för att denna del skall omfatta spelskapandes viktigaste del; programmeringen. Visst gör denna icke spelet bättre, då allt annat är just lika viktigt när det kommer till värdet hos vad som slutligen varder till, men utan programmering tjänar inget av det något till, då inget spel alls vore. Programmeringen är vad som sammansätter allt annat, och får det hela att i slutändan komma sig samman, och givetvis även under själva utvecklingstiden.
Bakgrund
Min egen mjukvaruutvecklingssaga sträcker sig nu mera ganska långt bak, även om jag icke är särskilt gammal. Jag är nära nitton åt gammal nu, och förkärleken inleddes först med att skapa hemsidor när jag var kring elva. Runt ett år senare, byggde jag mig småspel med hjälp av en bit mjukvara vid namn Game Maker. Runt denna tid, var den i utgåva 6.0, och kunde fås från en hemsida med en krånglig sökväg, som jag dock hade lagt till minnes vid tillfället. Det fick sig senare ett domännamn som motsvarade dess eget, och kom senare att flyttas till http://www.yoyogames.com/, där det finns än i dag, vid utgåva 8.1. Vid denna tid så var det bara Game Maker och RPG Maker som var de allmänt kända programmen av detta slag, med i dag finns det mycket annat, som Construct och Unity 3D.
Game Maker hade två sätt att sköta programmeringen. Ett var i genom att helt enkelt draga och släppa åtskilliga sorters "drag" att utföra in i "händelser" som tillkallades under särskilda tidpunkter i körningen av spelet. Jag kom kvickt att uppskatta ökningen i både styre och hastighet, som mig gavs i genom det andra viset att programmera, som var att faktiskt nyttja det inbyggda målet GML, som rätt och slätt stod för "Game Maker Language". Jag fortsatte att nyttja detta i två eller kanske till och med tre år, och mina kunskaper ökade stadigt. Samtidigt, var jag även ganska god inom en annan del av programmeringskonsten; med hjälp av ett mål vid namn PHP, som nyttjas i en hel del stora hemsidor i dag, växte jag även till storhets inom listen att bygga hemsidor vid en professionell nivå i ung ålder. Sedan dess, ha'r jag lagt neder mindre och mindre tid i det, och i dag skulle jag nog icke kunna hänga med i de senaste framstegen utan att först läsa och lära om dem, men, oj; när detta väl var, så var jag inget annat än grym.
I och med de senare händelserna här, strövade jag under en viss tid längre och längre från målet att varda spelutvecklare, och tänkte mig snarare att äntra hemsideutvecklingsämbetet i framtiden som komma skulle, och för några år sedan, så rörde jag mig till och med till baka i det mycket äldre målet att arbeta med att antingen regissera eller redigera film, eller båda. Under en viss tid var jag med uppdelade viljor mellan denna dröm, och, än en gång, drömmen om att utveckla spel, som slutligen kom att slås i hop i det senare, och här är jag i dag.
Detta är dock inget som jag nyligen kom fram till. Detta var för flera år sedan, och jag ha'r redan färdats längs vägen av överdriven och dumdristig målmedvetenhet som så ofta ses, och nästan utmärker, unga tonåringar när de först ge'r sig in i självständig spelutveckling. Jag kan, skamset, medgiva, att jag i runt femton eller fjorton års ålder, inledde ett allvarligt menat försök att skapa ett otroligt 3D-RPG. Vi kan alla gissa vad som hände med denna stackars omogna vilja, fullkomligen utan själviskt. Sedan dess, ha'r jag lärt att låta ting taga tiden sin, och ha'r själv tagit mig tiden att lära känna mina egna förmågor, och än viktigare, mina gränser. Det vill taga en lång tid av erfarenhet och lärdomar innan dess att jag känner att målsättningarna från mina yngre dagar äntligen kan verkliggöras.
Med tiden, kom jag att börja lära programmeringsmålet C++, runt två och ett halvt år sedan, eller så, som är ett kraftfullt mål som är vanligt inom mjukvaruutvecklingsämbetet; icke bara för spel, då det skapades för alla ändamål, och icke skräddarsyddes för, säg, spel, till skillnad från något som GML i Game Maker. Målet nyttjas av många stora företag i dag, och är kärnan i många program som du nog nyttjar dagligen, både för ämbetet och fritiden.
Verket "Bottoms Up!" inlett
I förra delen som jag skrev av "Bottom's Coming Up!", talade jag om födseln spelets. Först skapades flaskan, och sattes in i ett "rum" icke större än rutan som det ritades ut i, klargjort av en av skärmdumparna som visades upp i den delen:
Jag sade även att bilden för flaskan var det första som alls skapades, men det var icke alls som gjordes den dagen; jag började faktiskt även att författa de första kodraderna. Först av allt, inledde jag arbetet med en gnutta kod som skulle bana väg för och göra det lättare att sätta upp fysiska lekamar, så som den för flaskan, så att jag skulle kunna prova fysiken i Box2D (fysikuträkningsramverket som omnämndes i del två) så snart som möjligt.
För detta, skapade jag en "klass". För dem av eder som icke känner till uppläggen inom objektorienterad programmering, eller programmering alls, vill jag prova att giva en liten klargörning. I grund och botten, är programmering bara ett vis att tala med datorn, i genom att säga den just vad den skall göra, vare sig det rör sig om enskilda drag, som att öppna skivoluckan eller att stänga av sig själv, eller uppsättningar av drag, som med så gott som all mjukvara. När man ge'r sig hän krångligare mjukvara, med många flera bollar att hålla i luften, så kan man dock finna sig själv med ostädad och vansklig kod att skönja tids nog, om det hela icke tänktes i genom väl nog, och då detta självsagt är något som mjukvaruutvecklarna med sina samarbetare och överordnade helst undviker, så ha'r det gjorts många försök att skapa bästa viset att sköta mjukvaruutveckling. Objektorienterad programmering (kortas av som "OOP" i resten av texten) är ett av dessa.
Tanken är att föra upplägget i ett program så nära verkligheten som man kan; just som sanna världen kan delas upp i enheter, som vissa kanske delar drag, eller är mera eller mindre helt lika, är viljan med OOP möjligheten att göra det samma för mjukvara, som skulle kunna ses som små världar i sin egen rätt. En "klass" vare en mall för slik en enhet i världen. En klass klargör hur'dant något ser ut, och hur' det verkar, men föder ingen faktiskt enhet av det, då klassen sedan är tänkt att nyttjas för att skapa många enheter av samma slag, i enlighet med redogörelsen i klassen. Om jag skapar ett spel som är tänkt att innehålla lådor, så som "Bottoms Up!", skulle jag kanske kunna skapa mig en klass vid namn "Låda", och säga åt denna att rita ut sig själv med rätt bild för en låda. Jag vilje även giva lådan möjligheten att samspela med andra fysiklekamar i genom krockar, och detta vare ett redan redogjort beteende i den redan skapade klassen "Lekame". Då jag skulle vilja föra över detta beteende i lådeklassen min, utan att kopiera dess faktiska kod, kan jag nyttja något som kallas arv, som är just vad det hörs ut som; i genom att välja lekameklassen som "förälder" åt lådeklassen, kan jag låta ärvas egenskaperna från denna föräldraklass i barnet, just som jag själv ärvde egenskaper och drag från DNA hos mina föräldrar.
(fortsättning av inlägget ovan)
Så detta är vad som gjordes för detta spel. Jag skapade en lekameklass vid namn "Body", som ärvde klassen "b2Body", som mig gavs av ramverket Box2D. Jag tog förmågorna från föräldern, och bakade in dem i ett mera skönjbart och lättsamt gränssnitt i barnklassen. Jag fortsatte sedan med grundläggande verk, som att sätta upp rutan att rita ut allt i, och sedan skapade jag slutligen en spelarklass vid namn "Character", som skulle vara mallen för flaskan och dess ryttare att komma, Charles, som var ett barn till lekameklassen. Jag upprättade rätt skepnad för dess fysiska lekame för att låta Box2D räkna ut rätt fysik för den, och nyttjade sedan fyra fyrkantiga lekamar för att sätta ut väggar runt om området som sett i skärmdumpen ovan. För att prova allt detta, tillät jag tangentbordsinmatning att nyttjas för att skjuta i väg flaskan åt något håll, och snart kunde jag se flaskan min med någorlunda verklighetsnärhet studsa av väggarna.
Verktyg och ramverk
De ovan nämnda händelserna sköttes alla i genom min MacBook Pro, men jag äger en annan dator med ett annat operativsystem vid namn Ubuntu, och jag föredra'r egentligen ingen av dem över den andra när det kommer till att arbeta. De är båda fina maskiner, och jag är lika verksam med dem båda. Huvudsakliga skillnaden i arbetesupplägget är att bara Mac min nyttjas för att skapa körbara kopior av spelet för dess operativsystem, OS X, medan den andra datorn nyttjas för att göra detta för Linux och Windows. Bortsett från detta, är jag nöjd med att arbeta i båda.
Linuxdatorn innehåller dock programmet jag tycker bäst om för att författa kod, som heter Code::Blocks (http://www.codeblocks.org/). Det innehåller en mängd trevliga, klyftiga ting som snabbar upp skrivandet redan som det är, och i tillägg, ha'r jag lagt in mängder av egna snabbkommandon skräddarsydda efter mina egna vanor, för att göra allt så kvickt som möjligt för min egen del. Code::Blocks är till även för Mac, men innehåller ett huvudsakligt fel som gör det mera eller mindre värdelöst för mig, och jag ha'r så ledes fått finna mig andra lösningar. Xcode, utvecklat av Apple självt, är trevligt, och jag nyttjar det för att utföra all slutgiltig sammanfogning, men det håller illa med om sättet som jag skriver min kod, så för Mac, håller jag mig till att skriva nästan all kod i ett program som heter Eclipse (http://www.eclipse.org/), och innehåller färre näpenheter än Code::Blocks, men är bättre än något annat som jag än så länge ha'r kunnat finna. Detta gäller dock bara datorutgåvan; för iOS-utgåvan nyttjar jag enbart Xcode, icke bara för att det är Apples egna, tillägnade mjukvara för ändamålet, som så ledes gör allt mycket lätt, men även för att jag ingen annan textbehandlare känner till, som är gjord för den underliga blandning av C++ och Apples huvudsakliga programmeringsmål, Objective-C, som jag nyttjar för att skriva koden för denna utgåva (ofta kallat Objective-C++).
Box2D är ett av ramverken som jag tidigare ha'r nämnt. Det är ett bibliotek skapat för att utföra rätt goda fysikuträkningar, som nyttjas för detta ändamål i "Bottoms Up!". En annan typ av ramverk som spelet beror av, är ett utritningsramverk för att göra uppgiften med att rita ut bilder till skärmen lättare. För datorutgåvan, nyttjar jag ett ramverk som heter SFML (http://sfml-dev.org), som är byggt upp å OpenGL (http://www.opengl.org/), som nog kan vara ett mera välkänt namn i öron och ögon hos dem som helt saknar mjukvaruutvecklingserfarenhet, då detta är kärnan i utritningsramverken i många storspel i dag. SFML sköter även uppspelningen av spelets musik och dess alla ljud, och kan taga hand om än flera uppgifter fullt ut ägnade åt spelutveckling. För iOS-utgåvan, nyttjar jag ett annat ramverk, vid namn Cocos2D (http://www.cocos2d-iphone.org/), som är trevligt i och med att det lyfter en stor del av tyngden av axlarna mina, när det kommer till skärmutritning, men det saknar några ting som detta spel kräver av mig, och körningen är ganska långsam, och detta ha'r gjort mig tvungen att gräva in i och ändra en del av dess källkod för att bättra utförandet; något som ha'r innefattat ren OpenGL-kod, då även Cocos2D är grundat upp å detta ramverk, eller egentligen OpenGL ES, som är ett utdrag av OpenGL, huvudsakligen menat för bärbara enheter med mindre styrka än vanliga datorer.
Slutligen beror spelet även upp å det utmärka, lättviktiga TinyXML (http://www.grinninglizard.com/tinyxml/), som jag nyttja för att ladda in och läsa av XML-filer. XML är ett filformat vanligen nyttjat för att spara upplysningar, och är mera eller mindre fullt ut likt vissa mål som nyttjas för utveckling av hemsidor, och är mig så ledes mycket välkänt och lätt att tycka om. Detta bibliotek går fint i både datorer och iOS, just som Box2D, så delarna som rör utritning är så gott som de enda som jag ha'r varit tvungen att helt göra om, medan koden för fysiken och utrotningen mera eller mindre står omändrad sedan datorutgåvan.
Lärdomar
Att skapa "Bottoms Up!" ha'r mig än så länge varit en mycket god upplevelse, även om spelet än nu ha'r en någorlunda lång väg att fara innan dess att det är klart. Medan utvecklingen ha'r flutit fram ganska väl, så ha'r jag mött visst krångel längs vägen, men ha'r löst det som ha'r dukit upp, och trots att detta spel kanske icke ser otroligen avancerat ut för världen, så är det en hel del tid och kod lagt i att sätta samman allt, och jag känner att jag ha'r utvecklat mycket som en programmör under dessa månader, och jag ha'r lärt en hel del viktiga läxor.
Till dömes, plägade jag att vara överdrivet fin i kanten när det kom till att lägga upp koden min. Som jag sade i förra delen som jag författade, byggde jag om motorn för plattformsspelet mitt tre gånger, och saktade så neder framstegen om och om igen, och jag kom egentligen aldrig någon vart. En hel del fin kod skrevs, men det finns än då nästan inget att visa upp. Vad gällde "Bottoms Up!", som från början ens icke var menat att utvecklas i ett helt spel, oroade jag mig icke mycket över upplägg, och gjorde allt ganska kvickt och kladdigt, utan mycken framförhållning, och detta ha'r, å ena sidan, ökat framstegen och tagit utvecklingen långt fram under ganska kort tid, men å andra sidan, så är en stor del av koden bara en enda gröt, som jag alls icke är stolt över, och stundom, ha'r det varit vanskligt att arbeta med kod som man återvänt till eller utökat. Det är även ganska våndasamt att lägga in nytt innehåll i spelet; något som hade kunnat göras mycket lättare och kvickare att göra om jag bara hade tagit mig tiden att göra mig ett gott upplägg för det, och hade skrivit mera kod från början, för att bana väg för framtida tillägg.
Lärdomen som dragit av denna saga, är att jag å något vis tarv sammanfoga detta arbetesflöde med mitt gamla, för att skapa det fullkomna för framtida spel. Jag är viss om att det första gången icke lär gå vägen, men jag vill nog lyckas bättre än denna gång, och är viss om att jag vill lära något nytt längs med vägen, och detta för mig även till en annan mycket viktig lärdom dragen under denna tid; det spelar ingen roll om koden icke är fagraste ting som ögon någonsin skådat, om det än då gör sitt med glans. Gör det klart än då. Du vill lära så mycket längs vägen om du bara tör möta nya, slika motgångar, och du kommer till att kunna göra vart nytt spel i framtiden än bättre, och det gäller bara koden; det innebär icke att utfallet själv - själva spelet, som är det som folket i slutändan än då får taga del av - icke är gott. Detta är något som kommer väl i ljus när man ser till dess att jag är mycket nöjd över vad jag samman med Erik ha'r åstadkommit. Jag tycker om att spela spelet själv, och tror att det är en ganska huvudsaklig del av att nå framgång. Det krävs glädje och stolhet smidna in i svärdet för att få det att skina.
wat
Inget avsnitt av "Bottoms Coming Up!" för eder i dag, men en gnutta uppdateringar.
Jag ha'r arbetat vidare med optimeringarna för iOS, och är för stunden uppe i runt 35 bildrutor i sekunden i iPhone 3G, och självsagt än nu vid 60 i iPhone 4. Delvis är ytterligare partikelfinslipning att tacka för tillskottet, och jag kunde till och med återinföra genomskinlighetsstödet utan något större tapp, och detta vållade finare partiklar utan någon hake. Jag fick skummet att se bättre ut i allmänhet, men jag är än nu icke fullt nöjd med det, då det är så otroligt läckert i datorutgåvan, och jag vill hålla mig så nära detta som jag bara kan.
Det verkade som om att min tillämpning av nyprörelsen för att gå närmre eller längre i från bilden var vrängd i jämförelse med viset som rörelsen utförs i andra program, så jag fixade till detta; det rörde sig trots allt bara om att byta ut ett plustecken mot ett minustecken. En annan uppordning gällande detta var att taga bort hackigheten som rörelsen hade haft, som varit vållad av det att iOS-SDK:et, av någon grund, giver mig handtagen åt fingerlägena i en uppenbarligen slumpmässig ordning var gång. Jag valde att spara pekarna själv så snart som jag upptäcker att två fingrar rör vid skärmen, för att kunna återkalla dem var gång som jag kollar efter skillnader i avståndet mellan dem.
Jag uppdaterade även byggaren en aning, i genom att byta ut tillfälliga bilden för statyverktyget, och såg till dess att den nu faktiskt föreställer en staty, snarare än en istapp.
Jag lade även till snabbknappar för att skifta sorts staty i byggläget; nummerknapparna. Dessa knappar tillägnades även uppgiften att i valläget kunna nyttjas för att bläddra mellan sidorna i verktygslistan.
Ett annat viktigt tillägg i byggaren var att få den att ordna om felaktiga baneindex vid inladdningen av dem. Detta är inget som nyttjaren egentligen märker, men om han, till dömes, klistrar in en banefil någon annan stans i från, in i mappen för sparade banor i byggaren, med ett index som är samma som för en annan bana, eller om indexet icke numret rätt i följd efter föregående banas, så ändras indexen för alla inblandade banor och skrivs över för att undvika krångel, för att göra allt detta så lätt som möjligt för framtida nyttjare som önskar klistra in ett gäng banor byggda av någon annan, eller upp å en annan dator, in i byggarmappen i deras egen dator.
Slutligen färdigställde jag bilden för meddelandesystemet, för att få den att hålla sig i enlighet med stilen som går i genom resten av spelet. Jag nyttjade samma bild som tillfälligen nyttjades innan dess, men utförde ändringar för att åstadkomma detta utfall.
ÄNDRINGSDAGBOK (inklistrat från engelska filen):
-----------------
2011-06-14:
* Found out that even though the game was paused, if the bottle was within the wind stream of a fan, the fan would keep boosting, and when the game was unpaused again, all of that built up force would be unleashed to boost the bottle off at a huge speed. I fixed this.
* Noticed a bug in the snow particle system of the menu when returning to it from the game, which soon appeared to have been caused by the recent addition for smoother flow. Got rid of this bug.
2011-06-15:
* Changed the layer ordering of statues; they now go in layer five, along with chimneys and fans, rather than layer three, with icicles and crates.
2011-06-19:
* Removed the code specifying that Charles himself should not have his collision checked against the goal. For some reason, I had previously decided that only the bottle should be able to detect collisions with the goal.
* In the demo, the loading bar stays at 0 % for a while and then goes straight to 100 %, when loading levels. I fixed this.
* Made the image with the fakey particles for the iOS version about 30 % smaller, to make it look better, which it now does. I also decreased the particle spawn factor from 30 to 27, and I actually increased the FPS by 2; it's now running at 36 FPS.
* Inverted the pinching gestures to reflect the standard used by most applications. It's still bugged, though.
* Fixed the aforementioned bugginess of the pinch gesture, which is now working perfectly. The reason was that the SDK returns the pinch handles in a random order every time, so I simply stored the pointer for later access myself.
* Tried to put opacity support back into the particles, and as I only dropped about a single frame per second, I'm going to keep it. It looks better.
* Added a per-particle weight property to the particle system, defining how much each individual particle should be influenced by the gravity of the particle system, in order to make the weight of the foam dynamic, so that I can have them fall quicker when the bottle is at a low velocity, and the other way around. This way, particles appear to have a longer lifetime than they do, increasing density and beauty of the particle system without any FPS lost. I also scaled up the foam particle graphics a bit to help achieve this, and it actually looked better.
* Checked a point off of my list by making the editor overwrite the indices of the levels when loading them, to make sure that all levels appear in order and no indices are the same or further than one from the previous one. This way, any new levels can be can be copied into the folder of saved levels of the editor to become loadable without any problems.
* Added an image depicting an actual statue to the corresponding tool in the editor, and also made it possible to change the statue type using the number keys in the editing mode.
* Made it possible to flip through the pages of the list of tools in selection mode.
* Created the final graphics for the information dialogues.
Ut över lösning av ett och annat fel, ha'r jag icke haft tid för mycket arbete under de senaste dagarna, men åt minstone något är gjort.
Jag lade viss tid i att utöka möjligheterna hos min lilla inkapsling av de fysiska förmågor som mig är givna i genom Box2D, för att göra nya sorters ting möjliga; gungor. Lekparksgungor.
De är ett hinder, och tanken är att spelaren skall vara tvungen att få till genomfarten rätt för att icke slås till av gungorna och mista all fart. Bilderna är tillfälliga.
De rör sig åt motsatta håll, givetvis.
ÄNDRINGSDAGBOK (inklistrat från engelska filen):
-----------------
2011-06-19:
* Changed the 'File name:' label in the editor to 'File:' to make up more space to fit longer file names or level titles.
2011-06-21 - 2011-06-22:
* Fixed a bug occurring when moving statues in the editor; only the statues themselves would actually follow along with the mouse, leaving the pedestals untouched and thus unmovable. As the solution was the same as for scaffoldings, which once had the same problem, I decided to create a common interface for them both to inherit, which I might also have use for in the future.
* Added support for joints to the wrapper class for physical bodies, both for the iOS version and the computer version.
2011-06-22:
* Added to the joint functionality in order to make everything work out.
* Hacked into to Box2D to make a convenient change; I added an empty, virtual declaration of the initialisation function used by some of the subclasses of b2JointDef to the parent class, so that I wouldn't have to cast any joint definitions wanting to make use of this function. I wanted to be able to take advantage of the power of polymorphism, so I made this possible.
* Created playground swings connected to their poles through revolute joints. They always appear in sets of two swings on one pole, which rock constantly in opposite directions. The point is to avoid the obstacle by finding an opening when the swings are far from each other. The graphics are temporary so far, and there is no tool for this in the editor yet.
I och med att jag saknade möjligheten att arbeta två eller tre första dagarna av denna vecka, och sedan dess är insjuknad, med följden av sömnöverskott, så är det icke mycket nytt som är gjort denna vecka, men jag känner att jag bara staplar upp det för ett mindre och mindre spännande inlägg, längre in i framtiden, om jag inget skriver nu.
I vart fall, så är en av grejerna som är gjorda, verktyget för gungor i byggaren. Inga flera inställningar än var man skall sätta ut dem är till. Erik skapade sedan gnisselljud för dessa, som jag lade in i spelet, dynamiskt, så att när gungorna gungar, så gnisslar de, men icke när de tappat farten, som skulle kunna hända om spelaren krockar in i dem.
Fläktarna ha'r fått se sig själva snyggas till en gnutta (bildens engelska text [bilden lades först upp till Twitter] var jag för lat för att ändra):
Jag plockade även äntligen bort pilen upp å målskylten, och lade i dess stad dit en rät och slät text för att undvika förvirring hos spelare som kanske tror pilen vara en vägvisare mot målet, snarare än själva målet.
Ett nytt, större tillägg gjordes, både för iOS och för dator, i skepnaden av stöd för rörliga bilder; tidigare ha'r alla bilder varit stillastående, och bara runtsnodda, storleksändrade och så vidare, vid körtid, och partiklar ha'r nyttjats för rök, skum, vind och fallande snö.
Huvudsakliga grunden till dess att rörliga bilder lades till, är att partiklarna är långsammare i iOS, och jag vill byta ut skorstensröken och fläktvinden mot rörliga bilder, som skulle kunna vara hjälpsamma ändringar. Jag ha'r redan gjort detta för vinden, och det ser fint ut nog. Jag pysslar med röken, men ha'r än nu icke lyckats skapa en fullständigen sömlös upprepning. Visst finslip att göras där.
Ut över detta, så hoppas jag kunna göra bildverket i spelet litet mera spännande över huvud taget, i genom att lägga in rörliga bilder här och där. Förmodligen ett litet tillägg för att få Charles att blinka då och då, till dömes.
Jag ha'r även bedit Erik om en bunt ljud, så jag hoppas få dem gjorda och mig sända snart nog. Jag bad främst om ljud rörande statyerna, så som ett ljud för när jordklotsstatyn rullar i snön.
ÄNDRINGSDAGBOK (inklistrat från engelska filen):
-----------------
2011-06-23:
* Updated the graphics for the fans.
* Updated the graphics for the goals, making them say 'GOAL' rather than having a potentially misleading arrow.
* Added a tool for the creation of swings to the editor.
* Erik created sounds for the swings. I edited them a little, and then he finalised the product with better quality, and I programmed the swings to creak as they rock. This is completely dynamical, and if the bottle were to jam them up so that they can't move, they won't make any creaking, so such ugly moments will be avoided.
* Lowered the volume of the sounds played when winning or losing a bit.
2011-06-24 - 2011-06-25:
* Fixed a bug where statues would not appear at the correct position when playtesting a level after having been moved in the editor. This was weird, because this happened because of the fact that I, for some reason, actually had written the code to do this. This might have been to prevent some other bug that might come back to bite me later. We'll see.
2011-06-28 - 2011-06-29:
* Created a class for animated images. I have not ported it to iOS yet.
2011-06-30 - 2011-07-01:
* Ported the class for animated images to iOS. I'm using the setTextureRect message of the CCSprite class in order to clip the image properly, to display the correct frame.
* Expanded the sprite sheet functionality for animation to support not only columns of frames, but also rows, since textures easily got too large to load.
* Created the animated image for the fans' windstreams, and replaced the particle systems with these, for the iOS version.
2011-07-01:
* Made the animated image a static pointer shared between each fan instance instead, so that I don't have to calculate the frames and everything more than necessary; having all streams always at the same point in the animation is no problem.
Denna vecka redogörs nyheterna även i videoform!
Allt detta följer även nedan som vanlig text, med vissa bilder som icke alla är särskilt uppvisade i klippet.
En vecka är fluten, men jag välkomnar eder åter. Dags att gå i genom de mest spännande delarna av ändringsdagboken, och lägga resten i bottnen än en gång.
Jag ha'r arbetat litet med rökanimationen, för att få den att ställa mig en gnutta mera till frids, men det saknas än mycket att göra. Jag spelade in detta för att visa nuvarande framsteg här om dagen:
Än nu upprepas det icke helt sömlöst, men det är gott nog för tillfällig grafik, jag återvänder hit någon annan dag. Klippet laddades icke upp i officiella kanalen, då det var så nyttigt.
En spännade del av arbetet denna vecka var att få bilderna klara för gungorna, så att deras tillfälliga grafik kunde kastas ut! Här är nya grejerna:
Påle och gunga:
Skärmdumpar från spelet:
Även byggaren fick sig ett litet nytillägg i sken av detta, och en vettig ikon lades in för gungoverktyget:
Jag matade lättjan min en gnutta, i genom att lägga in ytterligare snabbknappar i byggaren. Det är nu möjligt att bläddra i genom verktygslådans sidor med skiftknappen och nummerknapparna 1 - 9 (jag tvivlar över att vi kommer upp i flera än nio sidor), och i och med att var sida innehåller nio verktyg som mest, kan samma göras för att bläddra mellan verktygen inom nuvarande sidan, utan skiftknappen hållen. Det går även att bläddra i sidorna med upp- och nederpilknapparna, och detta går runt hela vägen.
Mest spännande delen av denna vecka var dock att få mig en iPad 2! iPhoneutgåvan funkade utmärkt med en gång, när den kompilerades för denna maskin i staden, och nyttjade ett större synfält, med allt annat verkande i sin ordning. Inledningsvis såg det ut så här:
http://i1181.photobucket.com/albums/x432/RoyalRailway/BUIpad2_Liten.jpg
http://i1181.photobucket.com/albums/x432/RoyalRailway/BUIpad3_Liten.jpg
http://i1181.photobucket.com/albums/x432/RoyalRailway/BUIpad4_Liten.jpg
http://i1181.photobucket.com/albums/x432/RoyalRailway/BUIpad5_Liten.jpg
Icke bry eder om röken i övre vänstra hörnet; jag provade bara rörliga bilder.
Efter en gnutta finslip, fick jag ursprungsbilderna från datorutgåvan att visas i staden för de mindre för iPhone:
Så här är det, i en enda lycklig iHjon:
iPad 2, MacBook Pro, iPhone 4 och iPhone 3G. Låt oss nu dock bara icke glömma det, att spelet även kör fint i Windows och Linux!
ÄNDRINGSDAGBOK (inklistrat från engelska filen):
-----------------
2011-07-02:
* I am temporarily satisfied with the smoke animation. It looks better at 18 FPS than 30, and it looks better on an actual unit than the simulator, because of the smaller screen. I'll stick to it for now, at least.
2011-07-03:
* Finished up the graphics for the swings.
* I remembered why I had disabled Charles as a collision checker for the goal, having only the bottle itself receptive; since Charles can extend through things, even though he looks flat, the collision body still has the same size, and that makes it possible to reach a goal on the top of a scaffolding from below, for example, without having actually reached the goal. To prevent this kind of cheating, I decided to disable this again.
* Noticed that swings were incorrectly positioned when saved to level files, so I fixed this.
* Added a proper icon to the swing tool in the editor, actually depicting a pair of swings.
* Moved the vertical position of the cursor in a textfield up two pixels.
* Made it possible to use the number keys 1 - 9, when holding shift, to select the item with the corresponding number on the current page in the toolbox interface of the editor.
2011-07-04:
* Swapped the behaviour of the aforementioned addition of hotkeys, so that shift is held to swap between pages instead, and is not, when selecting tools. I also made it possible to use the up and down arrow keys to browse pages in a wrapping fashion.
2011-07-06 - 2011-07-07:
* Got myself an iPad 2 yesterday, and today, I tried putting the game on it, and it is working out just the way I had intended. Nothing is scaled; instead the viewport is larger, and the GUI remains in place, even when zooming, which is working out perfectly fine, just as the arrow can reach the entire screen, while the increased resolution does not allow one to shoot farther than on the iPhone. The graphics need to be changed into the full-size graphics of the computer version, though. It will be beautiful.
* For some reason, which I am still unsure of, despite having fixed the problem, the application will crash every time I ever run it if I force quit it even once. The only solution was to reinstall the entire thing, with the same result if I would force quit. I solved this, amazingly, by changing the deployment target of the project from iOS 4.3 to iOS 4.2
* Made the iPad version use the original HD graphics of the computer version, while the iPhone version still uses the scaled down graphics. This has not been changed for particles yet, though.
* Put the original particle system back into the fans for the iPad version, and brought the foam system closer to the original one, but not entirely. It still needs a bit of tweaking, though.
* Noticed how the generation of stars wasn't completely random; it was random, but always the same, since I always set the same seed. I didn't even get any big stars, because I always got too big random numbers. I changed the seed to the system time, and I increased the threshold for big stars a bit. I also made the iPad version generate three times as many stars as the iPhone version.
* Increased the density of the falling snow on the iPad to conform to the computer version.
* My solution to check whether I'm running on the iPad, using the preprocessor definition UI_USER_INTERFACE_IDIOM, of Cocoa, did not work when compiling for the older 3.1.3 SDK of my iPhone 3G; I solved this by simply checking whether it is defined at all, and if it is not, well, I'm running on an iPhone. I don't know if I need to be more specific in the future.
* Noticed how windows on the right sides of the houses were too far to the left. Fixed this.
sämsta skiten jag sett
allt förutom musiken suger
Jag känner dock båda ovanstående. Vore värre från främlingar. ;3
Denna vecka är det över tjugo minuter video inspelad hemma hos Erik, med oss båda! Både utveckling och trams.
http://www.youtube.com/watch?v=AWRvDBc2HdI&hd=1
http://www.youtube.com/watch?v=1ymwenyFP8o&hd=1
ÄNDRINGSDAGBOK (inklistrat från engelska filen):
-----------------
2011-07-09 - 2011-07-10:
* Tried the game on Erik's first generation iPad; about 30-40 FPS. Seems to be enough.
* Made sure that icicles could be of variable size by enabling transforms for the image.
* Fixed up the scaffoldings; apparently, they didn't look exactly like on PC on iOS.
* Tuned up the physics quality a bit for iPad, but not for iPhone/iPod Touch.
* Made the iOS sky darker to match up with the computer version, but I'm still not entirely satisfied.
* Updated the code for the moon, to make its positioning work more seamlessly when swapping resolutions, and between different devices.
* Made the foam a bit more dense on the iPad. I think it looks better.
2011-07-10 - 2011-07-11:
* Fixed up the HD images of scaffoldings without poles for the iPad.
* Made shooting on iPad and iPhone match up with the computer. Almost.
* Added invisible winds at the top of the levels, to prevent players from getting out of the level, by blowing them back into it. Only for computer so far.
2011-07-11:
* The same is now done for the iOS. Started on the messaging system for the iPad, and got it displaying nicely, which involved setting boundaries for the label containing the main text, so that it would wrap the way I wanted it to.
2011-07-12:
* Prevented pinching from working if more than two fingers are touching the screen.
* Made it possible to pause and unpause the game by touching the screen with three fingers.
* Redid the touch system to get rid of bugs.
* Decided to let what was really a bug stay, where the game will get paused when four fingers are used to leave for the home screen; I supported this behaviour by intentionally making the game pause itself when the home button is pressed. This way, when the player gets back to the game, he won't get thrown right back into the action and lose time.
* Fixed a bug where corks would be drawn at the bottom of the screen when shot, instead of at the top, by the circles from which they were shot.
* Added support for buttons that can be pressed with a finger.
* Ported the recently created messaging system to iOS. To do this, I had to find out how to get access to modifying files. It seems files that can be modified have to appear in a directory called Documents, in the main directory, which I make sure to programmatically find in order to create the file the first time the game runs, which enables me to overwrite it later on.
* Got the messaging system into the iPhone as well, using the same graphics, without scaling them, for easy readability, since they just about fit.
2011-07-13 - 2011-07-14:
* Got button text displaying correctly.
* Ported the pause screen to iOS, so that the screen gets a dark overlay when paused, and the three buttons sayings 'Continue', 'Restart level' and 'Exit level' were added. Both 'Continue' and another three-finger tap can be used to unpause the game.
* Got the 'Restart level' button working. This involved some rewriting of/adding to some subsystems, and finding a bunch of bugs and getting rid of segmentation faults. A few bibugs were removed as well.
* Fixed a bug where the dark overlay of the pause screen would appear somewhere on the screen when displaying messages.
2011-07-14 - 2011-07-15:
* Created a sound loader to be able to load and access sounds in the same way as I do it for graphics.
* Added the sound for the bottle hitting certain objects.
2011-07-15:
* Added one of the two sounds for shooting that Erik has remade so far.
Kul sånt här! Önskar att jag hade tid och ork för sån här programmering!
Keep up the good work! :)
Du måste vara inloggad för att skriva i forumet