我正在尝试使用 Paper Js 开发一种绘图功能,其中用户实际上用完了“墨水”。

有谁知道如何做到这一点?我已经研究过限制路径长度。但至关重要的是,我的用户不应该被限制在每个笔画的路径长度上,而应该限制在他们所有笔画的总路径长度上。所以想象一下,例如您只有 1 盎司墨水(或例如 10 英寸墨水)可用于整个绘图。

下面是从 Paper js 教程修改而来的,但还没有限制用户拥有的数字墨水量的功能。我是 js 编码的新手,所以任何帮助将不胜感激!

var myPath;

function onMouseDown(event) {
    myPath = new Path();
    myPath.strokeColor = 'black';
}

function onMouseDrag(event) {
    myPath.add(event.point);
}

function onMouseUp(event) {
    var line = new Path({
    });
    line.strokeColor = 'black';
}

最佳答案

这是一个简单的 sketch 演示如何实现这一目标。
希望代码足够清晰,让您能够理解并根据您的特定用例进行调整。

// Cumulated length for all drawn paths over which drawing stops.
const MAX_LENGTH = 1500;

// Stores drawn paths.
let paths = [];
// Stores currently drawing path.
let currentPath;

// On mouse down...
function onMouseDown(event) {
    // ...if drawing is still allowed...
    if (maxLengthIsExceeded()) {
        return;
    }
    // ...create a new path...
    currentPath = new Path({
        segments: [event.point],
        strokeColor: 'black'
    });
    // ...and add it to the stack.
    paths.push(currentPath);
}

// On mouse drag...
function onMouseDrag(event) {
    // ...if drawing is still allowed...
    if (maxLengthIsExceeded()) {
        return;
    }
    // ...continue drawing the current path.
    currentPath.add(event.point);
}

// Checks whether cumulated paths length exceeds the limit.
function maxLengthIsExceeded() {
    const totalLength = paths.reduce((sum, path) => sum += path.length, 0);
    return totalLength > MAX_LENGTH;
}

关于javascript - 论文js限制总路径长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59728133/

10-16 15:30