个人理财 如何添加碰撞到您的HTML5游戏 - 傻瓜

如何添加碰撞到您的HTML5游戏 - 傻瓜

目录:

视频: Unity游戏制作教学#4创建第一个游戏场景【Unity游戏场景制作教学】 2024

视频: Unity游戏制作教学#4创建第一个游戏场景【Unity游戏场景制作教学】 2024
Anonim

当HTML5视频游戏中最有趣的事情发生时,精灵conk和相互碰撞。游戏引擎通常有一些工具来测试两个精灵是否重叠。这被称为 冲突检测 ,可以通过多种方式完成。本示例使用标准的 边界矩形 方案。这不是完美的,但它很容易实现,并且是常用的。

<! --1 - >

如何在游戏中设置边界矩形冲突

看看colTest。 HTML,你会看到一个简单的例子。在colTest中。 html例子中,用户用鼠标移动小动物,当小动物触摸屏幕中间的盒子时,你会得到一个消息。

COLTEST。 html

var game; var box;无情的小动物var输出;函数init(){game = new Scene();游戏。 hideCursor(); box = new Sprite(game,“simpleBox。png”,50,50);小动物=新的雪碧(游戏,“小动物”,50,50);输出=文档。的getElementById( “输出”); //给框固定位置框。 setPosition(200,150);框。 (0)setSpeed; //由鼠标小动物控制的小动物setPosition(100,100);小动物。 (0)setSpeed;小动物。 followMouse = function(){this。 setX(document。mouseX);这个。 setY(document。mouseY);} //结束followMouse游戏。 start();} //结束init函数update(){游戏。明确();小动物。 followMouse(); 盒。更新();小动物。 update();} //结束更新; 函数checkCollisions(){ if(box。collidesWith(critter)){ 输出。 innerHTML =“碰撞”; }其他{ 输出。 innerHTML =“无碰撞”; } //结束,如果 } //结束checkCollisions 空 这段代码中发生了许多有趣的事情:

<! - 2 - >

隐藏正常的鼠标光标。
  1. 当你要有一些其他的物体跟着鼠标,你通常想要隐藏正常的箭头光标。在simpleGame中,使用游戏。 hideCursor()方法隐藏游戏画面内的鼠标光标。

    创建多个精灵。

  2. 需要两个探戈,或相撞。在这个例子中,盒子将保持静止,并且跟随鼠标。

    给这个小动物一个followMouse()方法。
  3. 在这个例子中,你有小动物跟随鼠标。首先创建一个followMouse()方法。

    确定鼠标的位置。

  4. 鼠标位置由文档确定(在simpleGame.js中)。 mouseX和文档。 mouseY属性。

    将鼠标位置复制到小动物位置。

  5. 使用鼠标的x位置设置小动物的x位置,并用y重复。

    每一帧调用小怪物的followMouse()方法。与往常一样,update()函数是您应该将代码重复发生的地方。

  6. 如果玩弄colTest。 html页面,你可能会注意到碰撞不是确切的。甚至当小动物没有碰到盒子时,也可以有一个碰撞记录器。这很重要,因为simpleGame使用了一个名为

    边界框碰撞

的方案。 这意味着你并没有真正检查图像是否碰撞,而是图像周围的矩形是否碰撞。在这个例子中,这个差别很小,但是有时你会发现这个机制存在很大的错误,特别是对于那些长而薄的元素。当精灵旋转时,边界矩形的大小可以改变。 游戏中基于距离的碰撞

可以使用称为

边界圆

碰撞的替代形式的碰撞检测。有了这个机制,你只需计算两个精灵的中心之间的距离,如果这个值小于某个阈值,就认为是碰撞。这种方法有两个好处: 碰撞距离是恒定的。 即使图像更改大小,图像旋转时图像中心之间的距离也不会改变。碰撞阈值可以变化。

  • 你可以设定任何你想要的灵敏度。设置一个较大的碰撞半径以实现轻松碰撞,一个较小的碰撞半径,当您想要只在精灵非常接近时触发碰撞。 simpleGame库的Sprite对象有一个distanceTo()方法,用于计算从一个精灵到另一个精灵的距离。你可以在远处看到这个代码的例子。 html例子:

  • 距离。 html var game; var box;无情的小动物var输出;函数init(){game = new Scene();游戏。 hideCursor(); box = new Sprite(game,“simpleBox。png”,50,50);小动物=新的雪碧(游戏,“小动物”,50,50);输出=文档。的getElementById( “输出”); //给框固定位置框。 setPosition(200,150);框。 (0)setSpeed;小动物。 setPosition(100,100);小动物。 (0)setSpeed; //由鼠标小动物控制的小动物followMouse = function(){this。 setX(document。mouseX);这个。 setY(document。mouseY);} //结束followMouse游戏。 start();} //结束init函数update(){游戏。明确();小动物。 followMouse(); checkDistance();

盒。更新();小动物。 update();} //结束更新;

function checkDistance(){ dist = box。 distanceTo(小动物);如果(dist <50){ 输出。 innerHTML =“碰撞:”+ dist; }其他{ 输出。 innerHTML =“不碰撞:”+ dist; } //结束,如果 } //结束checkDistance 空 基于距离的碰撞方法与边界矩形版本非常相似。创建一个checkDistance()函数,它的作用就像旧的checkCollisions()一样。以下是在checkDistance中发生的步骤: 查找两个精灵之间的距离。 使用精灵的distanceTo()方法来确定两个精灵之间的距离。 如果距离小于某个阈值,则将其视为碰撞。

通常,您应该使用较小的精灵的宽度作为碰撞阈值的起点,但是您可以调整它以使碰撞发生或多或少的可能性。

  1. 报告碰撞状态。在这个例子中,简单地打印“碰撞”或“不碰撞”,但是在真实游戏中,碰撞触发其他动作:增加分数,减少生命数量,改变碰撞元素的速度或位置, 管他呢。 (希望它涉及爆炸。)

如何添加碰撞到您的HTML5游戏 - 傻瓜

编辑的选择

。 Com Service Cloud - 虚拟人物

。 Com Service Cloud - 虚拟人物

任务是一种通常不具有特定时间和持续时间的活动;一个事件确实有特定的时间和持续时间。事件和任务都被认为是Salesforce中的活动。 “我的任务”部分显示您的任务,而“日历”部分显示您的事件。使用我的任务“我的任务”部分是您的...

MYOB超级快捷方式 - 傻瓜

MYOB超级快捷方式 - 傻瓜

无论您当时在做什么,都可以使用快捷键。例如,也许你想在记录销售的过程中查找供应商的电话号码。只需按下键盘上的Ctrl键,然后按F键直接进入卡片列表。 ...

编辑的选择

如何邀请朋友加入Klout

如何邀请朋友加入Klout

提供。这就是为什么Klout通过提供更多网络连接和与影响者进行交互的方式(例如给予+ K认可)不断改进服务的原因。如何分享主题和Klout影响者您可以使用位于您的Facebook和Twitter分享按钮...

如何从您的Klout配置文件移除时刻 - 虚拟人物

如何从您的Klout配置文件移除时刻 - 虚拟人物

您可以从Klout中移除时刻如果您关心您的隐私,请完整填写个人资料。除非另有说明,否则您最有影响力的公开时刻会显示在您的个人资料页面上。您可以从个人资料页面或一次删除所有的时刻。要删除所有瞬间出现在您的Klout个人资料...

编辑的选择

如何阅读您的LinkedIn网络活动 - 傻瓜

如何阅读您的LinkedIn网络活动 - 傻瓜

与LinkedIn网络保持联系的一种方式是随时了解您的一级连接如何使用LinkedIn。为此,网络活动部分(现称为LinkedIn Pulse)总结了您的即时LinkedIn网络中的​​所有活动。通常,您的网络活动部分包含最近的25个项目。如果...

如何删除LinkedIn推荐或请求修订 - 傻瓜

如何删除LinkedIn推荐或请求修订 - 傻瓜

获得更多的LinkedIn推荐,您可能只需要在您的个人资料上提供特定的建议要删除您收到的建议或申请修订,请按以下步骤操作: