目次
今度は、プレイヤーオブジェクトを作成する時が来ました。プレーヤークラスを肉付けする最初のステップは、移動関数をプレイヤーの位置を変更させることです。サイド変数は、プレーヤーが居住する裁判所のどの側面を示し、プレーヤーを水平に配置する方法を指示します。移動関数に渡されたy値は、プレーヤーがどれだけ上または下に移動するかです:
ボールをキャッチ
JavaScriptを使用したより実践的な
独自のデバイスでMicrosoft Edgeをリモートテスト
Visual Studioでのゲームのパフォーマンスを最適化するにはどうすればよいですか?
ホームページ ウェブフロントエンド jsチュートリアル Visual StudioとASP.NETで1時間以内にWebゲームを構築する

Visual StudioとASP.NETで1時間以内にWebゲームを構築する

Feb 19, 2025 pm 12:35 PM

Visual StudioとASP.NETで1時間以内にWebゲームを構築する

この記事は、MicrosoftのWeb開発シリーズの一部です。 SitePointを可能にしてくれたパートナーをサポートしてくれてありがとう。 この記事で説明しています

基本的なゲーム開発哲学

ゲーム開発にWebテクノロジーを使用

  • ゲームコントロールの追加とai
  • 議論されたテクノロジー:
  • Visual Studio 2013 Pro、Visual Studio 2013 Community、ASP.NET

コードダウンロード(.zip)

  • ゲームを開発するためにまったく新しいスキルセットは必要ありません。実際、HTML、JavaScript、CSSなどの現在のWeb開発スキルは、幅広いゲームでは問題ありません。 Webテクノロジーを使用してゲームを構築すると、ブラウザを使用してほとんどすべてのデバイスで実行されます。 これを証明するために、Webテクノロジーと2つの外部ライブラリのみを使用して、ゼロからゲームを構築することを実証します。1時間も経たないうちに行います。基本的なデザインとレイアウト、コントロールとスプライトから、シンプルな相手の人工知能(AI)まで、さまざまなゲーム開発トピックを取り上げます。ゲームを開発して、PC、タブレット、スマートフォンで動作します。 Web開発者または別の開発ドメインとしてのプログラミングの経験があるが、ゲームを書いた経験がない場合、この記事はあなたを開始します。あなたが私に1時間を与えたら、私はあなたにロープを見せることを約束します。
  • キーテイクアウト
クイック開発:HTML、JavaScript、およびCSSの既存のWeb開発スキルを利用して、Visual StudioとASP.NETを使用して、ブラウザを使用して事実上あらゆるデバイスで実行されるゲームを作成します。 ツールとしてのVisual Studio:さまざまなデバイスで迅速なゲーム開発とテストを行い、互換性とパフォーマンスを確保するためのVisual Studioを活用してください。

ゲームデザインの簡素化:基本的なゲームデザインの原則と「Ping」(Pongバリアント)のようなシンプルなゲームから始めて、レイアウトと必須ゲームメカニックに焦点を当てています。

インタラクティブな要素:動的ゲームプレイにJavaScriptとCSSを使用してインタラクティブなゲームコントロールを組み込み、ボールやプレイヤーなどの要素がユーザー入力に効果的に応答するようにします。

AI統合:ゲームの対戦相手に基本的な人工知能を実装し、より魅力的なシングルプレイヤーエクスペリエンスを可能にします。

クロスプラットフォームの互換性:包括的なテストのためにBrowserStackなどのツールを利用して、さまざまなブラウザやデバイスでゲームがうまく機能することをテストして確認してください。

立ち上がって実行してください
  • Visual Studioですべての開発を行います。これにより、変更を加えるにつれてWebアプリを迅速に実行できます。フォローできるように、Visual Studioの最新バージョンを必ず用意してください。 Visual Studio 2013 Proを使用しましたが、Visual Studio 2013 Communityでコードを更新しました。また、MacまたはLinuxをお持ちの場合は、最近ではVisual Studioコードがクロスプラットフォームを利用できます。

    このアプリにはサーバーコードが不要なため、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と本質的に同じルールがありますが、どちらかのプレイヤーがボールを獲得したときにボールをつかみ、ボールを直接または上下に戻すことができます。多くの場合、ゲームを構築する前にゲームをどのように見たいかを描くのが最善です。このゲームでは、私が見たい全体的なレイアウトを以下に示します。

    ゲームデザインレイアウトを開発したら、各要素をHTMLに追加してゲームを構築するだけです。ただし、注意すべきことの1つは、スコアボードとコントロールをグループ化して、それらが一緒に座ることを確認することです。したがって、以下に示すように、私が要素を追加したことがわかります。

    スタイルで遊ぶVisual StudioとASP.NETで1時間以内にWebゲームを構築する このページをロードする場合、スタイルが適用されていないため、何も表示されません。 HTMLのmain.cssファイルへのリンクをすでに設定しているため、すべてのCSSをその名前の新しいファイルに配置します。私が最初にすることは、画面上にすべてを配置することです。ページの本体は画面全体を取り上げる必要があるので、最初にそれを設定します:

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    他の要素については、画像のスプライトシートを使用します。スプライトシートには、ゲームに必要なすべての画像が1つのファイルに含まれています(下の画像を参照)。

    このシートに画像がある要素には、スプライトクラスが割り当てられます。次に、各要素について、バックグラウンドポジションを使用して、表示したいスプライトシートのどの部分を定義します。

    Visual StudioとASP.NETで1時間以内にWebゲームを構築する次に、スプ​​ライトシートを使用するすべての要素にスプライトクラスを追加します。これを行うには、簡単にHTMLに戻る必要があります:

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ポジション:プレーヤー、対戦相手、ボールの絶対プロパティは、JavaScriptを使用してそれらを動かしてくれます。今ページを見ると、コントロールが表示され、ボールには不要なピースが付いています。これは、スプライトサイズがデフォルトの128ピクセルよりも小さいため、これらを適切なサイズに調整します。ボールが1つしかないので、そのサイズを直接設定します。

    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>
    ログイン後にコピー
    ログイン後にコピー
    これは単純な概念です。ボール機能は、それを呼ぶときに新しいボールを作成します。新しいキーワードを使用する必要はありません。このパターンは、利用可能なオブジェクトプロパティを明確にすることにより、この変数の周りの混乱の一部を減らします。そして、私はこのゲームを作るのに1時間しかないので、混乱する概念を最小限に抑える必要があります。

    このパターンの構造、シンプルなボールクラスを作成します:

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ボールが更新が終了したため、requestAnimationFrameが関数で再び呼び出されることに注意してください。これにより、継続的なアニメーションが保証されます。

    このコードは機能しますが、ページが完全にロードされる前にスクリプトが実行され始める問題がある場合があります。これを避けるために、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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    コードを実行してみると、ボールが角度で画面から外れて移動するのがわかります。これは一瞬楽しいですが、ボールが画面の端から外れると、楽しいことが止まります。したがって、次のステップは、図7に実装されているように、画面の端からボールを​​跳ね返すことです。このコードを追加し、アプリを実行すると、継続的にバウンスするボールが表示されます。

    可動プレーヤー

    今度は、プレイヤーオブジェクトを作成する時が来ました。プレーヤークラスを肉付けする最初のステップは、移動関数をプレイヤーの位置を変更させることです。サイド変数は、プレーヤーが居住する裁判所のどの側面を示し、プレーヤーを水平に配置する方法を指示します。移動関数に渡されたy値は、プレーヤーがどれだけ上または下に移動するかです:

    その後、プレイヤーの動きをレイアウトでき、プレーヤーのスプライトがウィンドウの上部または下部に到達した場合、動きを止めることができます。

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    2人のプレイヤーを作成し、画面の適切な側面に移動できるようにすることができます。

    キーボード入力
    <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>
    ログイン後にコピー
    ログイン後にコピー
    さまざまなプラットフォームでのタッチ入力とマウス入力間の一貫性を確保するために、優れた統合フレームワークHand.js(handjs.codeplex.com)を使用します。まず、ヘッドセクションのHTMLにスクリプトを追加します:

    その後、キーボードキーAとzを押すとき、またはコントロールをタップするときに、hand.jsとjqueryを使用してプレーヤーを制御します。
    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    現在、プレーヤーオブジェクトの位置を取得する方法はないので、プレイヤーオブジェクトにgetpositionとgetsideアクセサを追加します:

    <span>body {
    </span>  <span>margin: 0px;
    </span>  <span>height: 100%;
    </span><span>}
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    さて、ボールに所有者がいる場合、その所有者に続きます。しかし、どうすれば所有者を決定できますか?誰かがボールをキャッチしなければなりません。プレーヤーのスプライトの1つがボールに触れる時期を判断しましょう。それが起こったら、私はそのプレーヤーにボールの所有者を設定します。

    今すぐゲームをプレイしようとすると、画面の上部からボールが跳ね返ると、プレーヤーを動かしてキャッチできます。さて、どのように投げますか?それが右側のコントロールの目的です。ボールを想像します。プレーヤーに「火」関数と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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    keep score

    ボールがプレーヤーを通過したら、スコアを変更して、そのプレーヤーにボールを与えたいと思います。カスタムイベントを使用して、既存のオブジェクトのいずれかからスコアリングを分離できるようにします。更新機能が長くなっているので、CheckScoredと呼ばれる新しいプライベート関数を追加します:<span>h1 { </span> <span>font-family: 'PressStart2P', 'Georgia', serif; </span><span>} </span>

    以下のコードは、これらのイベントに反応して、スコアを更新してボールを引き渡します。このコードをJavaScriptドキュメントの下部に追加します。

    ボールが相手を通り過ぎたとき(相手が動かないので、それほど難しくありません)、スコアが上がり、ボールが相手に手渡されます。ただし、対戦相手はボールを保持するだけです。

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    次の状態は簡単です。対戦相手はボールの垂直方向に移動し、AIは待機状態に移行して、いくつかの反応時間の遅い時間を注入します。以下のコードは、これらの2つの状態を示しています:

    <span>body {
    </span>  <span>margin: 0px;
    </span>  <span>height: 100%;
    </span><span>}
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    AIは、ボールをたどり、一瞬待たなければならないことを交互にします。次に、ゲーム全体の更新関数にコードを追加します:

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ゲームを実行すると、対戦相手がボールの動きに従っているのがわかります。30行未満のコードで悪いAIはありません。もちろん、相手がボールをキャッチした場合、何もしません。したがって、時間の最後のトリックについては、照準状態のアクションを処理する時が来ました。

    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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    今では、PC、スマートフォン、タブレットで機能する本格的なWebゲームがあります。このゲームには多くの改善があります。たとえば、スマートフォンではポートレートモードでは少し厄介に見えます。そのため、適切に動作するために、携帯電話をランドスケープで保持していることを確認する必要があります。これは、Webおよびそれ以降のゲーム開発の可能性のほんの少しのデモンストレーションです。 この記事をレビューしてくれた技術専門家のMohamed Ameen Ibrahimに感謝します。

    JavaScriptを使用したより実践的な

    この記事は、Microsoft Edge Browserや新しいEdgeHTMLレンダリングエンジンなどの実用的なJavaScript学習、オープンソースプロジェクト、および相互運用性のベストプラクティスに関するMicrosoft Tech EvangelistsのWeb開発シリーズの一部です。

    dev.modern.ieの無料ツールを備えたMicrosoft Edge(Windows 10用のデフォルトのブラウザ)を含むブラウザやデバイス全体でテストすることをお勧めします。

    時代遅れのライブラリ、レイアウトの問題、アクセシビリティをスキャンしてください Mac、Linux、およびWindows

    に仮想マシンを使用します

    独自のデバイスでMicrosoft Edgeをリモートテスト

    Githubの

    コーディングラボ:クロスブラウザーテストとベストプラクティス

    マイクロソフトエッジとエンジニアおよびエバンジェリストのWebプラットフォームでの詳細な技術学習:

    • Microsoft Edge Web Summit 2015(新しいブラウザ、新しいサポートされているWebプラットフォーム標準、およびJavaScriptコミュニティのゲストスピーカーに期待すること)
    • woah、Mac&Linuxでエッジとieをテストできます! (レイ・バンゴから)
    • webを壊さずにjavascriptを前進させます(クリスチャンハイルマンから)
    • ウェブを機能させるエッジレンダリングエンジン(ジェイコブロッシから)
    • Webglを使用した3Dレンダリング(Vorlon.jsおよびBabylonjsプロジェクトを含むDavid Catuheから)
    • ホストされたWebアプリとWebプラットフォームのイノベーション(Manifold.jsプロジェクトを含むKevin HillとKiril Seksenovから)
    Webプラットフォーム向けの無料のクロスプラットフォームツールとリソース:

    Linux、MacOS、およびWindows
      のビジュアルスタジオコード Node.jsとAzure
    • の無料トライアルを使用した
    • コード
    • Visual StudioとASP.NETでWebゲームの構築に関するよくある質問(FAQ) Visual StudioとASP.NETを使用してマルチプレイヤーゲームを作成するにはどうすればよいですか?
    Visual StudioとASP.NETを使用してマルチプレイヤーゲームを作成するには、いくつかのステップが含まれます。まず、ルール、プレーヤーの対話、ゲームの結果を含むゲームロジックを設計する必要があります。次に、HTML、CSS、およびJavaScriptを使用してゲームのユーザーインターフェイスを作成する必要があります。 ASP.NETのSignalRライブラリを使用して、サーバーとクライアント間のリアルタイム通信を処理できます。最後に、C#とASP.NETを使用して、サーバー側にゲームロジックを実装する必要があります。これには、プレーヤーの接続の取り扱い、ゲーム状態の管理、および接続されたすべてのクライアントへの更新のブロードキャストが含まれます。 Studioには、Model-View-Controller(MVC)パターンを使用して、ゲームロジックをユーザーインターフェイスから分離し、データアクセスにエンティティフレームワークを使用し、単体テストを使用してコードの正確性を確保することが含まれます。さらに、Visual Studioに組み込みのデバッグツールを使用して、コードのバグを識別および修正する必要があります。 Visual StudioとASP.NETを使用してモバイルゲームを開発できます。ただし、ASP.NETは主にWeb開発フレームワークであることに注意することが重要なため、追加のツールとライブラリを使用してモバイルゲームを作成する必要があります。 Visual Studioに含まれるクロスプラットフォーム開発ツールであるXamarinは、C#でゲームコードを作成してから、Android、iOS、およびWindows Phone用にコンパイルできます。

    Visual Studioでのゲームのパフォーマンスを最適化するにはどうすればよいですか?

    ​​

    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のローカリゼーション機能を使用することが含まれます。リソースファイルを使用して各言語のテキストを保存し、ResourceManagerクラスを使用して、ユーザーの言語設定に基づいて適切なテキストを取得できます。 CultureInfoクラスを使用して、数値形式、日付形式、その他のロケール固有の設定の違いを処理することもできます。 Visual Studioには、組み込みのテストツールの使用が含まれます。ユニットテストを使用して、ゲームの個々のコンポーネント、統合テストをテストしてこれらのコンポーネントがどのように連携するか、UIテストでユーザーインターフェイスをテストできます。 Visual Studioのデバッグツールを使用して、コードのバグを識別および修正することもできます。

以上がVisual StudioとASP.NETで1時間以内にWebゲームを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

javascriptの分解:それが何をするのか、なぜそれが重要なのか javascriptの分解:それが何をするのか、なぜそれが重要なのか Apr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? Apr 04, 2025 pm 05:09 PM

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

JavaScriptは学ぶのが難しいですか? JavaScriptは学ぶのが難しいですか? Apr 03, 2025 am 12:20 AM

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は?
または:
Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は? または: Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Apr 04, 2025 pm 05:36 PM

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptの進化:現在の傾向と将来の見通し JavaScriptの進化:現在の傾向と将来の見通し Apr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

See all articles