这是代码的html部分:
<div class="snake">
<div class="body"></div>
</div>
下面的函数采用最后一个块,将其删除并创建另一个块以将其置于顶部。
//The snake turns right
var turnRight = function() {
blocks_moved++;
$('.snake').children().last().remove();
$('<div></div>').addClass('body').prependTo('.snake').css('top', 0 + '%').css('left', xPos * blocks_moved * 1.2 + '%');
$('.snake').children().removeClass('head');
$('.snake').children().first().addClass('head');
...more code
使用下面的代码,我试图将蛇位置eqal设置为头部的位置,这样每当一个新的块成为头部时,蛇就会移动一个块。
//Set the snake position equal to head's position
var headPos = $('.snake').children().first().position();
$('.snake').position(headPos);
if (blocks_moved === length) {
blocks_moved === 0;
}
}
当我调用函数turnRight();
时,头部和身体会移动,但蛇会保持原位。我也试过.css()
方法,但我没有成功。还有其他方法吗?
我用.offset()和定位解决了这个问题。这是一个实例:https://jsfiddle.net/dusth7gc/3/
答案 0 :(得分:0)
使用.offset()和定位解决了这个问题。
var turnRight = function() {
$('.body').css('background-color', 'gray');
headPos_x = ($('.head').offset().left / $(window).width() * 100);
headPos_y = ($('.head').offset().top / $(window).height() * 100);
$('<div></div>').addClass('body').prependTo('.snake').css('top', headPos_y + '%').css('left', headPos_x + helper_width * 1.2 + '%');
$('.snake').children().last().remove();
$('.snake').children().removeClass('head');
$('.snake').children().first().addClass('head');
$('.helper').css('top', $('.head').offset().top + 'px').css('left',$('.head').offset().left + 'px');
if(collision($('.helper'), $('.meal')) === true) {
$('.meal').remove();
$('<div></div>').addClass('body').css('background-color', 'transparent').appendTo('.snake');
foodCreate();
}
}
以下是一个实例:https://jsfiddle.net/dusth7gc/3/。