この記事は、MicrosoftのWeb開発シリーズの一部です。 SitePointを可能にしてくれたパートナーをサポートしてくれてありがとう。 この記事で説明しています
基本的なゲーム開発哲学ゲーム開発にWebテクノロジーを使用
コードダウンロード(.zip)
ゲームデザインの簡素化:基本的なゲームデザインの原則と「Ping」(Pongバリアント)のようなシンプルなゲームから始めて、レイアウトと必須ゲームメカニックに焦点を当てています。
インタラクティブな要素:動的ゲームプレイにJavaScriptとCSSを使用してインタラクティブなゲームコントロールを組み込み、ボールやプレイヤーなどの要素がユーザー入力に効果的に応答するようにします。AI統合:ゲームの対戦相手に基本的な人工知能を実装し、より魅力的なシングルプレイヤーエクスペリエンスを可能にします。
クロスプラットフォームの互換性:包括的なテストのためにBrowserStackなどのツールを利用して、さまざまなブラウザやデバイスでゲームがうまく機能することをテストして確認してください。このアプリにはサーバーコードが不要なため、Visual Studioで新しい空のWebページプロジェクトを作成することから始めます。ファイルを選択した後、Visual C#オプションを選択して、Webサイトに空のC#テンプレートを使用します|新規| ASP.NET空のWebサイト。
インデックスHTMLファイルには、jQuery、メインスタイルシート、メインJavaScriptファイルの3つのリソースのみが必要です。 Style.cssと呼ばれる空のCSSファイルをプロジェクトに追加し、Ping.jsと呼ばれる空のJavaScriptファイルを追加して、ページを読み込むときにエラーを回避します。
また、ブラウザとデバイスを介してこの問題についてこのアプリ(またはその他)をテストすることを忘れないでください。私が書いたコードは、Chrome、Firefox、Microsoft Edgeなどの最新のブラウザと相互運用可能ですが、再確認するのは常にベストプラクティスです。これで、無料の仮想マシンやhttp://www.browserstack.comなどの他のツールでそれを行うことができます。<span><span><!DOCTYPE html></span> </span><span><span><span><html</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><script</span> src<span>="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.1.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="ping.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="style.css"</span>></span><span><span></script</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
私が構築しているゲームは、私がpingと呼ぶポンのバリアントです。 Pingには、Pongと本質的に同じルールがありますが、どちらかのプレイヤーがボールを獲得したときにボールをつかみ、ボールを直接または上下に戻すことができます。多くの場合、ゲームを構築する前にゲームをどのように見たいかを描くのが最善です。このゲームでは、私が見たい全体的なレイアウトを以下に示します。
スタイルで遊ぶ
<span><span><span><div</span> id<span>="arena"</span>></span> </span> <span><span><span><div</span> id<span>="score"</span>></span> </span> <span><span><span><h1</span>></span> </span> <span><span><span><span</span> id<span>="playerScore"</span>></span>0<span><span></span</span>></span> </span> <span><span><span><span</span> id<span>="opponentScore"</span>></span>0<span><span></span</span>></span> </span> <span><span><span></h1</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="player"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="opponent"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="ball"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="controls-left"</span>></span> </span> <span><span><span><div</span> id<span>="up"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="down"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="controls-right"</span>></span> </span> <span><span><span><div</span> id<span>="left"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="right"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span><span><span><span></div</span>></span> </span>
次に、スコアボードを配置します。これは、他の要素の上に、これが上部と中央に表示されたいと考えています。コマンドの位置:絶対に、私が望む場所に置いて左に置くことができます:50%は窓の上部に途中でそれを置きますが、スコアボード要素の左側から始まります。完全に中央にあることを確認するために、Transformプロパティを使用し、Z-Indexプロパティは常に最上部にあることを保証します。
また、テキストフォントをレトロテーマにしたいです。ほとんどの最新のブラウザで、自分のフォントを含めることができます。 Codeman38(Zone38.net)から適切なプレススタート2Pフォントが見つかりました。フォントをスコアボードに追加するには、新しいフォントフェイスを作成する必要があります:<span>body { </span> <span>margin: 0px; </span> <span>height: 100%; </span><span>} </span>
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><script</span> src<span>="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.1.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="ping.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="style.css"</span>></span><span><span></script</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
今、スコアはH1タグにあるため、すべてのH1タグのフォントを設定できます。フォントが欠落している場合に備えて、バックアップオプションをいくつか提供します。
<span><span><span><div</span> id<span>="arena"</span>></span> </span> <span><span><span><div</span> id<span>="score"</span>></span> </span> <span><span><span><h1</span>></span> </span> <span><span><span><span</span> id<span>="playerScore"</span>></span>0<span><span></span</span>></span> </span> <span><span><span><span</span> id<span>="opponentScore"</span>></span>0<span><span></span</span>></span> </span> <span><span><span></h1</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="player"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="opponent"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="ball"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="controls-left"</span>></span> </span> <span><span><span><div</span> id<span>="up"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="down"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="controls-right"</span>></span> </span> <span><span><span><div</span> id<span>="left"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="right"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span><span><span><span></div</span>></span> </span>
このシートに画像がある要素には、スプライトクラスが割り当てられます。次に、各要素について、バックグラウンドポジションを使用して、表示したいスプライトシートのどの部分を定義します。
<span>body { </span> <span>margin: 0px; </span> <span>height: 100%; </span><span>} </span>
<span><span>#arena</span> { </span> <span>background-image: <span>url(arena.png)</span>; </span> <span>background-size: 100% 100%; </span> <span>margin: 0px; </span> <span>width: 100%; </span> <span>height: 100%; </span> <span>overflow: hidden; </span><span>} </span>
4つの制御要素(ユーザーがプレーヤーを移動するために押すことができるボタン)がありますので、それらのために特別なクラスを作るように努めることができます。また、マージンを追加して、周囲に少しスペースがあります。
<span><span>#score</span> { </span> <span>position: absolute; </span> <span>z-index: 1000; </span> <span>left: 50%; </span> <span>top: 5%; </span> <span>transform: translate(-50%, 0%); </span><span>} </span>
<span><span>@font-face</span> { </span> <span>font-family: 'PressStart2P'; </span> <span>src: <span>url('PressStart2P.woff')</span>; </span><span>} </span>
このデザインの良い点の1つは、すべてが相対的な位置で設定されていることです。これは、ゲームを良く見せながら、画面がさまざまなサイズになる可能性があることを意味します。
<span>h1 { </span> <span>font-family: 'PressStart2P', 'Georgia', serif; </span><span>} </span>
今、ボールを動かします。 JavaScriptコードについては、CSSで行ったのと同じように、HTMLのPing.jsというファイルを参照しました。この名前の新しいファイルにこのコードを追加します。ボールと各プレイヤーのオブジェクトを作成しますが、オブジェクトには工場パターンを使用します。
<span><span>.sprite</span> { </span> <span>background-image: <span>url("sprites.png")</span>; </span> <span>width: 128px; </span> <span>height: 128px; </span><span>} </span>
このパターンの構造、シンプルなボールクラスを作成します:
<span><span><span><div</span> id<span>="player"</span> class<span>="sprite"</span>></span><span><span></div</span>></span> </span><span><span><span><div</span> id<span>="opponent"</span> class<span>="sprite"</span>></span><span><span></div</span>></span> </span><span><span><span><div</span> id<span>="ball"</span> class<span>="sprite"</span>></span><span><span></div</span>></span> </span><span><span><span><div</span> id<span>="controls-left"</span>></span> </span> <span><span><span><div</span> id<span>="up"</span> class<span>="sprite"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="down"</span> class<span>="sprite"</span>></span><span><span></div</span>></span> </span><span><span><span></div</span>></span> </span><span><span><span><div</span> id<span>="controls-right"</span>></span> </span> <span><span><span><div</span> id<span>="left"</span> class<span>="sprite"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="right"</span> class<span>="sprite"</span>></span><span><span></div</span>></span> </span><span><span><span></div</span>></span> </span>
新しいボールを作成するには、この関数を定義しただけと呼びます。
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><script</span> src<span>="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.1.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="ping.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="style.css"</span>></span><span><span></script</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
今、私はボールを動かして画面の周りを跳ね返したいです。まず、ボールのアニメーションを作成するには、ある程度の間隔で更新関数を呼び出す必要があります。最新のブラウザは、RequestAnimationFrameと呼ばれるこの目的のための機能を提供します。これは引数として関数を取り、次にアニメーションサイクルを実行したときにパスイン関数を呼び出します。これにより、ブラウザの更新の準備ができたら、ボールがスムーズなステップで動き回ることができます。パスイン関数を呼び出すと、ページが読み込まれてから数秒で時間が与えられます。これは、アニメーションが時間の経過とともに一貫していることを保証するために重要です。ゲームでは、RequestAnimationFrameの使用が次のように表示されます。
<span><span><span><div</span> id<span>="arena"</span>></span> </span> <span><span><span><div</span> id<span>="score"</span>></span> </span> <span><span><span><h1</span>></span> </span> <span><span><span><span</span> id<span>="playerScore"</span>></span>0<span><span></span</span>></span> </span> <span><span><span><span</span> id<span>="opponentScore"</span>></span>0<span><span></span</span>></span> </span> <span><span><span></h1</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="player"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="opponent"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="ball"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="controls-left"</span>></span> </span> <span><span><span><div</span> id<span>="up"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="down"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="controls-right"</span>></span> </span> <span><span><span><div</span> id<span>="left"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="right"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span><span><span><span></div</span>></span> </span>
このコードは機能しますが、ページが完全にロードされる前にスクリプトが実行され始める問題がある場合があります。これを避けるために、jqueryを使用してページが読み込まれたときにコードを開始します:
<span>body { </span> <span>margin: 0px; </span> <span>height: 100%; </span><span>} </span>
<span><span>#arena</span> { </span> <span>background-image: <span>url(arena.png)</span>; </span> <span>background-size: 100% 100%; </span> <span>margin: 0px; </span> <span>width: 100%; </span> <span>height: 100%; </span> <span>overflow: hidden; </span><span>} </span>
可動プレーヤー
その後、プレイヤーの動きをレイアウトでき、プレーヤーのスプライトがウィンドウの上部または下部に到達した場合、動きを止めることができます。
<span><span>#score</span> { </span> <span>position: absolute; </span> <span>z-index: 1000; </span> <span>left: 50%; </span> <span>top: 5%; </span> <span>transform: translate(-50%, 0%); </span><span>} </span>
キーボード入力
<span><span>@font-face</span> { </span> <span>font-family: 'PressStart2P'; </span> <span>src: <span>url('PressStart2P.woff')</span>; </span><span>} </span>
理論的には、プレーヤーを動かすことができますが、指示なしでは動きません。左側のプレーヤーにいくつかのコントロールを追加します。そのプレーヤーを制御する2つの方法が必要です。キーボード(PCS)を使用して、コントロール(タブレットと電話)をタップします。
><span>h1 { </span> <span>font-family: 'PressStart2P', 'Georgia', serif; </span><span>} </span>
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><script</span> src<span>="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.1.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="ping.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="style.css"</span>></span><span><span></script</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
ボールが跳ね返ると、プレイヤーにそれをキャッチさせたいと思います。それが捕まると、ボールには所有者がいて、その所有者の動きに従います。ボールの移動方法に機能を追加し、ボールが続く所有者を可能にします。
<span><span><span><div</span> id<span>="arena"</span>></span> </span> <span><span><span><div</span> id<span>="score"</span>></span> </span> <span><span><span><h1</span>></span> </span> <span><span><span><span</span> id<span>="playerScore"</span>></span>0<span><span></span</span>></span> </span> <span><span><span><span</span> id<span>="opponentScore"</span>></span>0<span><span></span</span>></span> </span> <span><span><span></h1</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="player"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="opponent"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="ball"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="controls-left"</span>></span> </span> <span><span><span><div</span> id<span>="up"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="down"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="controls-right"</span>></span> </span> <span><span><span><div</span> id<span>="left"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="right"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span><span><span><span></div</span>></span> </span>
<span>body { </span> <span>margin: 0px; </span> <span>height: 100%; </span><span>} </span>
今すぐゲームをプレイしようとすると、画面の上部からボールが跳ね返ると、プレーヤーを動かしてキャッチできます。さて、どのように投げますか?それが右側のコントロールの目的です。ボールを想像します。プレーヤーに「火」関数とAIMプロパティを追加しましょう。
<span><span>#arena</span> { </span> <span>background-image: <span>url(arena.png)</span>; </span> <span>background-size: 100% 100%; </span> <span>margin: 0px; </span> <span>width: 100%; </span> <span>height: 100%; </span> <span>overflow: hidden; </span><span>} </span>
キーボード関数を拡張して、プレーヤーの目的と火災関数を設定できます。照準はわずかに異なって機能します。照準キーがリリースされると、目的は簡単に戻ります。
<span><span>#score</span> { </span> <span>position: absolute; </span> <span>z-index: 1000; </span> <span>left: 50%; </span> <span>top: 5%; </span> <span>transform: translate(-50%, 0%); </span><span>} </span>
最後の追加は、すべてのコントロールのタッチサポートです。適切な変更をプレーヤーの目的に変更します。また、画面上のどこにでも触れるとボールが発射されます。
<span><span>@font-face</span> { </span> <span>font-family: 'PressStart2P'; </span> <span>src: <span>url('PressStart2P.woff')</span>; </span><span>} </span>
ボールがプレーヤーを通過したら、スコアを変更して、そのプレーヤーにボールを与えたいと思います。カスタムイベントを使用して、既存のオブジェクトのいずれかからスコアリングを分離できるようにします。更新機能が長くなっているので、CheckScoredと呼ばれる新しいプライベート関数を追加します:<span>h1 { </span> <span>font-family: 'PressStart2P', 'Georgia', serif; </span><span>} </span>
ボールが相手を通り過ぎたとき(相手が動かないので、それほど難しくありません)、スコアが上がり、ボールが相手に手渡されます。ただし、対戦相手はボールを保持するだけです。
<span><span>.sprite</span> { </span> <span>background-image: <span>url("sprites.png")</span>; </span> <span>width: 128px; </span> <span>height: 128px; </span><span>} </span>
あなたはほとんどゲームを持っています。あなたが一緒に遊ぶ人がいたなら。最後のステップとして、単純なAIで相手を制御する方法を示します。対戦相手は、動きながらボールと並行して維持しようとします。相手がボールをキャッチすると、ランダムに動き、ランダムな方向にボールを発射します。 AIをもう少し人間に感じさせるために、完了したすべてに遅れを追加します。これはあまりインテリジェントなAIではありません。しかし、それはゲームをプレイするものになるでしょう。
この種のシステムを設計するとき、州で考えるのは良いことです。対戦相手AIには、次の3つの状態があります。私は、より人間の要素を追加するための次のアクションの間の状態になります。 AIオブジェクトのまさにそれから始めてください:
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><script</span> src<span>="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.1.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="ping.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="style.css"</span>></span><span><span></script</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
AIの状態によっては、別のアクションを実行する必要があります。ボールと同じように、私はRequestAnimationFrameで呼び出すことができるアップデート機能を作成して、その状態に従ってAI法を持つことができます。
<span><span><span><div</span> id<span>="arena"</span>></span> </span> <span><span><span><div</span> id<span>="score"</span>></span> </span> <span><span><span><h1</span>></span> </span> <span><span><span><span</span> id<span>="playerScore"</span>></span>0<span><span></span</span>></span> </span> <span><span><span><span</span> id<span>="opponentScore"</span>></span>0<span><span></span</span>></span> </span> <span><span><span></h1</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="player"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="opponent"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="ball"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="controls-left"</span>></span> </span> <span><span><span><div</span> id<span>="up"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="down"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="controls-right"</span>></span> </span> <span><span><span><div</span> id<span>="left"</span>></span><span><span></div</span>></span> </span> <span><span><span><div</span> id<span>="right"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span><span><span><span></div</span>></span> </span>
<span>body { </span> <span>margin: 0px; </span> <span>height: 100%; </span><span>} </span>
<span><span>#arena</span> { </span> <span>background-image: <span>url(arena.png)</span>; </span> <span>background-size: 100% 100%; </span> <span>margin: 0px; </span> <span>width: 100%; </span> <span>height: 100%; </span> <span>overflow: hidden; </span><span>} </span>
AIにランダムに数回動かせてから、ランダムな方向にボールを発射してほしい。まさにそれを行うプライベート関数を追加しましょう。 AimandFire関数をAiming Case Statementに追加すると、完全に機能的なAIが再生されるようになります。
ラッピング
<span><span>#score</span> { </span> <span>position: absolute; </span> <span>z-index: 1000; </span> <span>left: 50%; </span> <span>top: 5%; </span> <span>transform: translate(-50%, 0%); </span><span>} </span>
dev.modern.ieの無料ツールを備えたMicrosoft Edge(Windows 10用のデフォルトのブラウザ)を含むブラウザやデバイス全体でテストすることをお勧めします。
時代遅れのライブラリ、レイアウトの問題、アクセシビリティをスキャンしてください Mac、Linux、およびWindows
に仮想マシンを使用しますコーディングラボ:クロスブラウザーテストとベストプラクティス
マイクロソフトエッジとエンジニアおよびエバンジェリストのWebプラットフォームでの詳細な技術学習:
Visual Studioでゲームのパフォーマンスを最適化する方法はいくつかあります。まず、ビルトインプロファイリングツールを使用して、コード内のボトルネックを識別する必要があります。次に、コードの最適化、データ構造の最適化、アルゴリズムの最適化などの手法を使用して、コードのパフォーマンスを改善できます。さらに、最新のグラフィックカードのハードウェアアクセラレーション機能を使用して、ゲームのレンダリングパフォーマンスを向上させる必要があります。 Visual Studioのゲームのサウンドエフェクトと音楽には、System.media namespaceでSoundPlayerクラスを使用することが含まれます。 Playメソッドを使用して、サウンドエフェクトや音楽トラックを再生し、STOPメソッドを使用してサウンドの再生を停止できます。また、PlayLoopingメソッドを使用して、継続的にサウンドを再生することもできます。 SoundPlayerクラスはWAVファイルをサポートするため、Sound EffectsとMusicトラックをこの形式に変換する必要があります。 Visual Studioで開発されるには、いくつかのステップが含まれます。まず、実行可能ファイルを作成するには、リリースモードでゲームを構築する必要があります。次に、InstallShieldなどのツールを使用してゲーム用のインストーラーを作成する必要があります。最後に、自分のウェブサイト、オンラインゲームストア、アプリストアなど、さまざまなチャネルを通じてゲームを配布できます。 > Visual StudioとASP.NETを使用して3Dゲームを開発することは可能ですが、これらのツールで最も一般的なユースケースではありません。 ASP.NETは主にWeb開発フレームワークであり、Visual Studioは汎用開発環境です。 3Dゲームの開発に興味がある場合は、3Dゲーム開発に向けてより高度なツールと機能を提供するUnityやUnreal Engineなどの専用ゲーム開発エンジンの使用を検討することをお勧めします。 -Visual Studioでの私のゲームへの言語サポート?
以上がVisual StudioとASP.NETで1時間以内にWebゲームを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。