- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个简单的 Canvas 绘图应用程序。 有时 lineTo() 命令会生成一条坐标较少的线,并且绘图有很多边:
我正在使用最新的 firefox,是因为连接不好还是我的电脑很忙?有解决办法吗?这是我的代码:JS FIDDLE
beginPath();
moveTo(this.X, this.Y);
lineTo(e.pageX , e.pageY );
strokeStyle = "rgb(0,0,0)";
ctx.lineWidth=3;
stroke();
最佳答案
它正在尽可能快地响应。您的浏览器将尽可能快地传递事件,但不能以任何方式保证能够跟踪您移动鼠标。很大程度上与客户端计算机上的负载有关。
编辑 — here is a modified fiddle展示一些你可以让它变得更好的方法。该版本保留一个单独的“点”队列,每 50 毫秒绘制一次新点。这使得“mousemove”处理程序只需记录事件中的点坐标,当鼠标快速移动时,绘图代码可以通过一个 Canvas 更新来完成一堆点。它仍然不完美。
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var width = window.innerWidth;
var height = window.innerHeight;
canvas.height = height;
canvas.width = width;
canvas.addEventListener('mousedown', function(e) {
this.down = true;
points.setStart(e.pageX, e.pageY);
}, 0);
canvas.addEventListener('mouseup', function() {
this.down = false;
}, 0);
canvas.addEventListener('mousemove', function(e) {
if (this.down) {
points.newPoint(e.pageX, e.pageY);
}
}, 0);
var points = function() {
var queue = [], qi = 0;
var ctx = canvas.getContext('2d');
function clear() {
queue = [];
qi = 0;
}
function setStart(x, y) {
clear();
newPoint(x, y);
}
function newPoint(x, y) {
queue.push([x, y]);
}
function tick() {
var k = 20; // adjust to limit points drawn per cycle
if (queue.length - qi > 1) {
ctx.beginPath();
if (qi === 0)
ctx.moveTo(queue[0][0], queue[0][1]);
else
ctx.moveTo(queue[qi - 1][0], queue[qi - 1][1]);
for (++qi; --k >= 0 && qi < queue.length; ++qi) {
ctx.lineTo(queue[qi][0], queue[qi][1]);
}
ctx.strokeStyle = "rgb(0,0,0)";
ctx.lineWidth = 3;
ctx.stroke();
}
}
setInterval(tick, 50); // adjust cycle time
return {
setStart: setStart,
newPoint: newPoint
};
}();
关于javascript - Canvas - 有时使用 lineTo() 的笔画会产生边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17281889/
我试图根据点'数组中的坐标绘制线条,但当我调用此方法时,它在线条中显示以下错误。当我写例如console.log(points[1][1]) 它向我显示了该元素。有人能指出我在这里想念的东西吗? "U
你好我想用java画线,刷新率为60fps: import javafx.application.Application; import javafx.stage.Stage; import java
我有一个来自Inkscape,Illustrator或任何其他应用程序的SVG文件。我想将形状转换为lineto,moveto,curveto格式。 我想要的是这样的: ./Appname svgfi
我目前正在 Android Studio 上学习 Canvas,我不太确定使用正确的标题,但我一直在研究如何在使用 Seekbar 拖动红点时控制三角形位置。以下是详细信息 下面是我成功绘制三角形的代
我需要随机化形状的坐标。我知道我需要以某种方式介绍 Math.floor(Math.Random * num);在那里排队,但我所做的一切似乎都不起作用。 这是我要随机化的填充了坐标的 block 。
我刚刚开始学习 C++。我想要做的就是画一条线到指定的坐标,它作为方法的输入。我使用 MoveToEx 在每个循环中设置起点(在循环中使用不同的参数调用此函数)并给出我想要绘制车道的坐标。 关于如何使
有人可以帮助我了解 path.lineTo(x,y) 的实际工作原理吗?我正在尝试在手指画类型的应用程序中绘制一条简单的直线。这是我试过的一个例子: mPath.reset()
我正在尝试使用两个for循环绘制网格,一个用于绘制10条垂直线,另一个用于绘制10条水平线。像这样: for(var i=1;i 这确实很奇怪。我测试了你在这里写的所有内容,结果是一样的。现在我拼命打
我是 JavaScript 新手! 如何将变量分配给当前的 xy 坐标,以便我可以使用相对位置来绘制线条?尝试用键盘进行 eclipse 刻草图。上、下、左、右箭头键...使用 JS、CSS 和 HT
假设我有以下 JavaScript 代码: var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext(
function TrackGraphic(model, canvas) { //TrackModel this._model = model; this.draw = fun
这种情况不好解释,我用一张图来说明: 创建的第一个形状内的像素变亮。用黑色清除屏幕,绘制红色和绿色框,然后绘制路径。到目前为止,我发现的唯一修复方法是将框的线宽设置为 2 像素,原因已概述 here
有没有办法为 TCanvas.LineTo 方法设置 lineends 的样式?它似乎默认为圆角末端,当 Pen.Width 设置为较大值(例如 9)时,对于不同颜色的一行中的多条线来说,这看起来非常
我尝试使用 HTML5 Canvas 制作动画,在其中绘制 3 个片段的位置,每个片段用一个圆圈连接起来。 每个圆的位置由 (x1,y1)、(x2,y2) 和 (x3,y3) 确定。 这是我的代码片段
我正在一个单独的项目中,试图从炮塔到敌人画一条线。但是我希望这条线保持在炮塔边界之内,而不是一直延伸到敌人。我在下面的代码段中找到了一个较小的示例。 请彻底回答,因为我绝对不是专家。非常感谢!谢谢。
我一直在查看 Emanuele Feronato 的字符串避免器代码(下面的代码和链接)并尝试对其进行调整,以便当字符串与自身相交时 - 形成一个闭环 - 它只填充该区域 see image .我的数
我目前正在尝试在我的 Canvas speechbubble 元素下绘制一个箭头。 我的问题: 箭头的右侧似乎比左侧长得多。 我尝试了什么: 我尝试通过以下方式创建箭头: ctx.moveTo(x,
我创建了一个扩展 Shape 的类,以便为我的按钮背景绘制自定义形状(带切角的矩形)。我遇到的问题是画成对角线的线看起来比直线粗得多: 如何使边框始终保持一致的宽度?我尝试将抗锯齿设置为 true/f
主题说明了一切:您可以将负数传递给 HMTL5 Canvas 中的绘图基元吗? 例如,如果我转换为 (100,100),我可以使用坐标 (-25,-25) 绘制一个矩形或直线吗?使用 lineTo 进
我有一个简单的 Canvas 绘图应用程序。 有时 lineTo() 命令会生成一条坐标较少的线,并且绘图有很多边: 我正在使用最新的 firefox,是因为连接不好还是我的电脑很忙?有解决办法吗?这
我是一名优秀的程序员,十分优秀!