我正在使用HTML5画布和JavaScript创建一个简单的基于Web的游戏。我目前在画布上显示一些图像,每个图像代表快餐店里的物品。我还有四个“描述框”,每个标签分别为资产、负债、收入或支出。
这些图像中的每一个都属于这些描述框之一,用户需要将每个图像拖放到正确的描述框中。
我计划通过使用JS变量名称和每个项目图像的HTML alt标记来检查用户是否已将图像拖到正确的框中。例如,img “chair”具有alt标记“asset”,并且资产的描述框具有变量名称“assetsDescriptionBox”,因此我将使用if语句检测用户正在拖动的图像是否被拖到了画布的与资产描述框显示的位置相同的区域,并且如果该图像具有alt标记“asset”,则它将从画布中消失(并添加到数组中以供稍后在游戏中使用)。
但是,如果用户正在拖动的图像没有alt标记“asset”,而是拥有其他标记,例如“liability”,则它将在画布上重新绘制回原来的位置。
我不确定如何实现这一点。我已经研究了碰撞检测,似乎可以使用JS方法getBoundingClientRect来获取图像的“外部限制”,然后检查两个图像的外部限制是否重叠,如果重叠,则执行某些操作。但是,我不确定如何使用此方法,并且在快速搜索Google时找不到任何特别有用的信息。
请问是否有人知道这是否是实现此目标的最佳方法?如果是,请提供如何使用getBoundingClientRect方法的示例?或者如果不是,您会如何做?
编辑17/12/2012 @ 16:45:
顺便说一下,我正在使用KineticJS库(我已经保存了本地副本以进行一两个更改)添加拖放功能,因此我认为需要更改/添加库中的某些内容以添加碰撞检测。
大家有什么想法吗?
编辑01/01/2013 @ 12:35:
你好,谢谢你的回答 - 确实看起来像是我想要做的事情。我已经在画布上显示了所有图像,其中四个是“静态”的,不能在画布上拖动 - 这些是我想要用作我的“放置区域”,并且可以拖放其余的图像。我不太确定如何将您的代码提供的功能添加到我已经拥有的内容中?如果您访问以下网址:users.aber.ac.uk/eef8/project/development/featureset2dev,您将能够看到我已经完成的工作。
要在我的描述框中添加“dropzone”功能,我需要使用以下行将其添加到画布中吗?
您在示例中所做的是什么?
这些图像中的每一个都属于这些描述框之一,用户需要将每个图像拖放到正确的描述框中。
我计划通过使用JS变量名称和每个项目图像的HTML alt标记来检查用户是否已将图像拖到正确的框中。例如,img “chair”具有alt标记“asset”,并且资产的描述框具有变量名称“assetsDescriptionBox”,因此我将使用if语句检测用户正在拖动的图像是否被拖到了画布的与资产描述框显示的位置相同的区域,并且如果该图像具有alt标记“asset”,则它将从画布中消失(并添加到数组中以供稍后在游戏中使用)。
但是,如果用户正在拖动的图像没有alt标记“asset”,而是拥有其他标记,例如“liability”,则它将在画布上重新绘制回原来的位置。
我不确定如何实现这一点。我已经研究了碰撞检测,似乎可以使用JS方法getBoundingClientRect来获取图像的“外部限制”,然后检查两个图像的外部限制是否重叠,如果重叠,则执行某些操作。但是,我不确定如何使用此方法,并且在快速搜索Google时找不到任何特别有用的信息。
请问是否有人知道这是否是实现此目标的最佳方法?如果是,请提供如何使用getBoundingClientRect方法的示例?或者如果不是,您会如何做?
编辑17/12/2012 @ 16:45:
顺便说一下,我正在使用KineticJS库(我已经保存了本地副本以进行一两个更改)添加拖放功能,因此我认为需要更改/添加库中的某些内容以添加碰撞检测。
大家有什么想法吗?
编辑01/01/2013 @ 12:35:
你好,谢谢你的回答 - 确实看起来像是我想要做的事情。我已经在画布上显示了所有图像,其中四个是“静态”的,不能在画布上拖动 - 这些是我想要用作我的“放置区域”,并且可以拖放其余的图像。我不太确定如何将您的代码提供的功能添加到我已经拥有的内容中?如果您访问以下网址:users.aber.ac.uk/eef8/project/development/featureset2dev,您将能够看到我已经完成的工作。
要在我的描述框中添加“dropzone”功能,我需要使用以下行将其添加到画布中吗?
var i = new Image(200, 200, 50, 50, 'cat.jpg', 300, 300, 60, 60);
您在示例中所做的是什么?