【问题标题】:Why won't my sprite/entity move in a straight line?为什么我的精灵/实体不会直线移动?
【发布时间】:2013-01-31 03:38:45
【问题描述】:

我的实体应该朝着鼠标直线移动。它很接近,但还没有完全到那里。这是working demo 向您展示我的意思。

这是一个屏幕截图: 红色代表鼠标经过的路径。如您所见,实体没有走相同的路径。

相关代码:

EntityPlayer = ig.Entity.extend({

    movementspeed: 400,

    update: function() {
        this.parent();
        this.move_toward_coord(ig.input.mouse.x, ig.input.mouse.y);
    },

    move_toward_coord: function(x, y) {
        var distance_to_target_x = x - this.pos.x - this.size.x / 2;
        var distance_to_target_y = y - this.pos.y - this.size.y / 2;
        if(Math.abs(distance_to_target_x) > 1 || Math.abs(distance_to_target_y) > 1) {
            this.vel.x = (distance_to_target_x > 1 ? 1 : -1) * this.movementspeed * (Math.abs(distance_to_target_x) / (Math.abs(distance_to_target_x) + Math.abs(distance_to_target_y)));
            this.vel.y = (distance_to_target_y > 1 ? 1 : -1) * this.movementspeed * (Math.abs(distance_to_target_y) / (Math.abs(distance_to_target_x) + Math.abs(distance_to_target_y)));
        } else {
            this.vel.y = 0;
            this.vel.x = 0;
        }
    }

});

我怀疑move_to_coord 方法有问题,但是在调整了太多小时后,我仍然不确定它是什么......

为什么船不是直线行驶?

【问题讨论】:

    标签: javascript math geometry game-engine impactjs


    【解决方案1】:

    啊!!我在发布这篇文章后几秒钟就明白了。对不起这是我的错。这是因为一个名为maxVel 的属性限制了xy 速度的速度,有时比另一个更大。 >.

    【讨论】:

    • 一张漂亮的图,一些简洁的代码,还有一个解决方案!赢赢。 +1 +1 感谢分享。
    • 确实,你可以把它变成一个教程,教你如何让你的宇宙飞船做漂亮的弯曲路径......
    • @PhilH 我同意。你得到的行为比期望的行为有趣得多! :)
    • @CamFred 很有趣,是的。但它是不可预测的。如果实体被“设置”为以每秒 400 像素的速度移动,那么他实际上不会以该速度移动。稍后,将有“路径弯曲”以使转弯看起来更逼真,但现在它以正确的速度行驶很好。 =)
    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2015-05-07
    相关资源
    最近更新 更多