如何为画布“绘制样式”获得平滑的鼠标事件应用程序
How to get smooth mouse events for a canvas "drawing style" app?
我正试图使鼠标在屏幕上流畅地移动绘画风格的应用程序。更具体地说,它是一个"粉末玩具"。这意味着,它一个像素一个像素地画所以我不能做一些线条技巧。我最初想的是检查鼠标上下,然后在游戏"更新"循环中添加一些内容,使其在屏幕上绘制像素,但当我发现我无法在没有事件触发的情况下直接获得鼠标X和鼠标Y时,这就行不通了。
那么,有没有人知道一种平滑鼠标移动的方法,我目前使用的方法是使用mousemove事件,这会导致以下情况:
http://img1.uploadscreenshot.com/images/orig/9/26119184415-orig.jpg(注意像素是如何分散的)
谢谢你,
看起来你在做一个沙子克隆的世界,所以我想你需要rects。我用布里森汉姆的直线算法绘制了这些点。基本上是onmousedown
,它开始绘画。然后onmousemove
将当前坐标与最后一个坐标进行比较,并绘制出两者之间的所有点。
现场演示
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"),
painting = false,
lastX = 0,
lastY = 0;
canvas.width = canvas.height = 600;
ctx.fillRect(0, 0, 600, 600);
canvas.onmousedown = function(e) {
if (!painting) {
painting = true;
} else {
painting = false;
}
ctx.fillStyle = "#ffffff";
lastX = e.pageX - this.offsetLeft;
lastY = e.pageY - this.offsetTop;
};
canvas.onmousemove = function(e) {
if (painting) {
mouseX = e.pageX - this.offsetLeft;
mouseY = e.pageY - this.offsetTop;
// find all points between
var x1 = mouseX,
x2 = lastX,
y1 = mouseY,
y2 = lastY;
var steep = (Math.abs(y2 - y1) > Math.abs(x2 - x1));
if (steep){
var x = x1;
x1 = y1;
y1 = x;
var y = y2;
y2 = x2;
x2 = y;
}
if (x1 > x2) {
var x = x1;
x1 = x2;
x2 = x;
var y = y1;
y1 = y2;
y2 = y;
}
var dx = x2 - x1,
dy = Math.abs(y2 - y1),
error = 0,
de = dy / dx,
yStep = -1,
y = y1;
if (y1 < y2) {
yStep = 1;
}
for (var x = x1; x < x2; x++) {
if (steep) {
ctx.fillRect(y, x, 1, 1);
} else {
ctx.fillRect(x, y, 1, 1);
}
error += de;
if (error >= 0.5) {
y += yStep;
error -= 1.0;
}
}
lastX = mouseX;
lastY = mouseY;
}
}
相关文章:
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- Html页面上的多个Base64图像和平滑加载
- 当鼠标悬停在文本中的单词上时显示警报
- JsFiddle上的鼠标事件不起作用
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- Safari(Mac OS)上的jQuery平滑滚动问题
- 如何在鼠标悬停时在另一个图像上滑动图像.
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- jquery平滑滚动问题
- 将鼠标旋转限制为特定的度数
- 跟踪jqplot垂直折线图的鼠标位置
- Javascript-使用鼠标滚轮进行平滑视差滚动
- 使用鼠标滚轮和滚动条平滑垂直页面滚动
- 将鼠标悬停在具有固定高度的无序列表上时平滑滚动
- 在鼠标滚轮上平滑滚动
- 平滑缩放画布通过按钮而不是鼠标滚轮
- 如何为画布“绘制样式”获得平滑的鼠标事件应用程序
- 平滑鼠标滚轮滚动
- 鼠标滚轮平滑滚动
- 如何在鼠标悬停时平滑地插入框阴影效果