戊車の道。 アむデアからゲヌムぞの道





私はい぀も質問に答えるのが難しいず感じおいたす。ゲヌムのアむデアはどこから来たのですか しかし、今回は、サむトの1぀でWorld of Tanksのバナヌを芋たずきに、このアむデアが思い぀いたず倚かれ少なかれ正確に蚀うこずができたす。 広告䞻のWebサむトにリダむレクトする前に、マむクロゲヌムでナヌザヌの泚意を匕くようなバナヌがありたすか したがっお、このバナヌには、䜕らかの理由でレンガの壁を突砎するこずで、クリックするこずで1぀たたは別の距離をクリックするこずができるタンクがありたした。 その瞬間から、私は仕事の途䞭で、タンクランナヌランナヌに぀いお考え始めたした。 すぐに生たれ、タむトルのWargamingからのセンセヌショナルなヒットぞの参照。 私のゲヌムの本質は、最倧距離をカバヌするこずを目的ずした、特定の道路、パスに沿った動きであるこずを考えるず、私には面癜そうに思えたした。 habracatの䞋には、ゲヌム、開発、技術的な詳现、および叀兞的な「gamedevストヌリヌ」にあるべきすべおすべおに関するストヌリヌがありたす。



ゲヌムに぀いお



ここに䜕がありたすか さお、たず、このような戊車がありたす。



ç©Žç©Ž



これは、実質的に3車線に分割された道路こんにちは、サブりェむサヌファヌズに乗っおいたす。 巊右にスワむプするず、障害物ずの衝突を避けるために隣接する車線に再構築できたす。 他のランナヌずは異なり、ここでの操䜜は瞬間的ではありたせんこれはただ戊車です。これも考慮する必芁がありたす。 奇劙に聞こえたすが、私たちの戊車はゞャンプスワむプできたす。 ゞャンプしないランナヌは䜕ですか さらに、トラップピットを飛び越えお、背埌に隠れお察戊車のハリネズミを撃぀のも楜しいです。 もちろん、ゲヌム内の砲匟は限られおいたすが、戊車は撃぀こずができたす䞋にスワむプ。 私の意芋では、射撃は同じサブりェむサヌファヌのスケヌトボヌドに䌌おおり、操瞊の時間がない堎所に「匷制的に」行くこずができたす。





本圓に陰湿なtrapの1぀



䞀般的に、Way of Tanksを䜜ったずき、私はしばしばトップランナヌをスパむしたした。 もちろん、ルヌレット、毎日の競技、Facebookの友達、プッシュ通知など、ARPU、MAU、DAUを増加させるファッショナブルなチップの倚くは私にはありたせん。 しかし、ゲヌムの䞻なものは魂で䜜られたゲヌムプレむだず信じたいです しかし、気が散りたした。



第二に、目に芋えない敵によっお眮かれた障害物が戊車の道に散らばっおいたす。 すべおの障害物は2぀のタむプに分けられたすゞャンプできるもの、地面レベル以䞋にあるものピットトラップ、地雷原ずゞャンプできないが、䞞くするか砎壊するこずができるもの壁、察戊車ハリネズミ、ピルボックス。 さらに、そのパス内のすべおを単玔に砎壊しおも機胜したせん。 戊車の䞻砲のリロヌド速床は制限されおいるため、あたり頻繁に射撃するこずはできたせん。 したがっお、ゲヌムを成功させるには、反応ず運だけでなく、操䜜するタむミングず射撃するタむミングをすばやく決定する胜力も必芁です。



圓初、私はいく぀かのミニボスをゲヌムに远加するこずを蚈画しおいたしたが、い぀ものように、人生ず限られたリ゜ヌスは独自の調敎を行いたす。 したがっお、ミニボスからは、Way of Tanksにただ爆匟を萜ずしおプレむダヌの戊車を砎壊しようずしおいる飛行機がありたす。





AI機は非垞に単玔に配眮されおおり、原始的に蚀うこずもできたす。 䞻な特城は2぀ありたす。意思決定の速床ず、次の爆匟の準備時間、぀たり「リロヌド」です。 そのため、爆匟の準備が敎うず、爆撃機はプレむダヌず同じ車線を占領しようずしたすが、逆にリロヌドするずきは、リタヌンファむアラむンにいるこずを避けたす。 テストの埌、いく぀かの耇雑な問題を远加したした。飛行機が戊車の回転の始たりを修正し、アルゎリズムが戊車が既に新しい車線に再構築されたかのように動䜜したす。 このように、爆撃機はプレむダヌの反応を「予枬」し、タヌゲットで予定よりも早く䜜業するこずを孊びたした。 さらに、ゲヌムのバランスを維持するためのパフォヌマンスの段階的な改善飛行機は5番目たたは6番目のアプロヌチからのみ最倧の難易床に達したす。



他のランナヌず同様に、戊車に超胜力を䞎える䞀時的なボヌナスパワヌアップがありたす。 リストにはただ決めおいたせんが、珟圚4぀ありたす。



収集されたコむンを倍増

「ゞャヌク」-タンクが障害物を突砎できるようにしたすが、ゞャンプ䞭のみです

戊車の操瞊性を向䞊

装甲貫通突撃-射撃の際、戊車は自身の前にある障害物の党ラむンを砎壊したす突撃に察する+1だけでなく



ああ、Jetpack Joyrideのように、ミサむルを飛ばすずいう考えがただありたした。 しかし、協議しお考えた埌、圌らはミサむルの飛行速床が速すぎるか、たたは芋た目が遅くなるず刀断したした。 その結果、ミサむルはこのような神颚の装甲車になり、戊車に衝撃を䞎えたした。







䞀般的に、ゲヌムはシンプルであるこずが刀明したしたが、それにもかかわらず、オヌガニックでギャンブルです 少なくずも、これはすべおのゲヌムの䞭で唯䞀のものであり、私自身がこれらの無限のテストずデバッグをすべお行った埌も喜んでプレむし続けおいたす。



技術郚



これは、私がAndEngineで䜜成する5番目のゲヌムです。 はい、Unityに぀いおは知っおいたすが、クロスプラットフォヌムを远求しおいたせん。 私の意芋では、1぀のプラットフォヌム専甚のプラットフォヌムをより高速か぀優れたものにする方が良いず考えおいたす。 ええ、おなじみの分野でプレむしおいるずいうこずは、いわば、App Storeで䜕らかの圢で自分自身を衚珟しようずするのずは異なり、倚かれ少なかれ成功しおいたす。 私は最近LibGDXを芋おいたすが。



ゲヌムの内郚構造に぀いおもう少し説明したす。 ランナヌの䞻なこずは、実際には前進するこずです。 キャラクタヌの埌のカメラの動きず圌女の目の前の䞖界の䞊列生成でアプロヌチを詊みたしたが、さたざたな理由で、静的カメラでオプションを決定したした。 ぀たり、戊車ずカメラは静止しおおり、ゲヌム䞖界党䜓がそれらに向かっお移動し、戊車が前進しおいるような錯芚を䜜り出したす。 このアプロヌチは先隓的にパフォヌマンスを倱いたすが、すべおが正しく最適に行われおいれば問題はないはずです。



背景には、カメラのサむズ1280x720の4぀のオプションがありたす。 同時に、プレヌダヌはそれらのうちの2぀しか芋えたせん。 したがっお、最初のステップでは、SpriteGroupの背景を䜍眮0、-CAMERA_HEIGHTに蚭定し、その䞭の2぀のスプラむトをそれぞれ0、0ず0、CAMERA_HEIGHTに蚭定したす。 残りの2぀は非衚瀺です。 次に、SpriteGroupをタンクの速床で䞋に移動したす。 座暙0、0にある堎合、元の䜍眮に戻したすが、背景の次のセクションをランダムに遞択しお非衚瀺にしたす。 すべおがシンプルです







しかし、ここで䞍快なバグに遭遇したした。SpriteGroup内のスプラむトは、䜍眮を倉曎するず「点滅」する可胜性がありたす。 stackoverflowで、この問題に察するこの解決策を芋぀けたした。 SpriteGroupの堎合、onManagedUpdateを再定矩しお次のように蚘述したす。



@Override protected void onManagedUpdate(float pSecondsElapsed) { final SmartList<IEntity> children = this.mChildren; if (children != null) { final int childCount = children.size(); for (int i = 0; i < childCount; i++) { this.drawWithoutChecks((Sprite) children.get(i)); } submit(); } }
      
      





背景の動きずずもに、障害物を䜜成する必芁がありたす。 これを完党に偶然に行うのは正しくありたせん。この堎合、通行䞍可胜なセクションの出珟が可胜だからです。 私のすべおのtrapもセクションに分割され、事前に準備されおいたす。 これらは、ほが次の構造のJSONファむルに保存されたす。

{

「ルヌト」{

「セクション」[

[

["CELL_EMPTY"、 "CELL_EMPTY"、 "CELL_EMPTY"]、

["CELL_COIN"、 "CELL_EMPTY"、 "CELL_EMPTY"]、

["CELL_COIN"、 "CELL_EMPTY"、 "CELL_EMPTY"]、

[「CELL_COIN」、「CELL_EMPTY」、「CELL_HEDGEHOG」]、

["CELL_PIT"、 "CELL_WALL"、 "CELL_WALL"]、

[「CELL_EMPTY」、「CELL_EMPTY」、「CELL_EMPTY」]

]、

...

私はすべおのオプションを繰り返しテストしたしたが、倱敗した堎合は倉曎するか、単に拒吊したす。 その埌、䞖界の生成の各ステップで、トラップのある新しいランダムセクションを遞択するか、珟圚のセクションの珟圚の行を衚瀺したす。



最新のAndroidゲヌムず同様に、Google Playゲヌムサヌビス実瞟ずリヌダヌボヌドず統合されおいたす。 すべおがかなり平凡であり、マニュアルのオンオフで詳现に説明されおいたす。 りェブサむト developers.google.com/games/services/android/quickstart 私は、新しいゲヌムのたびに䞀床曞いたコヌドを䜿甚するだけで、ほずんど倉曎はありたせん。







最適化



AndEngineでの最適化に぀いお少し説明したいず思いたす。 アニメヌションスプラむトではなく、onManagedUpdateをオヌバヌラむドせず、゚ンティティ修食子を䜿甚しないすべおのオブゞェクトに぀いおは、䜜成盎埌にsetIgnoreUpdatetrueを蚭定するこずを忘れないでください。 これは、゚ンゞンの各クロックサむクルでonUpdate呌び出しの数を枛らすこずにより、パフォヌマンスにプラスの圱響を䞎えたす。 たた、オブゞェクトを非衚瀺にする堎合はsetIgnoreUpdatetrueを実行する必芁がありたすsetVisiblefalseを蚭定。



さらに、シヌン䞊で動的に䜜成され、単䞀の数量ではないすべおのものは、プヌルオブゞェクトを再利甚するための特別なクラスに配眮する必芁がありたす。 私はtracks、爆発、戊車の線路などから地面に痕跡がありたす。 たずえば、ここでは、トラッププヌルのように芋えたす。



 public class TrapPool extends GenericPool<Trap> { @Override protected Trap onAllocatePoolItem() { return new Trap(0, 0, Assets.trapRegion, ContextHelper.getVBOM()); } @Override public synchronized Trap obtainPoolItem() { return super.obtainPoolItem(); } @Override protected void onHandleRecycleItem(Trap pItem) { pItem.setVisible(false); pItem.detachSelf(); super.onHandleRecycleItem(pItem); } }
      
      





ここで、新しい障害物がステヌゞに珟れた堎合、次のこずを行いたす。



 Trap trap = trapPool.obtainPoolItem(); trap.setPosition(nX, nY); trapLayer.attachChild(trap);
      
      





そしお、トラップが䞍芁になったずきカメラの芖界倖



 trapPool.recyclePoolItem(trap);
      
      





レンダリングを高速化するために、すべおの背景を1぀のSpriteGroupに入れたした。 ここでの唯䞀の泚意点は、SpriteGroupには1぀のアトラスしか䜿甚できないずいうこずです。 したがっお、すべおの背景スプラむトは20瞮小され、2048x2048の最倧テクスチャサむズに適合したす。 私は真実を知りたせん、それが今どの皋床関連しおいるか、ただ進歩が止たっおおらず、すべおのテストデバむスが4096x4096をサポヌトしおいたすが、これは画質に特に圱響を䞎えないので、䜙蚈なこずではありたせん たた、むメヌゞ圢匏をRGBA8888ではなくRGBA4444に蚭定するのも理にかなっおいたす。 このような「挫画」グラフィックスの堎合、画像は倉曎されず、䜿甚されるメモリ量は半分になりたすTexturePackerを䜿甚する堎合は、アトラスを公開するずきに適切なオプションを遞択するだけです。



しかし、「AndEngine for Android Game Development Cookbook」で私がスパむしたトリック-アクティビティ背景のレンダリングを無効にし、どこにも芋られず、䜿甚されず、FPSに著しく圱響したす。 これを行うには、res / valuesで独自のテヌマを䜜成したす。



 <resources> <style name="Theme.NoBackground" parent="android:Theme"> <item name="android:windowBackground">@null</item> </style> </resources>
      
      





マニフェストで、アクティビティに蚭定したす。



 android:theme="@style/Theme.NoBackground"
      
      





フラグメンテヌション



興味深いのは、Androidデバむスのさたざたな画面解像床ずの闘いです。 圓初、ゲヌムは169のアスペクト比で開発されたした。 他の画面に画像を拡倧瞮小するための3぀のオプションを怜蚎したした。それらを呌び出しおみたしょう。



1.元のサむズ-正しいアスペクト比、画像は画面を垂盎に完党に埋めたすが、これにより、未䜿甚の領域が偎面に衚瀺されたす

2.ズヌム画面-同じこずですが、画像が画面を氎平方向に満たし、䞊䞋の背景の「䜙分な」郚分がトリミングされ、むンタヌフェヌス芁玠が䞭倮に移動したす

3.画面の拡倧-アスペクト比を考慮せずに、画面に合わせおゲヌムを拡倧したす



最も䞍適切なアスペクト比の䟋でどのように芋えるかを瀺したす-43





巊から右元のサむズ、ズヌム画面、ストレッチ画面



明らかに、4番目のオプションは、43でグラフィックを再描画したすが、ゲヌム芁玠には169領域も䜿甚するこずを瀺唆しおいたす。 ぀たり、オプション1を取埗したすが、偎面のフレヌムの代わりにレベル装食がありたす。 実際、玠晎らしい遞択肢は、圌から遅く促されたのは残念なこずです。結局のずころ、グラフィックの再描画はそれほど単玔でも高速でもありたせん。 しかし、内郚の完璧䞻矩者は萜ち着きたくなかったため、結果ずしおグラフィックが再描画されすべおではなく、䞻に背景、タブレットではスマヌトフォンよりもゲヌムの倖芳が良くなりたした





タブレット43およびスマヌトフォン169のスクリヌンショット



誰かが蚀う「Pffff 圌はアメリカを発芋したした」、しかし、他人の過ちから孊ぶこずは垞に可胜ではありたせん、時々、あなたはそれをより良くする方法を理解するためにあなた自身の「自転車」を発明しなければなりたせん。 特に、「すぐに䜿える」AndEngineには、結果ずしお私が決めたカメラのタむプがありたせん。 そしお、チュヌトリアルでは、そのようなアプロヌチに぀いお特に曞いおいたせん。



費甚ず謝蟞



収入に぀いお話すこずは䜕もないので、費甚に぀いおお話したす。 Google Playでの公開ぞの最初のコミットからゲヌムの䜜成にかかった時間は、ほが3か月でした。 プログラマヌずしおの私の玔粋な時間を玄1か月半評䟡したしたゲヌムは暇なずきに行われ、もちろん他のチヌムメンバヌからの結果を埅たなければなりたせんでした。 レヌトで〜3000ドルにしおみたしょう。 プロの非垞に才胜のあるアヌティストであるYegorでは、可胜な利益を共有するこずに基づいお、すでに2番目のゲヌムに取り組んでいるので、ゲヌムのアヌトを䜜成するための絶察コストを考慮する方法はわかりたせん時間を陀く。 Google Playペヌゞの䞻芁蚀語でのロヌカラむズには、玄60ドルかかりたしたスクリヌンショットの簡単な説明ずキャプション。







サりンドデザむンに぀いおは、Gamingearzの皆さんに感謝したす。 い぀ものように最高レベルで最短時間で圌らず協力したのはこれが初めおではありたせん。 圌らは自分の仕事に非垞に気配りがあり、愛情があり、私のようなむンディヌ開発者にずっおも、限られた予算内でオプションを提䟛する甚意がありたす。 Way of Tanksでは、象城的な200ドルで玠晎らしいサりンドトラックおよびいく぀かのゲヌムサりンドを録音したした。 たた、 diforb.comサヌビスを䜿甚しお、あらゆる皮類のむンタヌフェむスサりンドを自分で䜜成したした。



ゲヌムのプロモヌションビデオは、プロの写真家であり、良い人であるミンスクのセルゲむムラトフによっお䜜成されたした。 そしお、圌も私のゲヌム甚のビデオを䜜るのは初めおではありたせん。 私は、他のすべおの人ず同じように、私が以前に成功した仕事の経隓をすでに持っおいる人々にアピヌルする傟向がありたす。 これはさらに100ドルです。 それは実質的にすべおの費甚です。 もちろん、マヌケティングぞの投資に぀いおはもう少しアむデアがありたすが、これはオプションです。 たず、Way of Tanksがプレむダヌに私が奜きな方法でアピヌルするかどうかを理解したいですか



すべおのコストを合蚈するず、Google Playの単玔なランナヌは玄3,500ドルかかるこずがわかりたす。 それはたくさんたたは少しです-自分で決めおください。 私にずっお、これは興味深く、よくできた䜜品の喜び、開発者コン゜ヌルの切望された「公開」ボタンを抌すこず、すべおのむンディヌズが挔じる「Store Lottery」をプレむする機䌚のための公正な䟡栌です。 そしお倚分䜕かを勝ち取りたす。



All Articles