我正在使用 javascript/jquery 制作游戏,并且正在尝试制作重力效果。我有<div id="block"><img src="block/block1.png"/><div>
并且我希望它不断向下移动,但我也希望它只是坐在其他 div 之上而不是直接穿过它们。到目前为止,我已经尝试过:
var obj = $('#block');
function down()
{
obj.animate({top:'-=20'}, 1000, down);
}
down();
我正在使用 javascript/jquery 制作游戏,并且正在尝试制作重力效果。我有<div id="block"><img src="block/block1.png"/><div>
并且我希望它不断向下移动,但我也希望它只是坐在其他 div 之上而不是直接穿过它们。到目前为止,我已经尝试过:
var obj = $('#block');
function down()
{
obj.animate({top:'-=20'}, 1000, down);
}
down();
这(小提琴)并不优雅,可以改进很多,但它有效。它使用一个非常简单的碰撞模型和一个间隔计时器。您将需要调整一些部分(并且您希望改进它)。
HTML:
<div class="gravity" style="width: 90px; height: 15px; background-color: red; position: absolute; top: 10px; left: 20px;"></div>
<div class="gravity" style="width: 90px; height: 25px; background-color: green; position: absolute; top: 60px; left: 30px;"></div>
<div class="gravity" style="width: 90px; height: 25px; background-color: gray; position: absolute; top: 30px; right: 45px;"></div>
<div class="obstacle" style="width: 230px; height: 40px; background-color: blue; position: absolute; top: 240px; right: 19px;"></div>
<div class="obstacle" style="width: 180px; height: 40px; background-color: blue; position: absolute; top: 90px; left: 30px;"></div>
JavaScript:
(function() {
// All falling objects
var gravity = $('.gravity'),
// All static objects
obstacle = $('.obstacle');
var all = gravity.add(obstacle);
setInterval(function() {
// Calculate positions of all falling objects
gravity.each(function() {
var e = this,
g = $(this),
ypos = g.offset().top,
xpos = g.offset().left,
h = g.height(),
w = g.width();
// Check whether something is in our way
var conflicts = false;
all.each(function() {
if(this === e) return;
var a = $(this);
if(xpos < a.offset().left + a.width() && xpos + w > a.offset().left) {
if(ypos + h > a.offset().top && ypos + h < a.offset().top + a.height()) {
conflicts = true;
}
}
});
if(!conflicts) {
// Move down (real gravitation would be v = a * t)
g.css('top', g.offset().top + 3);
}
});
}, 50);
})();
为了防止负面评论和类似的东西:是的,你应该在文档加载后调用它。是的,这段代码很脏,不应该在生产环境中使用。这正是它所声称的 - 一个工作示例。