Phaser 2 - 如何检测我何时拖过另一个精灵?
Phaser 2 - how to detect when I am dragging over another sprite?
我正在构建一个 Phaser 应用程序,我可以在其中将一个 sprite 拖到另一个 sprite 的顶部并将其放到它下面的 sprite 上,在这个阶段我的代码将创建与拖放的 sprite 和它被丢弃的精灵。我没有为此使用任何物理学。这应该为问题添加一些上下文,但 'drop' 不是我想要回答的问题。
在拖动 sprite 的同时,我想改变拖动的 sprite 的比例,以向用户显示它被检测为悬停在它可以掉入的东西上。
我可以遍历屏幕上的 sprite 并检查被拖动的 sprite 的坐标是否击中了另一个 sprite,但是如果放入 dragUpdate 函数,效率会非常低。
我正在寻找一个替代方案,我可以从精灵的 x/y 拖动位置从被拖动的精灵向下进行光线投射,看看它是否击中另一个精灵。由于文档在这方面有点单薄,您有什么想法吗?
我已经用一些工作示例更新了您的 fiddle,包括将精灵拖动到其中一个目标上时缩小精灵。
我循环每个目标并检测可拖动精灵是否在目标内。
function onDragUpdate(sprite, pointer, dragX, dragY, snapPoint) {
var draggableBounds = sprite.getBounds();
for (var i = 0; i < targets.length; i ++)
{
var target = targets[i];
var targetBounds = target.getBounds();
var rect = new Phaser.Rectangle(draggableBounds.x, draggableBounds.y, draggableBounds.width, draggableBounds.height);
if (Phaser.Rectangle.intersects(draggableBounds, targetBounds))
{
sprite.scale.setTo(0.2);
if (!targetBounds.containsRect(sprite.getBounds())) {
sprite.scale.setTo(0.5);
}
else {
game.debug.text(sprite.draggable_custom_id + ' is over ' + target.target_custom_id, 20, 20 );
}
}
检查 fiddle:https://jsfiddle.net/22zpsbna/2/
我正在构建一个 Phaser 应用程序,我可以在其中将一个 sprite 拖到另一个 sprite 的顶部并将其放到它下面的 sprite 上,在这个阶段我的代码将创建与拖放的 sprite 和它被丢弃的精灵。我没有为此使用任何物理学。这应该为问题添加一些上下文,但 'drop' 不是我想要回答的问题。
在拖动 sprite 的同时,我想改变拖动的 sprite 的比例,以向用户显示它被检测为悬停在它可以掉入的东西上。
我可以遍历屏幕上的 sprite 并检查被拖动的 sprite 的坐标是否击中了另一个 sprite,但是如果放入 dragUpdate 函数,效率会非常低。
我正在寻找一个替代方案,我可以从精灵的 x/y 拖动位置从被拖动的精灵向下进行光线投射,看看它是否击中另一个精灵。由于文档在这方面有点单薄,您有什么想法吗?
我已经用一些工作示例更新了您的 fiddle,包括将精灵拖动到其中一个目标上时缩小精灵。
我循环每个目标并检测可拖动精灵是否在目标内。
function onDragUpdate(sprite, pointer, dragX, dragY, snapPoint) {
var draggableBounds = sprite.getBounds();
for (var i = 0; i < targets.length; i ++)
{
var target = targets[i];
var targetBounds = target.getBounds();
var rect = new Phaser.Rectangle(draggableBounds.x, draggableBounds.y, draggableBounds.width, draggableBounds.height);
if (Phaser.Rectangle.intersects(draggableBounds, targetBounds))
{
sprite.scale.setTo(0.2);
if (!targetBounds.containsRect(sprite.getBounds())) {
sprite.scale.setTo(0.5);
}
else {
game.debug.text(sprite.draggable_custom_id + ' is over ' + target.target_custom_id, 20, 20 );
}
}
检查 fiddle:https://jsfiddle.net/22zpsbna/2/