使用Visual Studio和ASP.NET在一个小时内构建网络游戏
>本文是Microsoft的Web开发系列的一部分。感谢您支持使SitietPoint成为可能的合作伙伴。 本文讨论:
基本游戏发展哲学
- 使用Web技术进行游戏开发
- 添加游戏控件和AI
-
讨论的技术:
>代码下载(.zip)
- >您不需要全新的技能来开发游戏。实际上,您目前在HTML,JavaScript,CSS等方面的网络开发技能非常适合各种游戏。当您使用Web技术构建游戏时,它将在几乎所有带有浏览器的设备上运行。 > 为了证明这一点,我将展示使用Web Technologies和两个外部图书馆从头开始构建游戏,我将在不到一个小时的时间内完成。我将介绍从基本设计和布局,控件和精灵到简单对手的人工智能(AI)的各种游戏开发主题。我什至要开发游戏,以便在PC,平板电脑和智能手机上使用。如果您有作为Web开发人员或其他开发领域编程的经验,但是没有经验写游戏的经验,那么本文将使您入门。如果您给我一个小时,我保证会向您展示绳索。
- 钥匙要点
快速开发:利用HTML,JavaScript和CSS中的现有Web开发技能来创建几乎任何带有浏览器的设备,使用Visual Studio和ASP.NET。
> Visual Studio作为工具:利用视觉工作室进行快速游戏开发和跨不同设备进行测试,确保兼容性和性能。
游戏设计简化:从基本的游戏设计原理和一个简单的游戏开始,例如“ ping”(乒乓变体),重点放在布局和基本游戏机制上。
>- 交互式元素:使用JavaScript和CSS进行动态游戏玩法,并合并交互式游戏控件,以确保诸如球和玩家之类的元素有效地响应用户输入。
- >跨平台兼容性:测试并确保游戏在各种浏览器和设备上的性能都很好
- 启动并运行
- >我将在Visual Studio中进行所有开发,这将在我进行更改时快速执行Web应用程序。请确保拥有最新版本的Visual Studio,以便您可以跟随。我使用了Visual Studio 2013 Pro,但通过Visual Studio 2013社区更新了代码。另外,如果您有Mac或Linux,则如今可以使用Visual Studio代码。
- 哇,我可以在Mac&Linux上测试Edge&IE! (来自Rey Bango)
>在没有打破网络的情况下(来自克里斯蒂安·海尔曼) - >前进的javascript
> Edge渲染引擎,使网络刚刚起作用(来自Jacob Rossi)- >使用WebGL启用3D(来自David Catuhe,包括Vorlon.js和Babylonjs Projects)
- 托管了网络应用程序和Web平台创新(来自Kevin Hill和Kiril Seksenov,包括歧管项目)
> - Linux,MacOS和Windows的Visual Studio代码
>与node.js的代码和azure - >如何使用Visual Studio和ASP.NET?
- >在Visual Studio中,游戏开发的最佳实践是什么?工作室包括使用模型视图控制器(MVC)模式将游戏逻辑与用户界面分开,使用实体框架进行数据访问,并使用单元测试来确保您的正确性 代码。此外,您应该使用Visual Studio中的内置调试工具来识别和修复代码中的错误。
这个应用程序将不需要服务器代码,因此我首先在Visual Studio中创建一个新的,空的网页项目。我将通过选择文件后选择“ Visual C#”选项来使用空网站的空C#模板。新| ASP.NET空网站。
索引HTML文件仅需要三个资源:jQuery,主样式表和主JavaScript文件。我将一个空的CSS文件添加到名为style.css和一个空的JavaScript文件的项目中,称为ping.js,以避免加载页面时错误:
><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>
也不要忘记在浏览器和设备之间对此应用进行测试(或任何其他)。虽然我编写的代码与Chrome,Firefox和Microsoft Edge等现代浏览器可互操作,但这始终是双重检查的最佳实践。现在,您可以使用免费的虚拟机和其他工具(例如http://www.browserstack.com。
基本设计我正在构建的游戏是我称为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>
播放
如果您要加载此页面,则不会看到任何东西,因为没有应用样式。我已经在HTML中设置了指向main.css文件的链接,因此我将所有CSS放在带有该名称的新文件中。我要做的第一件事是将所有内容都放在屏幕上。页面的主体需要占用整个屏幕,因此我将首先设置:>第二,我需要将竞技场填充整个屏幕,并应用了竞技场背景图像(请参见下图):
<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>

我也希望文本字体以复古主题为主题。大多数现代浏览器都让我包括自己的字体。我从Codeman38(Zone38.net)找到了适当的按下2P字体。要将字体添加到计分板中,我必须创建一个新的字体脸:
<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>
<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>
<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>
<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>
>
遵循弹跳球>现在,我将球四处移动。对于JavaScript代码,就像我对CSS一样,我引用了一个名为ping.js的文件。我将此代码添加到带有该名称的新文件中。我将为球和每个球员制作对象,但是我将使用工厂模式作为对象。
>
这是一个简单的概念。当您调用它时,球功能会产生一个新的球。无需使用新关键字。这种模式通过阐明可用的对象属性来减少该变量周围的一些混乱。而且由于我只有一个小时来制作这个游戏,所以我需要最大程度地减少任何令人困惑的概念。当我完成简单的球类时,这种模式的结构:
>为创建一个新的球,我只称其为已定义的此功能:
<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>
一个可移动的播放器
现在是时候制作播放器对象了。散开播放器类的第一步是使移动功能更改播放器的位置。侧变量将指示球员将居住的球场的哪一侧,这将决定如何水平定位球员。传递到移动函数的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>
键盘输入
<span><span>@font-face</span> { </span> <span>font-family: 'PressStart2P'; </span> <span>src: <span>url('PressStart2P.woff')</span>; </span><span>} </span>
> 为了确保各种平台上的触摸输入和鼠标输入之间的一致性,我将使用出色的统一框架hand.js(handjs.codeplex.com)。首先,我将脚本添加到HTML中:
><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><!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>
>
<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>
>保持得分
<span>h1 { </span> <span>font-family: 'PressStart2P', 'Georgia', serif; </span><span>} </span>
>当球通过球员时,我想更改得分并将球交给那个球员。我将使用自定义事件,以便可以将评分与任何现有对象分开。更新功能越来越长,因此我将添加一个名为CheckScored的新私人功能:
>>下面的代码对这些事件做出反应,以更新得分并交出球。将此代码添加到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>
现在,当球超越对手时(这并不困难,因为对手没有移动),您的得分就会上升,球将交给对手。但是,对手只会抓住球。
<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>
您几乎有一场比赛。如果你有一个可以和谁一起玩的人。作为最后一步,我将展示如何用简单的AI控制对手。对手会在球移动时试图与球保持平行。如果对手接球,它将随机移动并朝随机发射球。为了使人工智能感觉更加人性化,我将在所有事情中添加延误。请注意,这不是高度智能的AI,但这将是与游戏对抗的事情。
在设计这种系统时,在各州进行思考是一件好事。对手AI有三个可能的状态:遵循,瞄准/射击和等待。我将成为遵循添加更人性化元素的行动之间的状态。仅针对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>
总结
到目前为止,您拥有一个完整的网络游戏,可在PC,智能手机和平板电脑上使用。该游戏有许多可能的改进。例如,它在智能手机上的肖像模式中看起来会有些尴尬,因此您需要确保在景观中握住手机才能正常工作。这只是网络及以后游戏开发的可能性的一个小表明。
<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>
与JavaScript更多动手
本文是Microsoft Tech传教士的Web开发系列的一部分,该系列有关实用的JavaScript学习,开源项目和互操作性最佳实践,包括Microsoft Edge浏览器和新的Edgehtml渲染引擎。
我们鼓励您在浏览器和设备上进行测试,包括Microsoft Edge(Windows 10的默认浏览器),并在dev.modern.ie上使用免费工具:>扫描您的网站以获取过时的库,布局问题和可访问性
>使用Mac,Linux和Windows
的虚拟机>远程测试您自己的设备上的Microsoft Edge
GitHub上的编码实验室:跨浏览器测试和最佳实践在Microsoft Edge上以及我们的工程师和传教士的Web平台上的深入技术学习:
- :
-
2015年Microsoft Edge Web Summit(新浏览器,新支持的Web平台标准以及JavaScript社区的来宾演讲者的期望)
经常询问有关使用Visual Studio和ASP.NET
- 建立网络游戏的问题(常见问题解答)
我可以使用Visual Studio和asp.net开发移动游戏?您可以使用Visual Studio和ASP.NET开发手机游戏。但是,重要的是要注意,ASP.NET主要是一个网络开发框架,因此您需要使用其他工具和库来创建手机游戏。 Xamarin是Visual Studio随附的跨平台开发工具,允许您在C#中编写游戏代码,然后将其编译为Android,iOS和Windows Phone。>如何在Visual Studio中优化游戏的性能?首先,您应该使用内置分析工具来识别代码中的瓶颈。接下来,您可以使用诸如代码优化,数据结构优化和算法优化之类的技术来提高代码的性能。此外,您应该使用现代图形卡的硬件加速功能来提高游戏的渲染性能。
我如何在Visual Studio中添加声音效果和音乐?在Visual Studio中为游戏的声音效果和音乐涉及使用System.Media名称空间中的Soundplayer类。您可以使用播放方法播放声音效果或音乐曲目,以及停止播放声音的停止方法。您也可以使用Playlooping方法连续播放声音。 Soundplayer类支持WAV文件,因此您需要将声音效果和音乐曲目转换为此格式。
>如何在Visual Studio中发布我的游戏?在Visual Studio中开发的涉及多个步骤。首先,您需要在发布模式下构建游戏以创建可执行文件。接下来,您需要使用诸如InstallShield之类的工具为游戏创建安装程序。最后,您可以通过各种渠道(例如您自己的网站,在线游戏商店或应用商店。 >虽然可以使用Visual Studio和ASP.NET开发3D游戏,但对于这些工具来说,它并不是最常见的用例。 ASP.NET主要是一个网络开发框架,Visual Studio是一种通用开发环境。如果您有兴趣开发3D游戏,则可能需要考虑使用专用游戏开发引擎(例如Unity或Unreal Engine),这些引擎为3D游戏开发提供了更高级的工具和功能。
>我如何添加多个 - 在Visual Studio中对我的游戏的支持?>在Visual Studio中为您的游戏添加多语言支持涉及使用ASP.NET的本地化功能。您可以使用资源文件为每种语言存储文本,然后使用ResourceManager类使用用户的语言设置来检索适当的文本。您还可以使用CultureInfo类来处理数字格式,日期格式和其他特定环境特定设置的差异。我如何在Visual Studio中测试我的游戏? Visual Studio涉及使用内置测试工具。您可以使用单元测试来测试游戏的各个组件,集成测试以测试这些组件如何共同工作以及UI测试以测试用户界面。您还可以使用Visual Studio中的调试工具来识别和修复代码中的错误。>我可以使用Visual Studio和asp.net开发游戏机游戏吗?
>
虽然在技术上可以使用Visual Studio和asp.net开发游戏机,但这并不是这些最常见的用例工具。游戏机游戏开发通常涉及使用专用游戏开发引擎(例如Unity或Unreal Engine),该引擎为游戏机游戏开发提供了更高级的工具和功能。但是,您可以使用Visual Studio和ASP.NET来开发控制台游戏的服务器端组件,例如多人游戏配对服务或排行榜系统。>以上是使用Visual Studio和ASP.NET在一个小时内构建网络游戏的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...
