WebGL + WebAudio = Tower Defense

WebGLでTower Defenseを作成します。 他のトレーニングレッスンとは異なり、この記事ではリソースを取得する場所と理由から完成したアプリケーションの例を示します。

最終的な目標は次のようになります。

画像

問題文:



なぜWebGLなのか? 描画を少なくするために-3Dでは、多くのことが単純に行われますが、美しく見えます。

メインページ


メインページには、いくつかのDOM要素しかありません。


美をもたらす


3Dシーンを出力するには、 three.jsを使用します これは、優れたドキュメント、例、および多くのビルド済みモジュールを備えたライブラリです。 翻訳された資料があります、例えばここに

シーンの背景


これは、用語three.jsを使用するSkyBoxです。 キューブを追加し、キューブの下の6面の空のテクスチャをグーグルしてロードします。

var urls = [ './images/skybox_left.jpg', //-x './images/skybox_right.jpg', //+x './images/skybox_down.jpg', //+y './images/skybox_top.jpg', //-y './images/skybox_forward.jpg', //-z './images/skybox_back.jpg' //+z ]; var cubemap = THREE.ImageUtils.loadTextureCube(urls); cubemap.format = THREE.RGBFormat; var shader = THREE.ShaderLib['cube']; shader.uniforms['tCube'].value = cubemap; var SkyBoxMaterial = new THREE.ShaderMaterial({ fragmentShader : shader.fragmentShader, vertexShader : shader.vertexShader, uniforms : shader.uniforms, depthWrite : false, side : THREE.BackSide }); var skybox = new THREE.Mesh(new THREE.BoxGeometry(300, 300, 300), SkyBoxMaterial); scene.add(skybox); 

競技場


フィールドとして、X軸とZ軸に沿って引き伸ばされた通常の立方体を使用します。

その他のオブジェクト


レーザービームとフラッシュ- ここから 、フォント- ここから 、メニューアイコン-Flaticons
ボールを光沢のあるものにすることが望ましい(約500〜600の光沢特性を持つ材料)場合、結晶はレーザーで照らされ、くすんだままになることがあります。

運営管理


マウスを処理するには、標準のthree.jsライブラリの一部であるOrbitControlsを使用できます。 わずか1行で接続します

 trackballControls = new THREE.OrbitControls(camera, renderer.domElement); 

また、追加の構成は必要ありません。


バックグラウンドサウンドについては、Soundcloudの無料ミックスから作品をカットし、HTMLコードで接続できます

 <audio id="audiopl" autoplaynope="true" loop="true" > <source src="./sounds/deejokeethedeepline_-_synth_x_pop_rip.mp3" type="audio/mpeg" > 

銃声と爆発の音で、それはもう少し複雑です、彼らはのように演奏する必要があります

 function playSound(buffer) { var source = webAudioContext.createBufferSource(); source.buffer = buffer; source.connect(webAudioContext.destination); source.start(0); } 

サウンド自体は、 FreesoundなどのWaveアーカイブの1つで簡単にピックアップできます。

状態ストレージ


設定などのローカルストレージには、window.localStorage.getItem(name)およびwindow.localStorage.setItem(name、textvalue)を使用できます。 この例では、サウンドの調整に使用されます。

ゲームプレイ動画




ブラウザで実行してみてください


http://molgav.nn.ru/crystallit22old/
ソースコードはそこにあります。
電話では、おもちゃが起動しますが、追加の最適化が必要です。

脅威。 誰がレベル20に到達しますか?

Source: https://habr.com/ru/post/J309526/


All Articles