【问题标题】:paper.js Racing Trackpaper.js 赛道
【发布时间】:2016-12-21 15:36:57
【问题描述】:

我想为我的赛车模拟制作图形输出,所以我找到了 paper.js。

使用此代码,我可以在特定路线上绘制每辆车。但我不知道如何改变每一轮的速度:speed_car1、speed_car2、speed_car3。所以我想改变每一轮每辆车的速度。

这是我的example

var car1 = new Shape.Rectangle({
    from: [0, 0],
    to: [10, 5],
    fillColor: 'red'
});

var car2 = new Shape.Rectangle({
    from: [0, 0],
    to: [10, 5],
    fillColor: 'blue'
});

var car3 = new Shape.Rectangle({
    from: [0, 0],
    to: [10, 5],
    fillColor: 'yellow'
});

var speed_car1 = 1.0;
var speed_car2 = 1.2;
var speed_car3 = 1.5;

var diagonal = new Point(view.size).length;

var path = new Path();
path.strokeColor = 'black';
path.add(new Point(60, 130));
path.add(new Point(100, 100));
path.add(new Point(200, 50));
path.add(new Point(280, 60));
path.add(new Point(340, 70));
path.add(new Point(500, 250));
path.add(new Point(470, 320));
path.add(new Point(100, 320));
path.add(new Point(60, 130));
path.smooth();

car1.onFrame = function(event) {
    var offset = event.count * speed_car1;
    var loc = path.getLocationAt(offset % path.length);
    if (loc) {
        this.position = loc.point;
        this.rotation = loc.tangent.angle;
    }
}
car2.onFrame = function(event) {
    var offset = event.count * speed_car2;
    var loc = path.getLocationAt(offset % path.length);
    if (loc) {
        this.position = loc.point;
        this.rotation = loc.tangent.angle;
    }
}
car3.onFrame = function(event) {
    var offset = event.count * speed_car3;
    var loc = path.getLocationAt(offset % path.length);
    if (loc) {
        this.position = loc.point;
        this.rotation = loc.tangent.angle;
    }
}

【问题讨论】:

    标签: javascript html path racing


    【解决方案1】:

    您可以使用与您用来确定位置的计算类似的计算:

    var car1 = new Shape.Rectangle({
        from: [0, 0],
        to: [10, 5],
        fillColor: 'red'
    });
    
    var car2 = new Shape.Rectangle({
        from: [0, 0],
        to: [10, 5],
        fillColor: 'blue'
    });
     
    var car3 = new Shape.Rectangle({
        from: [0, 0],
        to: [10, 5],
        fillColor: 'yellow'
    });
    
    var speed_car1 = 1.0;
    var speed_car2 = 1.2;
    var speed_car3 = 1.5;
    
    var diagonal = new Point(view.size).length;
    
    var path = new Path();
    path.strokeColor = 'black';
    path.add(new Point(60, 130));
    path.add(new Point(100, 100));
    path.add(new Point(200, 50));
    path.add(new Point(280, 60));
    path.add(new Point(340, 70));
    path.add(new Point(500, 250));
    path.add(new Point(470, 320));
    path.add(new Point(100, 320));
    path.add(new Point(60, 130));
    path.smooth();
    
    car1.onFrame = function(event) {
        var offset = event.count * speed_car1;
        var loc = path.getLocationAt(offset % path.length);
        if (loc) {
            this.position = loc.point;
            this.rotation = loc.tangent.angle;
        }
    }
    car2.onFrame = function(event) {
        var offset = event.count * speed_car2;
        var loc = path.getLocationAt(offset % path.length);
        if (loc) {
            this.position = loc.point;
            this.rotation = loc.tangent.angle;
        }
    }
    car3.onFrame = function(event) {
        var offset = event.count * speed_car3;
        var loc = path.getLocationAt(offset % path.length);
        if (loc) {
            this.position = loc.point;
            this.rotation = loc.tangent.angle;
        }
        // compare offset with some epsilon
        if ((offset % path.length) < 1) {
          // adjust speed
          speed_car3 = speed_car3 *2 };
    }

    【讨论】:

    • 非常感谢,但我有一个问题。如果我使用数组,则会出现错误。有时汽车会稍微向后退。在这个例子中,赛车在第 3 圈略微后退:goo.gl/Q0ED6Y(短链接,因为我无法在 cmets 中写出完整链接:()
    • 好的,我找到了我的问题;)(event.count 是问题所在。我为此创建了一个新变量。每个onFrame 我都添加+1,如果汽车通过起步,那么我将其设置为0. 所以问题就解决了。非常感谢您的帮助;)
    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2020-09-29
    • 2021-05-25
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 2015-01-01
    相关资源
    最近更新 更多