Javascript 在gamequery中,我试图通过单击并拖动鼠标器来移动选定的对象

Javascript 在gamequery中,我试图通过单击并拖动鼠标器来移动选定的对象,javascript,jquery,gamequery,Javascript,Jquery,Gamequery,我知道我可以使用mousedown选择,但我希望点击的精灵跟随我的鼠标,api中提到了一个mousetracker函数;但不幸的是,除了声明它允许鼠标检测之外,没有其他的例子 //add mousedown events for yarnballs. $(".gQ_sprite").mousedown(function() { clickedDivId = $(this).attr('id'); if(clickedDivId.charAt(8) == "-") {

我知道我可以使用mousedown选择,但我希望点击的精灵跟随我的鼠标,api中提到了一个mousetracker函数;但不幸的是,除了声明它允许鼠标检测之外,没有其他的例子

//add mousedown events for yarnballs.
$(".gQ_sprite").mousedown(function() {
    clickedDivId = $(this).attr('id');
    if(clickedDivId.charAt(8) == "-")
    {
        currentClickedDivId = clickedDivId
        $(document).mousemove(function(e){
            spriteXPosition = e.pageX
            spriteYPosition = e.pageY
        });

    }
});
我选择了鼠标的位置,只是不确定如何让选定的精灵跟随它

任何帮助都将不胜感激

根据:

如果启用了鼠标跟踪器,您可以通过查看对象$.gQ.mouseTracker随时检查鼠标的状态其中x和y包含鼠标的位置,1、2和3为布尔值,其中true表示按下了第一、第二或第三个按钮

观察以下各项的输出:

$("#playground").playground({ refreshRate: 60, mouseTracker: true });

$.playground().startGame();
$.playground().registerCallback(function(){
    console.log( $.gQ.mouseTracker );
}, 1000);
要使这些div实际跟随光标,必须使用
.css()


Mati所说的是正确的:$.gQ.mouseTracker允许您在事件处理程序之外访问鼠标的状态。他给出的示例是正确的,但它不能用于移动gQ对象(精灵、平铺贴图或组),因为不允许对这些对象使用.css()函数。这样做将破坏碰撞检测

如果要移动gQ对象,则应执行以下操作:

$('#' + currentClickedDivId).xy($.gQ.mouseTracker.x, $.gQ.mouseTracker.y);
但由于这应该在定期回调中完成,因此拖动的平滑度将取决于刷新率

如果您想改用事件处理程序,您可以修改代码,使其如下所示(无需使用捕鼠器):


这将实现拖放效果。如果你想让点击的元素粘在鼠标上,你必须稍微修改一下代码,但基本内容将保持不变。

看起来这应该行得通,我意识到,由于css定位自身的方式,我将不得不四处移动对象等。它几乎值得使用原生jquery函数而不是$.gQ.mouseTracker.y等,因为它的定位方式将其顶部和左侧定义为0.selim。顺便说一句,这很有帮助;热爱图书馆;你用ITW@selim做了很棒的工作,我想你不知道这对我有多大帮助。我最初试图重新加载代码来操作css,但由于您的回答,在冲突检测方面遇到了问题;碰撞检测现在可以工作了。如果你来密歇根州安娜堡:我欠你一杯啤酒
$('#' + currentClickedDivId).xy($.gQ.mouseTracker.x, $.gQ.mouseTracker.y);
var clickedDiv;
var clickedDivOffset = {x:0, y:0};

$(".gQ_sprite").mousedown(function(e) {
    clickedDiv = $(this);
    clickedDivOffset = {
        x: e.pageX - clickedDiv.x() - $().playground().offset().left,
        y: e.pageY - clickedDiv.y() - $().playground().offset().top
    };
});

$(".gQ_sprite").mouseup(function() {
    clickedDiv = false;
});

$().playground().mousemove(function(e) {
    if(clickedDiv){
        clickedDiv.xy(
            e.pageX - clickedDivOffset.x,
            e.pageY - clickedDivOffset.y,
        );
    }
});