Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SVG中绘制运动对象的轨迹_Svg_Line - Fatal编程技术网

如何在SVG中绘制运动对象的轨迹

如何在SVG中绘制运动对象的轨迹,svg,line,Svg,Line,我在SVG中有一个使用键盘移动的对象 var svg = $('svg'); var avatar = svg.find('#avatar'); var left, top, right, bottom; $(document).keydown(function(e) { var svg = avatar[0].ownerSVGElement; var matrix = avatar[0].getCTM(); if (e.which === 37 || left) { /

我在SVG中有一个使用键盘移动的对象

var svg = $('svg');
var avatar = svg.find('#avatar');
var left, top, right, bottom;
$(document).keydown(function(e) {
    var svg = avatar[0].ownerSVGElement;
    var matrix = avatar[0].getCTM();
    if (e.which === 37 || left) { //left
        matrix.translate(-1, 0);
        e.preventDefault();
        left = true;
    }
    if (e.which === 38 || top) { // top
        matrix.translate(0, -1);
        e.preventDefault();
        top = true;
    }
    if (e.which === 39 || right) { // right
        matrix.translate(1, 0);
        e.preventDefault();
        right = true;
    }
    if (e.which === 40 || bottom) { // bottom
        matrix.translate(0, 1);
        e.preventDefault();
        bottom = true;
    }
    avatar.attr('transform', matrix.asString());
}).keyup(function(e) {
    if (e.which === 37) {
        left = false;
    } else if (e.which === 38) {
        top = false;
    } else if (e.which === 39) {
        right = false;
    } else if (e.which === 40) {
        bottom = false;
    }
});

如何在SVG中添加跟踪(显示移动化身路径的线)?当我移动我的化身时,它需要可见。如果它不仅可以是一条线,还可以是一种模式,那就太好了。

我找到了一种方法,我可以在keydown(将其附加到d属性)上放置一条路径并向其添加线,以简化每5步放置一条线的路径

var trace;
(function() {
    var start = $('#start')[0].getBBox();
    var x = start.x+(start.width/2);
    var y = start.y+(start.height/2);
    trace = $('<path/>').attr({
        id: 'trace',
        stroke: '#000',
        fill: 'none',
        d: 'M ' + x + ' ' + y
    }).appendTo(svg);
    // in normal case trace path need to be added before svg is inserted to the DOM
    // in my case I modify jquery library to use document.createElementNS instead of
    // document.createElement
    avatar.setPosition(x, y);
})();

var i = 0;
$(document).keydown(function(e) {

   ...
   if (++i % 5 === 0) {
        var avatar_size = avatar.size(); // size if jquery plugin that return width and height using BBox
        var x = matrix.matrix[0][2];
        var y = matrix.matrix[1][2];
        trace.attr('d', trace.attr('d') + ', ' + x + ' ' + y);
    }
});
var跟踪;
(功能(){
var start=$('#start')[0].getBBox();
var x=start.x+(start.width/2);
变量y=起始点y+(起始点高度/2);
跟踪=$('').attr({
id:'跟踪',
笔划:“#000”,
填写:'无',
d:'M'+x+''+y
}).appendTo(svg);
//在正常情况下,在将svg插入DOM之前需要添加跟踪路径
//在我的例子中,我修改jquery库以使用document.createElements而不是
//document.createElement
化身设置位置(x,y);
})();
var i=0;
$(文档).keydown(函数(e){
...
如果(++i%5===0){
var avatar_size=avatar.size();//使用BBox返回宽度和高度的jquery插件的大小
var x=矩阵。矩阵[0][2];
var y=矩阵。矩阵[1][2];
trace.attr('d',trace.attr('d')+','+x++'+y);
}
});