2013-05-25 31 views
2

我知道我可以使用mousedown選擇它,但我想點擊精靈跟隨我的鼠標,有一個在api中提到的各種各樣的mousetracker函數;但不幸的是,除了聲明允許鼠標檢測外,沒有其他例子。在gamequery我想通過點擊對象,並拖動它的鼠標跟蹤移動選定的對象

//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 
     }); 

    } 
}); 

我有鼠標的位置選擇,只是不知道如何讓選定的精靈跟着它。

任何幫助將不勝感激。

回答

3

什麼馬蒂說是正確的:$ .gQ。 mouseTracker允許您在事件處理程序之外訪問鼠標的狀態。他給出的例子是正確的,但它不能用於移動一個gQ對象(sprite,tile-map或group),因爲你不允許使用這些函數。這樣做會破壞碰撞檢測。

如果你想要的是移動GQ對象,你應該這樣做,而不是:

$('#' + currentClickedDivId).xy($.gQ.mouseTracker.x, $.gQ.mouseTracker.y); 

但由於這應該在週期性回調來完成,拖動的平滑度將取決於刷新率。

如果你想使用事件處理程序,而不是你可以修改你的代碼看起來像這樣(不使用mouseTracker):

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, 
     ); 
    } 
}); 

這將實現一拖N - 下降的效果。如果您希望單擊的元素粘貼到鼠標上,您將不得不略微調整代碼,但基本操作將保持不變。

+0

謝謝selim。這有助於顯着,順便說一句;愛圖書館;你用它做了很好的工作 –

+0

btw @selim我不認爲你明白這對我有多大的幫助。我最初試圖重新編寫代碼來操縱css,並且碰到碰撞檢測問題,這要感謝您的答案;碰撞檢測現在起作用。如果你來到密歇根州安娜堡,我欠你一杯啤酒 –

2

按照documentation

如果鼠標跟蹤已啓用,您可以通過查看對象$ .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()

$('#' + currentClickedDivId).css({ 
    top: $.gQ.mouseTracker.y + 'px', 
    left: $.gQ.mouseTracker.x + 'px' 
}); 
+0

看起來像這應該工作,我意識到由於css定位自己的方式,我將不得不繞着移動對象等它的價值只是使用原生jquery函數而不是$ .gQ.mouseTracker .y等,因爲它的定位方式,它的頂部和左側定義爲0. –