競技甚のゲヌム、たたは「ラむン」から「海戊」ぞの奇跡的な倉換を曞いたずき





このストヌリヌは、私が別の3D Webゲヌムをどのように行っおいたかに぀いおです。 苊痛ず疑いの歎史、睡眠䞍足ず怠の歎史。 最埌の瞬間にすべおを行う方法の物語。 䞀般的に、なぜ猫を角で匕っ匵るのか-私は話に目を向ける。 しかし、最初に、すべおの手続きを廃止するために䜕か他のものがありたす。 「マダム、ベッドでコヌヒヌを飲んでいたすか」 コヌヒヌは、特に朝のゲヌムで仕事をしたいず思ったずき、その日の残りのすべおの心配の前に、モヌフィアスのクラッチから私の毎日の脱出でした。 私たちは圌に敬意を衚さなければなりたせん。 私はそれを蚀及せざるを埗たせん。なぜなら、私にずっおそれは本圓に成功の芁玠の1぀になったからです。぀たり、ゲヌムをリリヌスするずいうこずです。 コヌヒヌの広告はここにありたす。



競争



実際、私は䜕かをするこずができる競争には適合したせんでした。 その条件に応じお、Windows甚のゲヌムを䜜成し、ダりンロヌド可胜で、exeファむルで実行する必芁がありたした。 ブラりザ甚のプログラミングが倧奜きです。 私はC ++ずCを知りたせん。VisualStudioも持っおいたせん。 しかし、その埌、突然ゲヌムの玠晎らしいアむデアを思い぀きたした。 ゲヌムを䜜りたす。 しかし、競争のすべおの条件を遵守するこずが可胜かどうか-それはそれほど重芁ではありたせん。 最埌に、゜ヌシャルネットワヌクで起動したす。



完璧さに制限はありたせん



私の以前のゲヌムは、サヌバヌからのphpファむルによっお起動されたした。 今回はさらに先ぞ進むこずにしたした。 私はすべおがむンタヌネット䞊で動䜜するだけでなく、ファむルサヌバヌからも動䜜するこずを望んでいたした。 第䞀に、オフラむンのバヌゞョンは、競争の条件で必芁ずされ、第二に、たずえばむンタヌネットがない堎所で自分でプレむできるようにしたした。 䞀般に、私がするこずはすべお自分で行いたす。そしお今、ゲヌムをプレむしたす。しかし、必芁であれば、サヌバヌからも、AIではなく人ず、぀たり、このオプションも存圚する必芁がありたす。 䞀般に、タスクはすべおのスクリプト、3Dモデル、テクスチャ、およびサりンドを含むナニバヌサルアセンブリを䜜成し、むンタヌネット䞊のペヌゞ䞊、およびダりンロヌド、解凍、およびむンデックスによっおゲヌムを実行するだけのアヌカむブ圢匏で配垃するこずでした。 html もちろん、埌者のオプションは、シングルナヌザヌバヌゞョンでのみ意味がありたす。



基本的に、前述のロヌカルバリアントは、盞察パスを含む保存されたWebペヌゞです。 キャッチは、写真付きのテキストだけでなく、3D゚ンゞン、およびテクスチャ付きモデルも含たれおいるこずです。 ただし、゚ンゞン自䜓に問題はありたせん。 これはTHREE.JSで、JavaScriptで蚘述されおおり、重量が500 KBで、単玔にSCRIPTタグで接続されおいたす。 ただし、゚ンゞンはロヌカルファむルシステムから3Dモデルをロヌドする方法を知りたせんが、サヌバヌからajaxを䜿甚しおそれらをプルするこずを望んでいたす。 モデルがスクリプトファむルからも接続されるように、このためにブヌトロヌダヌを終了する必芁がありたした。 アドレスバヌに泚意しおください。







Webバヌゞョン甚に最初に䜜成した3Dモデルはmodel.jsonタむプのファむルに保存されおいたしたが、SCRIPTタグで接続するず、Firefoxですべおが機胜したすが、Chromeではセキュリティポリシヌに関連する゚ラヌが発生したす。 解決策は簡単でした。jsonの名前をjsに倉曎したす-問題ありたせん。 おそらく、目的のコンテンツタむプを匷制するこずは可胜でしょうが、誰が䜕を知っおいるのか、将来、ブラりザにはただセキュリティポリシヌが存圚するでしょう。 突然、ロヌカルファむルシステムから* .js以倖の方法で呌び出されたファむルからスクリプトをダりンロヌドするこずはできなくなりたす。 そしお、js-そしお質問はありたせん。 スクリプトをダりンロヌドしおください。 3Dモデルの読み蟌み



var el=document.createElement("script"); el.type="text/javascript"; el.src=url+'.json.js'; el.async=true; document.getElementsByTagName("head")[0].appendChild(el);
      
      





たた、ブラりザのセキュリティポリシヌにより、サヌバヌバヌゞョンで完党に動䜜するモデルのテクスチャは、pngおよびjpgファむルからロヌカルに接続するこずを拒吊したため、テクスチャタむプのファむル名でスクリプトをbase64に倉換しお実行する必芁がありたした.png.js。 さお、これらのスクリプトを、動的に䜜成された叀き良きSCRIPTタグに接続しおください。 ずおも簡単です



 var image = document.createElement( 'img' ); image.onload = function() { var tex = new THREE.Texture( image ); tex.needsUpdate = true; tex.wrapS = tex.wrapT = THREE.RepeatWrapping; tex.anisotropy = 5; }; image.src="data:image/gif;base64,"+imagedata.replace(/^data:image\/(png|jpg);base64,/, "");
      
      





これは次のように機胜したす私のモデルパヌサヌはファむル内の画像ぞのリンクを芋぀け、これらのリンクは.jsの末尟で到達し、テクスチャ画像のスクリプトは動的に接続され、画像はbase64から転送され、モデルにスヌパヌむンポヌズされたす。 そしお、スクリプトの読み蟌みが完了した瞬間を確実に刀断するために、最埌にそのような各スクリプトに、メむンプログラムに読み蟌たれたこずを知らせる関数の呌び出しを远加したした。これで、それに含たれるむメヌゞたたはモデルを操䜜できたす。



開発ツヌル



そのため、モデルずテクスチャロヌダヌがサヌバヌなしでファむルシステムで正垞に機胜するようになったので、ゲヌム自䜓の䜜成を開始したした。 はい、玔粋なJavaScriptでプログラムしたす。 この堎所の倚くの人が神殿で指をひねりたした。 jQueryを䜿甚しおいなくおも、ラむブラリ3D゚ンゞンを陀くは䜿甚しおいたせん。 OOPも䜿甚したせん。 プロトタむプ-たれなケヌスですが、私の意芋では、本圓に必芁な堎合のみです。 私はミニマリズムが倧奜きで、それ以䞊のものはありたせん。 そしお、各行が䜕をするのか理解できない䜙分なコヌドはありたせん



ひどい秘密を明かしたす。 たた、プロゞェクトを構築するための新しい管理者を理解しおいたせん。githubを䜿甚せず、Visual Studioを䞀床も開いたこずはありたせん。 博士、私は䜕が問題なのですか プログラミングツヌルのうち、高床なノヌトブックのみを䜿甚しおいたす。 私はたぶんクレむゞヌです。



ただし、WebGLで動䜜する3Dスクリプトラむブラリをペヌゞに接続しおシヌンを䜜成するのは非垞に簡単なようです。 他の誰かが今日スクリプトをSCRIPTタグに接続し、HTMLマヌクアップを手動で䜜成したすか 今日、指でボタンを抌しお、目でモニタヌを芋おいる人もいたすか これらの指で-これらのボタンで これらの目で-このモニタヌに なんお荒野 いいでしょう冗談です しかし、今日、HTML、たたは神の犁じられおいる玔粋なJavaScriptに觊れるこずは、ヘビに觊れるこずに䌌おいたす。 耇数の局にねじ蟌むこずをお勧めしたす。 そしお、10ステップでコヌドをJavaScriptに倉換した埌、結局、どうしおうたくいかないのか疑問に思いたした。 誰のせいでもありたせんが、Web開発では、倚数のツヌル、マネヌゞャヌ、ラむブラリヌの䜿甚に察しお、あたり健党でないバむアスがあるように思えたす。 私の話が、だれにも認知的䞍協和音を匕き起こさないこずを願っおいたす。



参照条件 なに 自分に disdoc ああ、もう䞀぀、あなたの人生の貎重な瞬間をこのナンセンスに費やしおください。 私が埌悔した唯䞀のこずは、マルチナヌザヌ版のサヌバヌ偎のアルゎリズムのブロック図をすぐに描画しなかったこずです。 その結果、圌女は適切に機胜したせんでした。 しかし、それでも私が玙にブロック図を描いたずき、私はすぐにすべおの間違いを芋぀けお修正したした。



創造性



むンドの開発で気に入っおいるのは、創造的なプロセスです。 実際、最初は、コンテストの䞀環ずしお、Color Linesのテヌマのバリ゚ヌションを䜜成するこずを決定し、実甚的な第1レベルを䜜成したした。 倖芳は次のずおりです。







ポむントは、ゲヌムが3Dで機胜し、ボヌル自䜓がフィヌルドに衚瀺されないこずです。ボヌルをそこに投げお同じ色のラむンで構成する必芁がありたす。 ぀たり、火栌子の正しいポケットに入る必芁がありたす。 次に、ボヌルの䞋で、床のサッシが開き、故障したす。 しかし、最初のレベルの準備ができお、自分でそれをプレむしたずき、そのゲヌムがあたり面癜くないこずに突然気付きたした。 そしお、この創造を改善する方法が頭に浮かぶたで、もっず良い時たでそれを残すこずに決めたした。 私は別のアむデアを埗た。 ボヌルを投げるず、私は砲匟の飛行に関連するようになりたした。 そしお、私は海戊でこのゲヌムを玠早く䜜り盎すこずにしたした。 幞いなこずに、競争力のあるプロゞェクトを䜜成するために2か月が割り圓おられたした。



タダム 手銖を軜くたたくず、ラむンが回る...回る...回る...゚レガントな「海の戊い」に、そしおはい、私は「ブラックパヌル」を䜜成せざるを埗なかった。 雷雚のない海の戊い。







もちろん、3Dグラフィックスは私の芁玠ではありたせん。 船は圌ができるようにしたした。 負荷を枛らすために、各船の呚りに芋えないコラむダヌを䜿甚しお衝突を怜出したした。 1隻の船-1台のコラむダヌ、フォヌムをほが繰り返したす。



したがっお、タヌンベヌスの海戊は刀明したしたが、3Dであり、競技堎内のどこにでも船を移動させるこずができたした。 芁点は、銃の回転角ず傟斜角を正しく調敎するこずにより、コアを敵の船に入れるこずです。



䞖界ず共有する方法



1.競争。



たず、もちろん、競争。 その過皋で、コンテストの䞻催者はhtmlファむルを䜿甚したゲヌムの開始に満足せず、確かにexeが必芁であるこずが刀明したした。 jsからの実行可胜ファむルのアセンブリには䜕がありたすか 最初に詊したのはElectronです。 しかし、そこにはすべおが私にずっお耇雑すぎるこずが刀明したした。 githubから䜕人かのマネヌゞャヌをむンストヌルし、これらすべおを構成しお組み立おるために䜕十もの操䜜をむンストヌルする必芁がありたした。 Electronは、暙準的なWeb開発の道を私に導きたいず思っおいるこずを理解しおいたす。 競争ゲヌムの䜜成に割り圓おられた最埌の日だったので、これに察凊する時間はありたせんでした。 いいえ、それは良くありたせん。 そしお、web2exeナヌティリティに出䌚いたした。 すべおが非垞に簡単です-起動しお、htmlファむルに挿入し、node-webkitを単独でダりンロヌドし、exeファむルが出力されたアセンブリを取埗したす。 私が気に入らなかったのは、ファむルが105 MBずいう非垞に倧きいこずが刀明したずいう事実です。 うヌん...ゲヌム自䜓の重量はわずか15 MBです。 しかし、最倧のnw.dllファむルを圧瞮するパッケヌゞングナヌティリティが芋぀かりたした。 その結果、アセンブリ党䜓の重量は68 MBになり、zipアヌカむブでは43 MBになりたした。



ずころで、web2exeはWindows XPでの「ezheshnik」のビルドをサポヌトしおいたせんが、残念です。 私のhtmlバヌゞョンはXPでも機胜したす。 このOSでのみ、ブラりザのWebGLグラフィックスにいく぀かの特別な芁件がありたす。



私は競争に勝぀こずはできたせんでしたが、解決には非垞に貎重な経隓がありたした。 今、私は䞍可胜はないず確信しおいたす。







さお、さらに進んで、Webバヌゞョンをレむアりトしたす。 コンテストの埌、PHPでサヌバヌを䜜成したした。 箄1か月間の無料の倕べがかかりたした。



はい、ずころで、サヌバヌ



通垞のhttpホスティングでサヌバヌに問い合わせを行うず倱敗するこずがよくありたす。 したがっお、10秒ごずにむンタビュヌしたす。 クラむアント䞊で、ポむントAからポむントBぞの船の移動、ショットなどのプレむダヌのアクションからキュヌが䜜成されたす。 デヌタを送信する適切なタむミングで、このキュヌはサヌバヌに送信されたす。 察戊盞手はそれを読み、すでにプレむするためのキュヌが圢成されたす。 すべお同じ敵の船での圌の芖点からの移動、射撃などのみ。 したがっお、2人のプレヌダヌにはそれぞれ2぀のキュヌがありたす。1぀はサヌバヌに情報を送信するためのもので、もう1぀は察戊盞手のアクションを再生するためのものです。 ここではもちろん、同期は行われたせんが、ゲヌムはタヌンベヌスなので、必芁ありたせん。 䞻なものは、敵の船が最終的にサヌバヌから来た所望のポむントから撃たなければならないずいうこずです。 そしお、そのルヌトはクラむアント䞊のプログラムによっお構築され、船はこのポむントに移動したす。



phpのサヌバヌスクリプト党䜓が1行で衚瀺される堎合、次のようになっおいたす。









2. Facebook



ゲヌムは1日埌にやや調敎されたした。 䞀般的に、AAAゲヌムを専門ずする䌚瀟でない堎合、Facebookに䜕かを投皿するこずは無意味です。 単なる人間のゲヌム内賌入でお金を皌ぐのはかなり難しく、アむデアを求めるプログラマヌに電話したしょう。Facebookはサヌドパヌティのバナヌネットワヌクの広告を蚱可しおいたせん。 ホスティングを壊しただけです。 確かに、䞻にアメリカ人のパヌトナヌの特別なリストがあり、それを通じおあなたのアプリケヌションで広告を出すこずができたす。 しかし、そのためには、圌らのりェブサむトを通じお、あなたが圌らに䜕を望んでいるかなどを説明する手玙を送る必芁がありたす。 圌らがロシアからのある男のアプリケヌションで動䜜するこずに同意するずいう事実ではありたせん。 はい、そしお圌らのサむトのほずんどで、加えお、Facebookに぀いおの蚀葉を芋぀けたせんでした...私も、パヌトナヌ。 そしお、米囜ずロシアの䞡方で皎金を支払う問題。 䞀般に、私はどういうわけか圌らず亀枉しようずしお少しうんざりしたした。 そしお、ゲヌムの名前で小さなバナヌを䜜成し、それを画面の䞋郚に配眮したした。 ゲヌム内賌入システムを介しお特定の金額を䜜成者に寄付するこずで、この機胜をオフにするこずができたす。



3. VKontakte。



VKのモデレヌトは数日間続きたした。 そしお、ゲヌムはカタログの䞀番䞋にい぀ものように远加されたした。 ただし、VKでは、広告バナヌをすぐに簡単に接続できたす。 収益化スキヌムはFacebookず同じです-バナヌを無効にしたす。 VKの広告システムは非垞に䟿利でシンプルで理解しやすいこずに泚意しおください。 私のアカりントは賞賛を超えおいたす。 そこに広告を出すこずで皌ぐだけです。 VKはクリックに察しおのみ支払い、むンプレッションに察しおは支払いたせん。 たた、数日で、玄200むンプレッションに察しお0ルヌブルしか埗られたせん。 明らかに、広告をクリックする人はほずんどいたせん。



たずめ



私が自分で達成したこずを曞き留めおおきたす。 サヌバヌずロヌカルファむルシステムの䞡方からhtmlファむルで実行されるWebGLグラフィックを䜿甚しお、シングルナヌザヌゲヌムを䜜成できるようになりたした。 これはすべお、Windows、Androidの䞡方のバヌゞョンで動䜜し、iOずLinuxで動䜜するはずですが、これらのOSを確認する機䌚はありたせん。 たた、同じhtmlバヌゞョンから、WindowsおよびiO甚の実行可胜ファむルを䜿甚しお、より「重い」アセンブリを䜜成できたすweb2exeではこのような可胜性がありたす。 すべおのコヌドはJSで1回蚘述され、䞊蚘のすべおのオプションで機胜したす。 ゜ヌシャルネットワヌクのオンラむンオプションを陀き、別のサヌバヌスクリプトずクラむアント呌び出しをAPIに远加する必芁がありたす。










All Articles