IndexedDBにむンストヌルできる3D WebGLブラりザゲヌム





ポップコヌンの圚庫-興味深い話をお話ししたす...䞀般的に、これは「ゲヌムの曞き方」ずいうトピックに関する1000の゚ッセむの1぀になりたす。 最初はできる限り倚くの技術的な詳现をカバヌする぀もりでしたが、1぀の蚘事にはそれらが倚すぎお、それが巚倧になるこずに気付きたした。 したがっお、「最初のシリヌズ」はむしろレビュヌになりたす。 興味深い堎合は、続けたす。 だから。



アむデア



私のプログラミングの経隓は、3Dで「モノポリヌ」のようなゲヌムを再䜜成するずいうアむデアを思い぀いたずき、゜ヌシャルネットワヌク甚のアプリケヌションに限られおいたした。 幌少期には、私の友人ず私はボヌド経枈ゲヌムのファンのクラブのようなものを持っおいたした。その䞭には合蚈で玄10がありたした。 そしお今、圌らがそれぞれ自分のビゞネスや他の堎所に行っお、むンタヌネットだけが私たちを結び぀けたずき、いろんな経枈ゲヌムに基づいた電子版を䜜りたかったのです。 しかし、これは仮想珟実であるため、すべおが珟実の䞖界のように芋えるはずです。家はフィヌルド䞊に建おられ、チップの代わりに、プレむダヌはカヌディヌラヌで賌入する必芁のあるパヌ゜ナルカヌを持っおいる必芁がありたす...



私の考えは新しくおグヌグルではないこずを提案したした同様にポデデクシル-これは広告ではなく、正矩のためです。 驚いたこずに、このようなゲヌムの3Dバヌゞョンのほずんどは、3次元のボヌドを回転させるこずになりたすが、やはりチップずおなじみの名刺だけです。 XBoxにのみ3Dの郜垂のような倖芳がありたしたが、ゲヌム自䜓のコンセプトはクラシックずはかけ離れおいたようですが、私はプレむしたせんでした。 WindowsでMonopolyの非垞に叀い3Dクロヌンも芋぀けたした。 はい、ある゜ヌシャルネットワヌクでは、通垞の3D「モノポリヌ」が機胜したした。 しかし、それは遠くから芋た等角図の䞊面図でした。 たた、街の通りを走り、ゲヌムのヒヌロヌの目を通しお䌁業を芋たかった。







今埌は、それが蚀われおいる-完了。 これらのむベントの間に10か月が経過したした。 私はほずんど䞀人で働いたこずを考えるず、それほど倚くはありたせん。 私はすぐに譊告したす、私は自分ですべおを理解したので、ゲヌムのグラフィックスは理想からはほど遠いものであり、コヌドはプロのプログラマヌにずっお非垞に有害です。 OOPを䜿甚しなかったのは、第䞀に、OOPを適切に所有しおいないため、そしお第二に、JavaScriptでOOPを䜿甚する理由がないためです。 したがっお、機胜のみ、ハヌドコアのみ。 KVGテンプレヌトは開発に䜿甚されたした-束葉杖、自転車、熊手。 そしお、3Dに぀いお...たずえば、wuv-mappingずは䜕ですかロシア語に正しく翻蚳する方法は3D゚ディタヌで、仕事を始めおから玄4か月しか経っおいないこずがわかりたした...初めお







面癜い小さな男を描いた「2Dデザむナヌ」にしか助けられたせんでした。 残念ながら、ゲヌムの最初のバヌゞョンには3Dキャラクタヌがありたせん。 そしお、これは未来ぞの挑戊です。







ゲヌムの意味は、ご想像のずおり、「フィヌルド」぀たり、街の呚りを「歩いお」぀たり、車を運転しお順番に自分の家を建おるこずになりたす。 経枈は、他の同様のゲヌムに比べおわずかに修正および改善されおいたす。 銀行でロヌンを取り、蚌刞取匕所で株を買うこずができたす。 競合他瀟の建物を焌くだけでなく、商品を掚枬するこずもできたす。 ゲヌムには譊察、裁刀所、刑務所がありたす。 別の考えが閃き、プレヌダヌに法ず秩序の代衚ずしおプレヌする機䌚を䞎えたした。 たた、「倜の蝶」などのキャラクタヌを玹介したす...どうやら、このアむデアはプログラミングに埓事する長い倜に觊発されたようです。 しかし、譊官や愛の叞祭のためにモノポリヌをプレむするこずは、おそらく次の郚分や䜕らかのファッションのトピックです...ゲヌムは1぀の゜ヌシャルネットワヌクで開始される予定だったため、ゲヌムの通貚は密かに「シヌル」ず呌ばれおいたした。







タスク



䞀般的に蚀えば、最初からタスクは非垞に野心的でした。



1. 3D。 すべおが3Dで機胜するこずが必芁でした。

2.クロスブラりザおよびクロスプラットフォヌム。 私の友人は異なるOSを持っおいるため、ゲヌムはどのOSでも実行する必芁がありたした。 もちろん、さたざたなブラりザで。

3.むンストヌル。 ナヌザヌの芁求に応じおファむルシステムにモデルずテクスチャを保存できるようにするために、ロヌド時間を短瞮し、その埌の起動時のトラフィックを節玄したす。 そしお同時にサヌバヌのトラフィックを節玄したす。

4.プラグむンなし 远加でダりンロヌドしおむンストヌルする必芁がないように、「りェブプレヌダヌ」はありたせん。 フラッシュさえも-いいえ、いいえ



実際、さたざたな成功を収めお぀たり、すべおのデバむスが新しいテクノロゞヌをサポヌトしおいないためにすべおのデバむスが起動しなくなるたで、しかしすぐにすべおが倉わるず思いたす、これは実装されたした。 䞀般に、なぜブラりザなのか ブラりザは、すべおのオペレヌティングシステムを統合する特定の暙準であり、ナヌザヌがどのプロセッサずOSを䜿甚しおいおも、远加のモゞュヌルをむンストヌルせずに動䜜する、真にクロスプラットフォヌムのアプリケヌションを䜜成する鍵です。 この考えは私にずっお非垞に興味深いようです。



ずころで、䜙談そしお、私は苊しみたした...



珟圚、クロスプラットフォヌムアプリケヌションは次のように蚘述されおいたす。 開発環境で䜕かが蚘述され、3぀たたはそれ以䞊のオペレヌティングシステムすべおの実行可胜モゞュヌルが保存されたす。 さお、これらのアセンブリは適切なストアにアップロヌドされたす。 実際、それは異なるプラットフォヌム甚の単なるビルドツヌルです。 いいえ、これもすべお玠晎らしいですが、もっず欲しいです。 したがっお、ここで、圌はコヌドを䜜成したした。そしお、出来䞊がり、それはどのOSの䞋でも、単䞀のアセンブリで機胜し、それ以倖はすべおOSの関心事です。



もちろん、JavaScriptむンタヌプリタヌに加えお、察応するプログラミング蚀語を備えた他の仮想マシンがありたすが、それらには、たず、クラむアントむンタヌプリタヌの個別のむンストヌルが必芁です。次に、おそらくすべおのOSではなく、既存の1぀が必芁です。このたさにむンストヌルでナヌザヌからの䜓の動き、圌は奜きではないのでナヌザヌは通垞情熱をしたす。 私の意芋では、りェブテクノロゞヌは、远加の゚ンゞンをむンストヌルするこずなく、䞀般に受け入れられおいるクロスプラットフォヌムの方向に向かっお進んでいたす。 はい、JavaScriptずWebGLはただ遅いですが、状況はすぐに倉わるず思いたす。 さらに、このようなアプリケヌションは、理論的には、ただ存圚しないOSやブラりザヌでも動䜜するはずです。



ここで、たずえば、Androidシステムはそれほど昔ではなく、芋えおいたせんでしたが、今ではたったく新しい超人気のOSがありたす。 そしお、同様の新しいものOSが将来登堎する堎合、すべおの最新機胜をサポヌトするブラりザが確実に存圚したす。 これは、既存のすべおのWebアプリケヌションが起動するこずを意味したす。 結局のずころ、むンタヌネットなしでタブレットをリリヌスするのは愚かなこずです。 ネットワヌクはその暙準を決定したす。 たた、Web暙準に埓っおプログラミングに完党に切り替えた堎合、ナヌザヌがどのOSをむンストヌルしたかは関係ありたせん。 ちなみに、将来的には、これがあらゆる皮類のブランド化されたOSの出珟に぀ながる可胜性が最も高いず思われたすが、特定のタスクのために匷化されたOSなどもありたす。そのため、トピックから逞​​脱したせん。



開発



プログラミング蚀語ずしお、単玔なJavaScript + PHPの束が遞択されたした。 PHP-私にずっおは銎染みがあり、このプロゞェクトはサヌバヌ䞊で䜕らかの激しいリアルタむムを必芁ずしなかったためです。これはシュヌティングゲヌムでもレヌスでもありたせん。 3D゚ンゞンずしお-THREE.JSラむブラリ。 埌者はナヌザヌからのむンストヌルを必芁ずしないため、私を魅了したした。 たた、プレヌダヌのブラりザずビデオカヌドがWebGLをサポヌトしおいる堎合、ゲヌムは問題なく開始されたす。 悪名高いフラッシュプレヌダヌも必芁ありたせん。フラッシュプレヌダヌは、いただにタブレットにむンストヌルされおおらず、ゲヌムも動䜜したす。 はい、ナヌザヌに曎新を芁求したす。たずえば、ブラりザは、圌に銎染みのない奇劙なマルチメガバむトのサヌドパヌティ゚ンゞンのむンストヌルを提䟛するほどdeではありたせん。それは、圌のOSにはただ存圚したせん。 この「矎」WebGLは、IE11を含むすべおの新しいバヌゞョンのブラりザヌでサポヌトされおいたす。 そうそう、ロバに挑戊 もちろん、ただのロバではなく、冗談です...しかし、それはIE11でも機胜したす。FPSだけが競合他瀟よりも明らかに䜎くなっおいたす。



クラむアントの「重い」モデルずテクスチャをナヌザヌの芁求に応じお保存するために、IndexedDBを䜿甚したした。 むンストヌルオプション最小、通垞、完党を遞択し、ブラりザデヌタベヌスにファむルを順番に曞き蟌むこずができるシンプルなマネヌゞャヌを䜜成したした。 このデヌタベヌスは、デバむスの電源をオフにしおも保持されたす。 そしお、ゲヌム゚ンゞンはそこからファむルを読み取り、むンストヌルされおいないたたは完了しおいないファむルをサヌバヌからダりンロヌドしたす。 圓然、削陀オプションもありたす。 マネヌゞャヌには、単にむンストヌルオプションずファむルリストが枡されたす。 HTML5などずの類掚により、すべおをWEB5ず呌びたしたが、わかりたせん。 それはなんずかしお呌ばれなければなりたせんでした。







その他。 プログラミングのために、私は特に「難解な」開発環境を必芁ずしたせんでした。 すべおhtml、php、jsが構文匷調衚瀺付きの高床なメモ垳などのプログラムに入力されたした。 そしお、コヌドの玄1が掗緎されたhtml゚ディタヌで仕事䞭に入力されたした。 デバッグは、ブラりザコン゜ヌルを䜿甚しお行われたした。



最初はアむデアから仕事に移り、䞻に英語で提䟛されおいるTHREE.JSラむブラリのドキュメントを勉匷し始めたした。 したがっお、いく぀かのニュアンスでは、「テストの堎」での必須の方法、぀たり別の段階を理解する必芁がありたした。 こういうこずをする前に、実隓の方法を熟考するのに数日かかったのです。



メむンステヌゞでは、ゲヌムの構築は非垞に遅くなりたしたが、本圓でした。 テリトリヌを䜜成する方法がわからなかったので、フィヌルドを正方圢に分割し、道路ず芝生のタヌンが異なる耇数のタむプのテクスチャを䜜成したした。 そしお、それらを適切な順序でプログラムで配眮したした。 今、私は領土を生成するより゚レガントな方法があるこずを理解し、これは将来の曎新の機䌚です。 幞いなこずに、それはい぀でも可胜であり、新しいファむルをサヌバヌにアップロヌドするだけで実行できたす。







3Dモデルの堎合-フォヌマットを䜿甚した無数の実隓の個別のストヌリヌ、jsでの凊理のためのメ゜ッドのゲヌムぞの読み蟌み、テクスチャの移動たたは非衚瀺など。 これで私は非垞に苊しみたした。 たた、3D゚ディタヌで䜜業したこずはありたせんでした。 この科孊を知っおいれば、ゲヌムの開発期間は半枛するず思いたす。 最終的に、3D MaxずBlenderでサポヌトされおいる* .3ds圢匏に萜ち着き、Assimp2jsonコンバヌタヌを䜿甚しお* .jsonに倉換したした。 そしお、json-modelはすでに実行䞭のゲヌムにあり、THREE.JSバンドルのブヌトロヌダヌを䜿甚しおサヌバヌたたはIndexedDBから静かにロヌドされたす-AssimpJsonLoader私の「マネヌゞャヌ」IndexedDBでも動䜜できるように、私が少しドヌプされおいたすサヌバヌからだけでなく、クラむアントベヌスからも読み蟌みたす。 そしお、色は保持され、テクスチャヌはすべお問題ありたせん。 さらに、jsonはネむティブJavaScript圢匏であり、埌に積極的な圹割を果たしたした。 圌は自分で家や他の小さなもののモデルを䜜り、䞀郚は朚ず車を自分で䜜り、䞀郚は無料の3Dアヌトからダりンロヌドし、䜎ポリに倉換したした。 数十皮類の異なるタむプではなく、同じデザむンの家を䜜成するためにそしお、3階の各10皮類の䌁業ごずに、プレむダヌの可胜な10色ごずに䜜成する必芁がありたす、色を倉曎し、目的のテクスチャをロヌドするための゜フトりェアシステムを䜜成したした。 たた、家の䜏所および䜏所なしを備えたタブレットの堎合、キャンバステクスチャが䜜成され、プログラムによっお適甚されたす。これは、すべおの道路名ず家番号を含む単䞀のpng画像で構成されたす。







最初の家がフィヌルドに珟れたずき、私の喜びは際限がありたせんでした。 さらに、必芁な色、および必芁な堎所。 そしお、アドレスプレヌト付き。 それから、物理孊からの運動公匏を芚えお、車に぀いおも同じこずをプログラムしたした。 そしお同時に、幟䜕孊を持぀代数。 「お颚呂ずコヌヒヌの䞡方がありたす。そしお玅茶ずココア。」



ここで、「遠くの颚景」たたは単に「背景」を䜜成する必芁がありたした。 それらがどのように䜜られたか-私にはただわからない。 あなたがそれに぀いおどこで読むこずができるかを私に蚀ったら、私は感謝するでしょう。 写真を調べおみるず、テクスチャを䜜成した4぀の颚景が芋぀かりたしたフィンランド湟からのサンクトペテルブルクの眺め、クロンシュタットの眺め、ノォログダ州の湟ず森の眺め。 プログラムでそれらを4぀の平面に匕っ匵り、競技堎の四方に配眮したした。 しかし問題は、シヌンの暪方向の照明のために、これらの平面の境界が「空」で芋えるこずでした。 THREE.JSパッケヌゞのいく぀かの䟋を芋おみたしたが、私には向いおいたせんでした。 私のフィヌルドは正方圢であり、その球䜓には䞉角圢が倚すぎおブレヌキをかけたため、内郚テクスチャを持぀巚倧な球䜓は私には向いおいたせんでした。 テクスチャのある立方䜓は、内郚にのみ適しおいたした;倖郚では、平面の同じ境界が芋えたした。 その結果、テクスチャをpng圢匏で保存し、「空」の代わりに透明なアルファ各プレヌンの茝床を遞択を蚭定しお、シヌンを空の䞋のグロヌバルな背景色に蚭定したした。 たぶん今私はいく぀かのナンセンスを曞いおいるだろうし、普通の3Dデザむナヌはこのアプロヌチに恐怖を感じおいた。







収益化



最初は、あたりにも倚くのプレむダヌを「匕き裂き」たいずは思いたせんでしたが、ホスティングず神聖な飲み物の費甚を完枈するこずは非垞に望たしいでしょう。 したがっお、ゲヌム内で賌入するための3぀のオプションを提䟛したした。1぀、3぀、たたは10個の「金の延べ棒」を賌入でき、それぞれ1回ゲヌムをプレむできたす。 あなたが勝った堎合、このゲヌムのすべおの地金を取埗したす。 プレむダヌのバヌが2本未満の堎合、そのプレむダヌはVIPステヌタスを倱いたす。 実際には、それなしでプレむできたすが、䞀郚の機胜はアクセスできなくなりたすが、これは䞀般にゲヌムプレむに倧きな圱響を䞎えたせん。







結果



たずめるず。 最終的に達成したもの。



1. 3D。 ただし、グラフィック自䜓には問題がありたす。぀たり、テクスチャやその他のロヌションや矎しいものの焌き付けに問題がありたす。 しかし、私の自由な時間に私はこれのすべおを勉匷したす。 テクスチャが曎新されたす。



2.クロスプラットフォヌム。 ゲヌムは、比范的新しいビデオカヌドドラむバヌがむンストヌルされた最新のブラりザヌバヌゞョンで動䜜したす。



Windowsに関しおは、Windows 8.1fps最倧40を搭茉したタブレット、およびIE11を含むブラりザヌのすべおの新しいバヌゞョンのWindows 7を搭茉したコンピュヌタヌで問題なく動䜜し、IEのみがかなり䜎いfpsを持ちたす。 Windows XPP4 3GHz、Radeon R5 230を搭茉した別のテストマシンでは、自動曎新をオフにした28.0.1500.95の地域のChromeの最新バヌゞョンのみがChromeで機胜したせんでした。 おそらく、これは、新しいブラりザヌがWebGLで動䜜し、ドラむバヌが特定のリリヌス日より前にむンストヌルされた堎合にWebGLを単にブロックするために、新しいバヌゞョンのビデオアダプタヌを必芁ずするずいう事実によるものです。 そしお、叀いブラりザでは、すでにWebGLのサポヌトを開始しおいるため、そのような制限はないか、それよりも䜎くなっおいたす。



Androidでは、新しいブラりザヌでも機胜したす。 十分なRAMがない堎合は、垞に2Dバヌゞョンを䜿甚できたす。



そしお最埌に、iOSでも動䜜したすが、友人のiPhone-5でのみテストされたした。 3Dの結果は、fps 3フレヌム/秒です。 しかし、これはただ電話です...それのテストは、ゲヌムの䜜業の最埌にすでに初めお実行され、率盎に蚀っお、すべおが初めお機胜し、䞀般的に機胜したこずにも驚きたした。 テスト甚のiPadはありたせんが、おそらくiPhoneの堎合よりも明らかに優れおいるでしょう。぀たり、Windowsのタブレットに匹敵したす。



他の䞀郚、他では、OSはテストされおいたせん。



3.むンストヌル。

私はIndexedDBず長い間戊いたした。 結果は、特定の方法で構成された連想配列の圢匏でファむルのリストをフィヌドできるフレヌムワヌクです。 これらのファむルは順次ダりンロヌドされ、将来オフラむンで䜿甚できるようにデヌタベヌスに保存されたす。 䞻な問題は、IndexedDBのデヌタベヌスずキヌそれらのテヌブルず゚ントリの存圚を確認するこず぀たり、ゲヌムがむンストヌルされおいるかどうかを確認するこずができないこずでしたが、これらを䜜成しお、この成功たたは倱敗の圢で答えを埗るこずができるこずです操䜜。 したがっお、障害が既に存圚する堎合たあ、たたはデヌタベヌスはサポヌトされおいたせんが、この事実を怜蚌する別の機胜がありたす、障害が䜜成されたす。 その結果、ゲヌムを開始するたびに、空のテヌブルずそれらの1぀に小さな蚭定を䜜成する必芁がありたした。成功した堎合、ゲヌムがむンストヌルされおいないずいう情報、そのむンストヌルオプションなどが曞き蟌たれたした。 倱敗した堎合は、ゲヌムが既にむンストヌルされおいるか、むンストヌルの進行状況の蚘録で空の構成が䜜成されたこずを意味したす。 その埌、ナヌザヌのアクション䞭に、フレヌムワヌクはこの構成から情報を取埗しお倉曎したす。 デヌタを削陀しおも、ただわかりたせんでした。 いいえ、すべおが削陀されたした。このプロセスの完了むベントをキャッチできたせん。 むンストヌルでは、すべおが正垞に動䜜しおいたす。 たた、各ブラりザには独自のデヌタベヌスがあるずいう事実も考慮する必芁があり、あるブラりザにゲヌムをむンストヌルするず、別のブラりザから同じむンストヌルにアクセスできなくなりたす。 閲芧履歎を消去するず、IndexedDBにも圱響する堎合がありたす。



4.サヌドパヌティのクラむアントラむブラリ、むンタヌプリタヌ、゚ンゞンなどをむンストヌルする必芁はありたせん。



これの䟡栌は、THREE.JS゚ンゞンを含む玄1.1 MBのjavascriptコヌドず、3.5 MBの画像を毎回サヌバヌから最初にダりンロヌドするこずでした。 結局のずころ、これは単なるサむトではなく、3Dゲヌムだからです。 さらに、これらはすべおブラりザのキャッシュに保存されたす。 さお、残り3Dモデル、画像はゲヌム䞭にサヌバヌたたはIndexedDBからダりンロヌドできたす。 ずころで、これらの3.5 MBのむメヌゞはIndexedDBからダりンロヌドするこずもできたす。 しかし、目暙の1぀が達成されたした-ゲヌムはネむティブOSに関連する゚ンゞンを必芁ずしたせん。 もちろん、スクリプトの䞀郚をデヌタベヌスに残しお、そこからロヌドするこずもできたす。 いずれの堎合でも、マルチプレむダヌのサヌバヌ郚分は匕き続き機胜するため、むンタヌネット接続が必芁です。 ただし、人工知胜に察するゲヌムを備えた完党にロヌカルなバヌゞョンをリリヌスするずいうアむデアがありたす。぀たり、サヌバヌを䜿甚せず、単にhtmlファむルから開始したす。



転蚘



ゲヌムは、察象の゜ヌシャルネットワヌクのモデレヌタヌによっお承認され、䞀般カタログに公開されたした。 ただし、ゲヌムには新しいアプリケヌションのトップに立぀機䌚がないずいう確認に免責事項が添付されたした。 なぜ私の質問に、私はただ答えを受け取っおいたせん。 その結果、「Economic Games」で240䜍になりたしたが、どの号であるかさえわかりたせん。 ただし、初日-85むンストヌル。 プラス40人がゲヌムを終了したした。 もちろん、賌入はありたせん。 同時に、サヌバヌ郚分の負荷は1日あたり、CPUの50のうち0.16、MySQLの1000のうちほが0でした。



ゲヌムを進め、改善し、他のプラットフォヌムや゜ヌシャルネットワヌクで実行したす。



All Articles