【问题标题】:How can a restart a loop in an animation?如何重新启动动画中的循环?
【发布时间】:2012-03-27 01:49:14
【问题描述】:

我正在尝试构建一个类似太空入侵者的游戏(因为我在 5 天前才开始编写代码),如果鞋子撞到僵尸,僵尸会消失并重新出现在屏幕顶部(再次下来)。我只是似乎无法让僵尸回到顶部(它们保持在动画的最低点)

下面是碰撞测试:

function zombietestCollision(position1, size1, position2, size2) {
if (((position1.left + size1.width)  > position2.left) &&
    ((position1.top  + size1.height) > position2.top)  &&
    ((position2.left + size2.width)  > position1.left) &&
    ((position2.top  + size2.height) > position1.top)) {

        function loop () {
            movedown($zombie);
            moveup($zombie);
        };
        $(function zombieloop() {
            setInterval( loop, 1 );
        });
}
}

我已经在僵尸的向下移动中包含了这个测试

// down movement of the zombies
function movedown($zombie) {      
$zombie.animate({
    'left': 300,
}, {
        duration:5000,
        step:function(){

            $.each($("#zombie"), function(index,zombie) {

                var $zombie = $(zombie);
                var $shoe = $("#shoe");

                var shoeSize = {
                    height: $shoe.height(),
                    width : $shoe.width()
                };

                var zombieSize = {
                    height: $zombie.height(),
                    width : $zombie.width()
                };

                zombietestCollision($shoe.position(), shoeSize, $zombie.position(), zombieSize);


            });
}

当我运行它时,屏幕只是空白。我做对了什么? 如果需要,这里是完整代码:http://jsfiddle.net/JKd9K/7/

抱歉,我对编程完全陌生,所以我很难理解我做错了哪一部分。干杯!

【问题讨论】:

    标签: javascript jquery loops collision-detection


    【解决方案1】:

    您需要小心关闭函数的方式。看看这个http://jsfiddle.net/JKd9K/2/

    你的下移函数应该是这样的

    function movedown($zombie) {
        $zombie.animate({
            'left': 300
        }, {
            duration: 5000,
            step: function() {
                $.each($("#zombie"), function(index, zombie) {
                    var $zombie = $(zombie);
                    var $shoe = $("#shoe");
                    var shoeSize = {
                        height: $shoe.height(),
                        width: $shoe.width()
                    };
                    var zombieSize = {
                        height: $zombie.height(),
                        width: $zombie.width()
                    };
                    zombietestCollision(
                        $shoe.position(),
                        shoeSize,
                        $zombie.position(),
                        zombieSize);
                });
            }
        });
    }
    

    请注意,末尾有一堆额外的大括号。

    【讨论】:

    • 哎呀,是的,我的代码结构非常糟糕。谢谢詹姆斯现在我添加了那些括号,我上面描述的情况仍然是真实的 - “我似乎无法让僵尸回到顶部(它们保持在动画的最低点)”
    • 您的代码中存在一些问题。您正在尝试在不存在的 jQuery 对象上使用转换方法。您包含的过渡插件未被小提琴加载。
    • 哦,是的,我的代码中有它,小提琴是旧版本,这里是更新版本:link
    • 是的,它在您的代码中,但小提琴找不到它,因为它正在这里寻找它:fiddle.jshell.net/JKd9K/4/show/jquery.transit.min.js 并且它不会在那里,因为您无法将其他脚本上传到小提琴(就我知道)。还要记得事先在左侧选择您的框架,因为它也找不到您要包含的 jQuery 版本。
    • 是的,更新了 jsfiddle.net/JKd9K/5 中的框架我刚刚将我的代码复制到 jfiddle 以显示我的代码现在是如何工作的......
    猜你喜欢
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多