Столкновение между двумя элементами с вращающимися
var keys = new Array();
\t var direction;
\t var direction;
\t var iNr = 0;
\t
\t $(document).ready(function(){
\t \t looper();
\t \t $("#demo1").css("margin-top", 400 + "px");
\t \t $("#demo2").css("margin-left", 380 + "px");
\t \t myFunction();
\t });
\t
\t function myFunction()
\t {
\t \t iNr = iNr + 0.5;
\t \t $("#main").css("transition","all 0.1s");
\t \t $("#main").css("transform","rotate(" + iNr + "deg)");
\t \t
\t \t
\t \t setTimeout(function()
\t \t {
\t \t \t myFunction();
\t \t }, 50);
\t
\t }
\t
\t function looper()
\t { \t
\t \t var p =$("#circle");
\t \t var offset = p.offset();
\t \t var t =$(".red");
\t \t var roffset = t.offset();
\t \t
\t \t var rect1 = {x: offset.left, y: offset.top, width: p.width(), height: p.height()}
\t \t var rect2 = {x: roffset.left, y: roffset.top, width: t.width(), height: t.height()}
\t \t if (rect1.x < rect2.x + rect2.width && rect1.x + rect1.width > rect2.x && rect1.y < rect2.y + rect2.height && rect1.height + rect1.y > rect2.y) {
\t \t \t
\t \t \t console.log("now");
\t \t }
\t \t
\t \t if(direction == "left")
\t \t {
\t \t \t if(offset.left - 50 > 0)
\t \t \t {
\t \t \t \t $("#circle").css("left", ($("#circle").position().left - 2) + "px");
\t \t \t }
\t \t }
\t \t if(direction == "up")
\t \t {
\t \t \t if(offset.top - 50 > 0)
\t \t \t {
\t \t \t \t $("#circle").css("top", ($("#circle").position().top - 2) + "px");
\t \t \t }
\t \t }
\t \t if(direction == "right")
\t \t {
\t \t \t if((offset.left + 50) < $(window).width())
\t \t \t {
\t \t \t \t $("#circle").css("left", ($("#circle").position().left + 2) + "px");
\t \t \t }
\t \t }
\t \t if(direction == "down")
\t \t {
\t \t \t if((offset.top + 50) < $(window).height())
\t \t \t {
\t \t \t \t $("#circle").css("top", ($("#circle").position().top + 2) + "px");
\t \t \t }
\t \t }
\t \t
\t \t
\t \t
\t \t ID=window.setTimeout("looper();", 1);
\t }
\t
\t $(document).keyup(function(event) {
\t \t
\t \t if (event.keyCode == 37)
\t \t {
\t \t \t var index = keys.indexOf("37");
\t \t \t keys.splice(index, 1);
\t \t \t direction = "";
\t \t }
\t \t if (event.keyCode == 38)
\t \t {
\t \t \t var index = keys.indexOf("38");
\t \t \t keys.splice(index, 1);
\t \t \t direction = "";
\t \t }
\t \t if (event.keyCode == 39)
\t \t {
\t \t \t var index = keys.indexOf("39");
\t \t \t keys.splice(index, 1);
\t \t \t direction = "";
\t \t }
\t \t if (event.keyCode == 40)
\t \t {
\t \t \t var index = keys.indexOf("40");
\t \t \t keys.splice(index, 1);
\t \t \t direction = "";
\t \t }
\t });
\t
\t $(document).keydown(function(event) {
\t \t
\t \t if (event.keyCode == 37)
\t \t {
\t \t \t keys.push("37");
\t \t \t direction = "left";
\t \t }
\t \t if (event.keyCode == 38)
\t \t {
\t \t \t keys.push("38");
\t \t \t direction = "up";
\t \t }
\t \t if (event.keyCode == 39)
\t \t {
\t \t \t keys.push("39");
\t \t \t direction = "right";
\t \t }
\t \t if (event.keyCode == 40)
\t \t {
\t \t \t keys.push("40");
\t \t \t direction = "down";
\t \t }
\t });
<!doctype html>
<html lang="en">
\t <head>
\t \t <meta charset="utf-8">
\t \t <title>test</title>
\t \t <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
\t \t
\t </head>
\t
\t
\t <body style="background-color:black; overflow-y:scroll;">
\t
\t \t <div style="width:400px; margin-left:500px; height:400px;" id="main">
\t \t \t <div id="demo1" style="width:400px; height:20px; background-color:red; position:absolute;" class="red test all"></div>
\t \t \t <div id="demo2" style="width:20px; height:400px; background-color:yellow; position:absolute;" class="test all"></div>
\t \t \t <div id="demo3" style="width:400px; height:20px; background-color:blue; position:absolute;" class="test all"></div>
\t \t \t <div id="demo4" style="width:20px; height:400px; background-color:green; position:absolute;" class="test all"></div>
\t \t </div>
\t \t
\t \t <div style="width:25px; height:25px; background-color:white; position:absolute; border-radius:50%;" id="circle"></div>
\t
\t </body>
</html>
Я запрограммированный игру. В этой игре моя функция проверяет, есть ли столкновение между div1 и div2. Или если они перекрываются или так ... как вы хотите записать это. Без вращения все в порядке.
Но теперь у меня есть проблема. Я хочу, чтобы повернуть div2 с transform:rotate(Xdeg);
, но если я делаю это мой расчет для столкновения dosen't работы.
Я использую это:
var rect1 = {x: 5, y: 5, width: 50, height: 50}
var rect2 = {x: 20, y: 10, width: 10, height: 10}
if (rect1.x < rect2.x + rect2.width && rect1.x + rect1.width > rect2.x && rect1.y < rect2.y + rect2.height && rect1.height + rect1.y > rect2.y) {
// collision detected!
}
у вас есть какие-либо идеи, чтобы решить эту проблему?
Спасибо за помощь :-)
FWIW, это, скорее всего, получится у в 10 раз сложнее, чем у вас в настоящее время. Вам нужно будет вычислить (x, y) координаты всех четырех ребер повернутого div, а затем проверить, пересекается ли какой-либо из этих сегментов (или полностью содержится внутри) другого div. – Alnitak
Большое спасибо – WilliWespe
ИМХО, у вас теперь слишком много кода в этом вопросе, так что вы даже менее склонны получить ответ. В любом случае, вероятно, будут решения для общих (без осевой выровненности) тестов пересечения ящиков и ящиков в Интернете. – Alnitak