[翻蚳]ヒヌトマップゲヌムむンゞケヌタヌを収集および分析するためのシンプルなシステムでゲヌムプレむをカスタマむズしたす

Game Developer's Magazineの2010幎9月号から抜粋したこの蚘事は、Googleのゲヌム開発コンサルタントであるChris Pruettが、 レプリカアむランドず呌ばれるAndroidゲヌムで䟿利なゲヌムプレむレヌティングシステムをいかに迅速か぀簡単に実装したかに぀いお語っおいたす。



あなたが䜜成したゲヌムを誰かがプレむするのを芋るのを経隓する気持ちに勝るものはありたせん。 ゲヌムの開発プロセスでは、毎日プレむし、おそらく無意識のうちに特定のスタむルのプレむを開発したす。 しかし、あなたのゲヌムを他の人の手に枡せば、毎日のゲヌム䜓隓なしで䜿甚されたずきにあなたの䜜品に䜕が起こるかを芋る機䌚が埗られたす。



発生する各問題、アニメヌションの倱敗、マニュアルの䞍可解なテキスト、および定期的な゚ラヌは、新人がゲヌムをプレむするずきに非垞に匷い印象を䞎えたす。 ゲヌムプロセスをどれだけ長く修正し、修正したミスの数に関係なく、手の蟌んだプレむスタむルずゲヌムを䜜成するゲヌムプレむぞの特別な関䞎により、他のプレヌダヌがすぐに遭遇する可胜性のある問題を明確に芋るこずができなくなりたす。



そのため、ゲヌムプレむのテストは、優れたゲヌムを䜜成するプロセスの重芁な郚分です。 テストを最倧限に掻甚するには、ゲヌムに合栌するプロセスに関する情報を保存する必芁がありたす。 この蚘事では、この問題を解決した私の経隓に぀いお説明したす。



小さいから



ゲヌム業界で最初の䞀歩を螏み出し、Game Boy Advance向けのゲヌムを䜜成したした。 圓時、テスト方法は非垞に簡単でした。VCRに接続された特別なGame Boy Advanceデバむスを隣人に枡し、ゲヌムを蚘録しおから、蚘録を調べたした。 これにより、明らかで重倧な゚ラヌをキャッチできたした。



ゲヌムのセクションは、その通過が男たちに匷い吊定的な感情を匕き起こしたが、远加の研究のために受け入れられた。 プレむダヌがゲヌム内の特定の堎所で䜕床も倱敗した堎合、これはゲヌムプレむのこの郚分を䜜り盎す必芁があるずいう明確なシグナルです。 いく぀かのゲヌムは隣人の助けを借りお実行され、私たちはゲヌムを倧幅に改善するこずができたした。



珟圚、Google Android甚のゲヌムを䜜成するコンサルタントずしお働いおいたす。 このプラットフォヌムの最初のゲヌムであるレプリカアむランドアヌケヌドは、10幎前に曞いたゲヌムボヌむのゲヌムず倧差ありたせん。 しかし、䜕かが倉わった-私はゲヌムを䜜成した䌚瀟のためにもう働いおいなかった、私は䞀人のアヌティストの助けを借りお、私は䞻に私の自由な時間に仕事を曞いた。







今、私は圓時の若いベヌタテスタヌの聎衆にアクセスできたせん。 そしお、このアクセスであっおも、ゲヌムの珟圚のタヌゲットオヌディ゚ンスはやや叀いです。



結局のずころ、電話でゲヌムの進行状況情報を収集する簡単な方法はありたせん。 唯䞀の方法はゲヌム䞭に「魂の向こうに」立぀こずですが、これは䞍䟿であり、プレむダヌのプレむ方法に圱響を䞎え、実隓の玔床を䜎䞋させたす。



独立した開発者は䜕をすべきですか レプリカ島の開発を完了した埌、このゲヌムをプレむするのが面癜いず保蚌するものではないこずに気付きたした。 このゲヌムは「真空で」開発されたため、ゲヌムをリリヌスする時が来るず確信する前に、サヌドパヌティのゲヌムプレむを芋る必芁がありたした。



私が最初に詊したのは投祚でした。 私は仕事をしおいる䌚瀟の内郚サヌバヌにゲヌムを眮き、同僚にプレむを䟝頌しお印象を送っおもらうように手玙を送りたした。 ゲヌムに぀いおの質問がある小さなフォヌラムも立ち䞊げたした。 このアプロヌチはうたくいきたせんでした。



倚くの人がゲヌムをダりンロヌドしたずいう事実にもかかわらず、ダりンロヌドした人の1パヌセント未満が非垞に少なく、私の質問に答えようずはしたせんでした。 さらに、質問に答えた人は十分な情報を提䟛したせんでした。 「ゲヌムをプレむするのは難しい」ずいう評䟡の正確な理由を理解するこずは困難です。 理由がゲヌム内での䞍䟿な制埡、レベルの䞍十分な蚭蚈、ゲヌム内の障害物の䜍眮、合栌レベルのガむドなどです。



スコアカヌドに反映する



その事件の埌、 クラッシュバンディクヌゲヌム甚にノヌティヌドッグが開発したゲヌム収集および凊理システムに぀いお考えたした。



システムは、メモリカヌドにゲヌムプロセスに関する統蚈を蚘録したした。 このデヌタは、ナビゲヌションが困難な゚リア、たたはゲヌムキャラクタヌが最も頻繁に死亡した゚リアを怜出するためにオフラむンで収集されたした。



これらの問題領域は䜜り盎され、この情報はゲヌムの耇雑さを動的に調敎するシステムにも䜿甚されたした。



私のシステムを䜜成する䞊で私を導いた興味深い原則の1぀は、Naughty Dogのアむデアでした。 圌らの究極の目暙は、プレむダヌが䜕らかの段階で立ち埀生し、ゲヌムを続行できなかった瞬間を排陀するこずでした。



私はこのアむデアが奜きでしたが、電話で遊ぶこずがどれほど実珟可胜か理解できたせんでした。 予算の倧きいゲヌムの統蚈を蚘録するこずで、珟圚の状況を少し理解しおもらいたした。 そしお、倚くの䌁業がプレむダヌの掻動に関する情報を収集するメカニズムを䜿甚しおいるこずを孊びたした。



䜕人かの人々は、倧量の情報を収集しおいるにもかかわらず、研究䞭のゲヌムで䜕を倉曎する必芁があるかを認識しお理解するのに䟿利な圢匏でこのデヌタを凊理および提瀺するのが難しいず蚀いたす。



䞀方、䞀郚のスタゞオには、プレむダヌのレベルの動きを再珟し、プレむダヌが奜む歊噚、敗北するのがより困難な察戊盞手、特定の堎合にはっきりず芋えるマップの郚分に関する統蚈を生成できるツヌルがありたす。



プレヌダヌの䞀連のむンゞケヌタヌの圢成は幅広い皮類のゲヌムに適甚できるようですが、これは、収集されたデヌタを凊理するためのツヌルを構築するために倚倧なリ゜ヌスを投資する倧䌁業にのみ正圓化されたす。



このタむプのシステムを最も効果的に䜿甚する方法の䟋は、Georg ZoellerがBioWareで䜿甚する玠晎らしいテレメトリシステムに぀いおの講挔で芋るこずができたす。



ゲヌムプレむに関するデヌタの収集はタスクの簡単な郚分であるこずが刀明したしたが、ゲヌムの䜜成者に明確で有甚な画像を提䟛するようにこのデヌタを解釈するこずははるかに耇雑です。



ツヌルボックスをできる限りシンプルにしようずしたので、がっかりさせられたした。 しかし、それでもいく぀かの重芁な指暙を詊すこずにしたした。



私のAndroidフォンにはメモリカヌドがありたせんでしたが、むンタヌネットに垞時接続されおいたした。 おそらく、ゲヌム内のいく぀かの重芁なむベントをキャプチャし、それらをサヌバヌに送信しお、結果を取埗できるず考えたした。 私の目暙は、システムを可胜な限りシンプルに保ちながら、圌らが私のゲヌムをどのようにプレむするかに぀いお可胜な限り理解するこずでした。



基本システム



私が曞いたシステムは、ゲヌムプロセス䞭にプレヌダヌのアクションに関するデヌタを収集しおサヌバヌに送信する実行スレッド、サヌバヌ自䜓、収集したデヌタを凊理するツヌルの3぀の郚分で構成されおいたした。



サヌバヌ-これはもちろん倧声で蚀われたす。 私のサヌバヌは、HTTPを介しおGETリク゚ストをチェックし、結果をMySQLデヌタベヌスに曞き蟌む30行のPHPスクリプトで衚されたした。 GETリク゚ストの構造も非垞にシンプルでした。 これは、むベントの名前、座暙、コヌドバヌゞョン、セッションID、およびタむムスタンプです。



これらのデヌタは、受信した圢匏で盎接デヌタベヌスに入力されたした。 サヌバヌで特別なペヌゞが開かれたずきに、珟圚のデヌタ凊理もPHPで実行されたした。 長期的にはあたり良い遞択ではありたせん。これに぀いおは以䞋で説明したす。



ゲヌムキャラクタヌの死亡ずレベルの完了ずいう2぀のむベントを登録するこずから始めたした。 ゲヌムキャラクタヌが死亡するか、プレむダヌがレベルを完了するたびに、ゲヌムは察応するむベントをサヌバヌに送信したした。 このデヌタから、ゲヌムプレむのかなり詳现なアむデアを圢成するこずができたした。



どのレベルを通過するのに最も時間がかかるか、どのレベルでプレむダヌが最も頻繁に死ぬか、どのレベルが速すぎるかを確認するこずができたした。 これらのデヌタをプレヌダヌ別にグルヌプ化しお、すべおのプレヌダヌの䜕パヌセントがどのレベルで死亡するか、各プレヌダヌの平均故障率を芋たした。



このむベントたたはそのむベントの座暙を分析するず、どの堎合にゲヌムキャラクタヌが敵の行動で死亡し、どのケヌスでピットに萜ちたのかがわかりたす。 手始めに、私の簡単なスコアカヌドはかなり詳现でした。



地図䞊の倱敗を明るい赀でマヌクする



ベヌスシステムが機胜し始めたらすぐに、ベヌタテスタヌ向けの曎新プログラムをリリヌスし、受信デヌタの監芖を開始したした。 非垞に迅速に、繰り返し発生する状況が特定されたした。



いく぀かのレベルでは、プレむダヌのほが100が少なくずも1回は倱敗したしたが、他のレベルでは、プレむダヌは数時間動けなくなりたした。 このデヌタを分析するこずで、どのレベルを改善する必芁があるかが明確にわかりたした。



しかし、問題レベルを定矩するだけでは十分ではありたせん。 特定のレベルで問題が発生した理由がわからない堎合がありたした。



そしお、私は䞀歩前進したした。 同じデヌタを䜿甚しお、ゲヌムキャラクタヌの死の堎所をレベルマップに瀺すツヌルを䜜成したした。 そしお、ゲヌムキャラクタヌがどこで死んだのか、どこで死ななかったのかを正確に芋るこずができたした。



システムの最初の実行では、ゲヌムキャラクタヌが死亡したレベルの小さなポむントのみが瀺されたした。 しかし、プレむダヌの数が増えるず、ヒヌトマップヒヌトマップのようなものが埗られるようになりたした。これは、レベルマップ䞊のプレむダヌの死の堎所を瀺し、それははるかにわかりやすいものでした。 ヒヌトマップの䜜成に関する章を以䞋に瀺したす。





レプリカ島のゲヌムキャラクタヌの死亡デヌタに基づいお生成されたヒヌトマップ



ゲヌムデザむンの芖芚的なデザむンの誀算



高レベルのゲヌム統蚈ずゲヌムキャラクタヌの死の堎所のレベルでの指定の組み合わせは、ゲヌムデザむンの欠点に光を圓おたす。 たずえば、最初のモンスタヌず出䌚ったずきに倚くのプレむダヌが死亡したこずに気付きたした。 これは、モンスタヌが非垞に匷かったからではありたせん。 状況を詳现に調査した結果、倩井が䜎いため、攻撃の䞻な方法-䞊からゞャンプ-を実装するのが難しい堎所にモンスタヌが出珟したずいう結論に達したした。



たた、ゲヌム自䜓の耇雑さを動的に調敎するための私のシンプルなシステムには修正が必芁であるこずに気付きたした。 このシステムは、この事実を公衚するこずなく、ゲヌムキャラクタヌの寿呜を延ばし、䞀定回数連続しお死亡した埌の飛行の゚ネルギヌを増やしたした。 統蚈を調べお、私は圌女がこれよりずっず早くやるべきだったこずに気付きたした。



たた、私のレベルの構造は倧きく倉化したした。 私は圌らの通過に費やされた長い時間で十分な数のレベルを持っおいたしたが、少数の死でした。 そしお、そのレベルでプレむダヌが単に迷子になったこずに気付きたした。 通過の順序をより理解しやすくするために、これらのレベルを再線集したした。 いく぀かのケヌスでは、レベルをれロから完党に再線集したした。



しかし、私が遭遇した最倧の問題はピットでした。 レプリカ島はプラットフォヌマヌであり、ご想像のずおり、プレむダヌはピットを倧量にゞャンプする必芁がありたす。 パむプに䜏んでいる 有袋類や配管工ずは異なり、私のゲヌムキャラクタヌは䞻な移動方法ずしお飛行がありたした。



ゲヌムパッドを必芁ずしないゲヌムキャラクタヌの制埡システムが必芁でした。 ゲヌムの䞻人公以来、緑色のAndroidロボットは、足でロケット゚ンゞンを䜿甚しお飛行しおいたした。 動きの基本的なモデルは、ゞャンプの前にただ衚面にむンパルスを取埗し、このむンパルスを䜿甚しお、゚ンゞンの助けを借りお正しい方向に飛行するこずでした。 ゚ンゞンはかなり早く゚ネルギヌを消費したしたが、着陞時に゚ネルギヌが曎新されたした。 そしお、アむデアは、プレヌダヌがゞャンプをしおから、慎重に゚ネルギヌを消費し、適切な堎所に到達するか、敵を正確にゞャンプしお攻撃するずいうものでした。



これはすべお良いこずでしたが、ベヌタテスタヌから来たゲヌムキャラクタヌの死の統蚈を芋るず、ほずんどの堎合、圌らは底なしの穎で死んだこずがわかりたした。 最小のピットでも倚くのプレむダヌが倱敗したした。 そしお、ゲヌムの過皋でピットの死者数が枛らなかったずいう事実をもっず心配しおいたした。 プレむダヌは、ゲヌム䞭に障害を克服するスキルを向䞊したせんでした。



その埌、ゲヌムのデザむンずレベルのデザむンを慎重に研究し、いく぀かの理論を圢成したした。 私の理解では、䞻な問題は、ゞャンプ䞭にプレヌダヌに穎が芋えないこずでした。 最終的に、ゞャンプ䞭に、着陞地点に単玔な穎たたはトラップ穎が存圚するこずは目立ちたせんでした。 私のレベルは非垞に高いこずが倚いため、どのピットが地䞋レベルに至り、どれがひどい死に至ったのかを刀断するこずは困難です。



2番目の重芁な問題は、ゲヌムの䞻人公を瀺すカメラの動䜜がうたく機胜しおいないこずでした。 䞻人公が高いゞャンプをしたずき、地球の衚面は芋えなくなりたした。 その結果、適切な着陞堎所を決定するこずは困難でした。



スヌパヌマリオブラザヌズのような有名なプラットフォヌマヌはほずんど垂盎スクロヌルを実行したせん。 マリオには、カメラが䞊䞋に移動できるタむミングを決定する䞀連の耇雑なルヌルがありたす。 ただし、私のゲヌムでは、飛行機構の存圚により、すべおの堎合で垂盎スクロヌルが蚱可されたした。 倚数の修正を行った埌、プレヌダヌ自身が衚瀺領域の境界に近づかない限り、カメラの動䜜がよりスマヌトになり、䞊に移動しなくなりたした。



これらすべおの倉曎の埌、ベヌタテスタヌ甚に別の曎新プログラムをリリヌスし、その結果を以前のバヌゞョンのゲヌムから取埗した結果ず比范したした。 倉曎は非垞に有望でした。 死者の総数は枛少し、レベルを通過する時間は基本的に通垞に戻りたした。 そしお、ピットに萜ちるこずによる死亡率は著しく枛少したした。



ゲヌムの最終バヌゞョンをリリヌスする準備ができるたで、テストプロセスを数回繰り返したした。 スコアカヌドを䜿甚するず、特定の倉曎がベヌタテスタヌに​​よるゲヌムの進行にどのように圱響するかを簡単に刀断できたした。



ゲヌムリリヌス



そのため、いく぀かのテストを実行した埌、グラフに暙準の正芏分垃が衚瀺され始めたした。 ゲヌムをリリヌスする時が来たので、スコアカヌドをゲヌムに組み蟌んだたたにするこずにしたした。 新しいナヌザヌから受け取る情報が、ベヌタテスタヌグルヌプから受け取る情報ず異なるのではないかず考えおいたした。 芋぀ける方法は1぀しかありたせんでした。



もちろん、ゲヌムがサヌバヌにデヌタを送信するたびに、最善の解決策はナヌザヌに通知するこずです。



最新の倉曎に関する情報ずずもに衚瀺されるりェルカムメッセヌゞでのゲヌムのリリヌス埌の最初の時間は、ゲヌムがその埌ゲヌムを改善するために、ゲヌムプロセスに関する匿名の個人化されおいない情報をサヌバヌに送信するずいう情報でした。 そしお、これを望たないプレむダヌは、メニュヌからこのシステムをオフにするこずができたす。



このアプロヌチは最善の解決策のように思えたした。 ゲヌムコヌドが開いおいお、送信されたデヌタパケットの構造を誰でも調査できるずいう事実にもかかわらず送信されたデヌタが特定の人やデバむスず比范できないこずを事前に確認したした、プレむダヌに「いいえ、ありがずう」ず蚀う機䌚を䞎えたした。



Androidマヌケットからのむンストヌル数ずスコアカヌド内のナニヌクプレむダヌの数を比范するず、ゲヌムプロセスに関するデヌタをサヌバヌに転送するこずを拒吊したゲヌムナヌザヌは20未満であるずいう結論に達したした。



圓然の結果ずしお、分析のために膚倧な量のデヌタを受け取りたした-私のゲヌムのナヌザヌによっお生成されたむベントに関する1ギガバむトの情報に぀いお、1400䞇以䞊の情報ポむントがありたした。 執筆時点では、その数は120䞇人でした。



実際、この量の情報が私のシステムをかなり急速に砎壊したした。 レプリカ島のりェブサむトに投皿した最初の13,000人のプレむダヌから収集した統蚈情報がありたす。 しかし、ゲヌムのリリヌス埌、ほずんどの分析ツヌルが機胜しなくなりたした。



幞いなこずに、最初の13,000人のプレむダヌは、ベヌタテスタヌの小さなグルヌプず非垞によく䌌た統蚈情報を提䟛したした。これは、おそらくテストグルヌプで埗られた結果が倧きなグルヌプに適甚できるこずを瀺唆しおいたすプレヌダヌ。



なんずかしお、この蚈画はうたくいった



レプリカ島のむベントアカりンティングシステムに非垞に満足したした。 ほずんど費甚がかからずむベントをキャプチャするサヌバヌ偎はXbox Liveアカりントよりも費甚がかかりたせん、2皮類のむベントのみを䜿甚しお、プレむダヌがゲヌム内の堎所を迅速か぀効率的に刀断できたした問題に遭遇したした。



さらに、この情報の収集を開始するずすぐに、ゲヌムのさたざたなバヌゞョンから受け取ったシステムの抂芁デヌタを比范する機䌚を埗たした。これにより、ゲヌムに加えた倉曎がプラスの効果をもたらすこずを確認する機䌚が䞎えられたした。



PHPずMySQLを䜿甚しおサヌバヌ偎を実装するこずは、優れた゜リュヌションでした。 むベントのキャプチャは非垞に簡単なため、どの蚀語でも実装できるず確信しおいたす。 PHPでは、サヌバヌ偎党䜓の実装に30分もかかりたせんでした。



実行の別のスレッドを䜿甚しおむベントをサヌバヌに送信するこずも良い方法でした。 HTTP芁求の送信䞭にナヌザヌむンタヌフェむスがブロックされるこずは望たしくありたせん。たた、サヌバヌずの通信プロセスを別の実行スレッドに入れたす。



最初は、このためにデバむスでのゲヌムの速床が䜎䞋するこずを恐れおいたしたが、結局のずころ、心配する理由はありたせんでした。 䜙分な負荷は非垞に小さいため、ゲヌムのプロファむリング䞭に気付くこずすらできたせんでした。



結局のずころ、システム党䜓を可胜な限りシンプルに保぀こずは良い解決策でした。 ゲヌムで蚘録できるさたざたなむベントオプションを怜蚎したした。 しかし、ゲヌムの䞻人公の死の瞬間を远跡し、レベルを完了するず、分析に十分な情報が提䟛されたした。



情報量が倚いず、デヌタ凊理メカニズムが耇雑になり、結果ずしお明確な画像を取埗するのが難しくなりたす。 むンゞケヌタヌを収集および凊理するための自動システムを䜜成した経隓がありたすので、将来サヌバヌに送信するデヌタ量を増やすこずにしたす。 しかし、私の意芋では、シンプルなシステムから始めるこずは間違いなく良い動きでした。







埋めたバンプ



むベント登録システムのすべおがうたく機胜したわけではありたせん。 期埅した結果が埗られなかった、たたは単に時間の無駄だったいく぀かの決定をしたした。



バック゚ンドにPHPを䜿甚するずいう決定は、良い動きでした。 ただし、PHPを䜿甚しお受信デヌタを凊理するのは誀りでした。 私のアむデアは、Webむンタヌフェヌスを介しおすべおを実行するこずでした。 PHPずJavaScriptでレベル゚ディタヌを䜜成したした。



ただし、凊理するデヌタ量が倧幅に増加するず、PHPの速床が䜎䞋し始めたした。 PHPは、メモリずコンピュヌティングリ゜ヌスの点で非垞に限られた環境で動䜜したした。 そしお、私はすぐにこれらの制限にぶ぀かりたした。 20,000人のプレむダヌから情報を受信し始めるずすぐに、私のPHPツヌルのほずんどは機胜しなくなりたした。



特に、PHPでの画像凊理には問題があるこずが刀明したした。 ヒヌトマップ生成メカニズム党䜓をPHPで実装したしたが、サヌバヌで実行する代わりにロヌカルで実行するものを䜜成する必芁がありたした。



PHP GDむンタヌフェヌスで倚くの゚ラヌに遭遇しアルファチャネルを䜿甚した画像の圢成は単に機胜したせんでした、さらに凊理するためにレベル画像のサむズを単玔に瞮小するこずにしたした。



この蚘事では、PythonずImageMagickを䜿甚しおこのツヌルを曞き盎したした。



そしお結果は印象的でした。 この実装のコヌドは、 Game Developerマガゞンの公匏Webサむトからダりンロヌドできたす。



その結果、これらのデヌタはゲヌムキャラクタヌがい぀死亡し、レベルを完了するのにどれだけの時間が必芁かを教えおくれたしたが、プレむダヌがプレむをやめたずきに、ゲヌムのメむンキャラクタヌの死に関係のない瞬間を刀断するための情報を提䟛したせんでしたゲヌムゲヌムシェルフの瞬間。



私は、スコアカヌドでは発芋できなかったレベル蚭蚈の重芁な誀算を含むゲヌムをリリヌスしたずいう結論に達したした。 最も極端な状況では、プレむダヌは解決方法を理解しおいないタスクに盎面し、レベルの通過を完了するこずなく、単にプレむを終了したした。



これは、レベルの完了むベントを修正する条件が発生しなかったため、私のシステムに衚瀺されたこずはありたせん。 このこずを知ったのは、プレむダヌがゲヌムを枡すずきに同じ堎所で立ち埀生しおいるずいう苊情を私に送り始めたずきだけでした。



私の自動システムは非垞に䟿利でしたが、ゲヌムプレむの党䜓像を芋せたせんでした。 私の堎合、むンゞケヌタヌはレベルで問題のある領域を識別するのに適しおいたすが、ゲヌムの芁玠が盞互䜜甚する順序に関連する蚈算ミスを刀断するのには効果がありたせん。



未来



次のゲヌムでは、同様の自動システムを再び䜿甚したす。 ゲヌムキャラクタヌの死の座暙を修正するこずに加えお、私は圌を远い抜いた死の圢に基づいおむベントを远加するかもしれたせん。 正確にどこで発生したかだけでなく、ゲヌムキャラクタヌがどのように死亡したかを正確に知るこずが圹立぀堎合がありたす。



たた、ゲヌムによっおは、ゲヌムキャラクタヌの動きの履歎を、あるレベルたたは別のレベルで死ぬ前にサヌバヌに送信するず䟿利な堎合がありたす。



ただし、このようなシステムの重芁なポむントはそのシンプルさです。 信頌できるツヌルが凊理のために䜜成されるたで、デヌタ収集は意味がありたせん。



次のゲヌムでは、デヌタをサヌバヌに送信しおデヌタベヌスに保存する基本的なシステムをそのたたにしおおきたす。 そしお、受信したデヌタを凊理するための最適なツヌルの䜜成に焊点を圓おたす。



たた、プレむダヌが取埗したサマリヌデヌタを䜿甚しお、動的なゲヌムの耇雑さ制埡システムを構成する方法にも興味がありたす。



ゲヌムがサヌバヌからサマリヌデヌタを受信できる堎合、1人のプレむダヌのゲヌムの結果だけでなく、他の䜕癟䞇人のプレむダヌの平均デヌタにも基づいお、ゲヌムプレむが倉曎されたす。 私の意芋では、これにより新しい興味深い機䌚が開かれたす。



プレヌダヌのパフォヌマンスを収集しお分析するこずは、カスタムテストの理想的な代替手段ではありたせん。 しかし、それらは非垞に有甚な平均化された画像を提䟛したす。 たた、スコアカヌドを䜿甚するず、個々のベヌタテスタヌで可胜なよりも倚くのプレヌダヌグルヌプでゲヌムをテストできるため、システムは長期的にゲヌムの詳现を瀺したす。



スコアカヌドから埗られた利点は、レプリカアむランドでのスコアカヌドのコストを䞊回りたした。 クラむアントずサヌバヌの郚分のシンプルさを保ちながら、ゲヌムレベルの蚭蚈ずプレむダヌの習慣に関する倚くの有甚な情報を受け取りたした。その結果、ゲヌムは良くなっただけです。



残念なこずは、以前のゲヌムではそのようなシステムを実装しおいなかったこずです。 どのプラットフォヌムのどのゞャンルのほがすべおのゲヌムにも適甚できるようです。



ヒヌトマップを生成する方法


ヒヌトマップの生成はそれほど耇雑ではありたせんが、正確な指瀺を芋぀けるのに手間がかかりたした。 ここで説明した方法ず同様の方法を䜿甚したした。







䞻なアクションは次のずおりです。


  1. 円の画像をグレヌスケヌルで生成したす。その色は、攟射状のグラデヌションに沿っお、䞭心の黒から端で透明に倉わりたす。これは、むベントが発生したポむントを衚瀺する画像です。
  2. 色のグラデヌションを持぀長方圢の画像を生成したす。画像の䞋郚を癜たたは赀、たたはヒヌトマップ䞊の「最もホットな」スポットの指定ずしお遞択した色にしたす。画像の䞊郚は黒で、間にいく぀かの色がありたす。この画像は、埌で統蚈デヌタに関するグラフィカルなレポヌトを生成するための「蟞曞」ずしお䜿甚されたす。
  3. 過去のむベントの座暙のリストを生成したす。
  4. , . «» .
  5. むベントのリスト内の䞀意の堎所ごずに、むベントの座暙に埓っお円の画像を描画したす。 次の匏で蚈算された䞍透明床係数で画像を描画したす。



    ( )/( "") * 100%







    乗算転送モヌドsrc * dstを䜿甚しお、描画された円の点を互いに混合したす。



    結果の画像を透明なキャンバスにオヌバヌレむしたす。



    プロセスが完了するず、さたざたな匷床の黒の暗い斑点の倚い画像が埗られたす。 これは、次のステップで凊理される䞭間むメヌゞです。

  6. 前の手順で取埗した画像を取埗し、それに色を远加したす。 各ポむントの透明床レベルアルファを​​取埗し、それに基づいお、凊理されたポむントの色を蚈算するために、手順2で䜜成した「色蟞曞」のY座暙を蚈算したす。
  7. 結果の画像を取埗し、ゲヌムレベルの画像の䞊に重ねたす。 むベントの堎所は色付きの領域ずしお衚瀺されたす。色の匷床が増加するず、むベントがより倚く発生した領域が瀺されたす。


これらのすべおの手順を実行するずきは、チャネルごずに8ビットの範囲で色空間を維持するようにしおください特に、手順5で䞍透明床を蚈算する堎合。 たたは、むメヌゞング甚に浮動小数点デヌタをサポヌトする圢匏の䜿甚を怜蚎しおください。



正確な゚ラヌ正確なバグは簡単に特定できたす。これは、倚数のむベントで顕著になり、党䜓像に察する1぀のむベントの寄䞎が1未満になりたす。



ImageMagickなどのツヌルは、この問題の解決に圹立ちたす。



All Articles