我有一個可拖動的圓形狀,用戶拖動到另一個圓形[靜態,不可拖動]。當可拖動的圓圈與靜態圓圈重疊時,我需要顯示「成功」文本。我該怎麼做?如何檢測可拖動的圓形與KineticJS重疊的另一個圓形?
回答
當用戶拖動圓圈時,可以處理「拖動」事件。
在「dragmove」中:測試圓圈是否發生碰撞。如果是這樣,那麼宣佈成功!
Circle1.on("dragmove",function(){
if(theyAreColliding(Circle1,Circle2)){
// Success!
}
});
碰撞測試看起來是這樣的:
function theyAreColliding(c1,c2){
var dx=c1.getX()-c2.getX();
var dy=c1.getY()-c2.getY();
var radiiSum=c1.getRadius()+c2.getRadius();
console.log(dx+"/"+dy+": "+radiiSum);
return((dx*dx+dy*dy)<radiiSum*radiiSum);
}
這裏是代碼和一個小提琴:http://jsfiddle.net/m1erickson/3dQpL/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Prototype</title>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://www.html5canvastutorials.com/libraries/kinetic-v4.3.3-beta.js"></script>
<style>
canvas{
border:solid 1px #ccc;
}
</style>
<script>
$(function(){
var layer = new Kinetic.Layer();
var stage = new Kinetic.Stage({
container: "container",
width: 400,
height: 400
});
stage.add(layer);
// mouse events don't fire on the empty part of the stage
// so fill the stage with a rect to get events on entire stage
// now stage.on("mouse... will work
var background = new Kinetic.Rect({
x: 0,
y: 0,
width: 400, //stage.getWidth(),
height: 400, //stage.getHeight(),
fill: "#eee"
});
layer.add(background);
var Radius1=50;
var Circle1=new Kinetic.Circle({
x: 225,
y: 125,
radius: Radius1,
fill: 'green',
stroke: 'orange',
strokeWidth: 2,
draggable:true
});
layer.add(Circle1);
var Radius2=50;
var Circle2=new Kinetic.Circle({
x: 75,
y: 175,
radius: Radius2,
fill: 'blue',
stroke: 'black',
strokeWidth: 2
});
layer.add(Circle2);
var message = new Kinetic.Text({
x: 10,
y: 15,
text: "",
fontSize: 30,
fontFamily: 'Calibri',
fill: 'green'
});
layer.add(message);
var instructions = new Kinetic.Text({
x: 10,
y: 285,
text: "Drag green on top of blue",
fontSize: 18,
fontFamily: 'Calibri',
fill: 'green'
});
layer.add(instructions);
layer.draw();
Circle1.on("dragmove",function(){
if(theyAreColliding(Circle1,Circle2)){
message.setText("Collision Detected!");
Circle1.setFill("red");
layer.draw();
}else{
}
});
function theyAreColliding(c1,c2){
var dx=c1.getX()-c2.getX();
var dy=c1.getY()-c2.getY();
var radiiSum=c1.getRadius()+c2.getRadius();
console.log(dx+"/"+dy+": "+radiiSum);
return((dx*dx+dy*dy)<radiiSum*radiiSum);
}
}); // end $(function(){});
</script>
</head>
<body>
<div id="container"></div>
</body>
</html>
哇!這太棒了!謝謝 – devcoder 2013-03-26 14:03:07
正是我所評論的。然而,你可以做到這一點,而不會創建這麼多不必要的變量:'function theyAreColliding(c1,c2){return Math.pow(c1.getX() - c2.getX(), 2)+ Math.pow(c1.getY() - c2.getY(),2)
@FabrícioMatté - 謝謝!另一個相關問題,我將如何修改此代碼,以便只有當一個圈子完全或超過50%覆蓋另一個時才顯示「成功」。 – devcoder 2013-03-26 14:27:46
- 1. OpenCV - 檢測圓形形狀
- 2. 拖動在圓形內移動圖像(圓形移動)
- 3. 圓形物體檢測
- 4. 圓形物體檢測
- 5. ARC圓形保留檢測
- 6. 圓形重要性測試
- 7. Javascript - 如何獲取矩形,拖動後的圓形座標?
- 8. 如何檢測重疊的圓形並相應地填充顏色?
- 9. WPF:如何繪製一個圓形並拖動它?
- 10. 如何檢查一個圖形是否與另一個圖形重疊?
- 11. 如何獲得圓形和三角形的碰撞檢測
- 12. 防止兩個可拖動的圓圈交叉時重疊
- 13. 圓形動畫
- 14. 圓形動畫
- 15. 通過在圓上拖動點更改圓的形狀
- 16. 如何鏈接並拖動Raphael JS中的2個圓形?
- 17. n折FFT卷積和圓形重疊
- 18. OpenGL的一個圓形波
- 19. 檢測圖像中的圓形圖案
- 20. 檢測圓形觸摸iPhone的SDK
- 21. iOS:帶四個圓形按鈕的動畫圓形
- 22. 防止拖動圓圈重疊
- 23. 圓形可滾動佈局
- 24. 如何使用KineticJS從一個圓圈創建箭頭到另一個圓圈?
- 25. 在圓的邊緣移動的圓形
- 26. 如何創建一個圓形碰撞檢測? C++
- 27. 拖動兩個重疊的形狀
- 28. 檢測向量數組中的圓弧和圓形的範圍
- 29. 使用javascript檢查重疊圓形元素的函數?
- 30. 沿着圓形的Qt動畫橢圓
不知道,但如果你用什麼畢達哥拉斯獲得之間的距離2個圓圈的中心,然後檢查它是否小於兩個圓的半徑? – 2013-03-26 02:32:57