我试图做到这一点,以便在每个位置都会产生一个鼠标到一个黑圈,但我无法显示它,我知道我正在接收输入,但是我不知道为什么我的东西不正确。出现吗?我缺少某种重绘方法吗?我已经尝试了很多我不太了解requestAnimation
在这里如何工作的事情。
我究竟做错了什么?
import 'dart:html';
import 'dart:async';
import 'package:polymer/polymer.dart';
CanvasElement canvas = document.querySelector('#myPaintCanvas');
CanvasRenderingContext2D context = canvas.getContext('2d');
//circle deminsions
var centerX;
var centerY;
var radius = 15;
var PI = 3.14;
void requestRedraw(){
window.requestAnimationFrame(scribble());
}
void scribble(pointX, pointY){
print("MouseX: " + pointX.toString() + " MouseY: " + pointY.toString());
context.arc(pointX, pointY, radius, 0, 2 * PI, false);
context.fillStyle = 'black';
context.fill();
context.strokeStyle = '#003300';
context.stroke();
}
void main(){
canvas.onMouseDown.listen((onDown){
StreamSubscription mouseMoveStream = canvas.onMouseMove.listen((onData){
scribble(onData.client.x, onData.client.y);
});
//to end my stream when the mouse is up
canvas.onMouseUp.listen((onData) => mouseMoveStream.cancel());
});
}
最佳答案
由于 Canvas 的实际绘图尺寸与其作为DOM元素的尺寸(canvas.width = 500;
和canvas.style.width="500px";
)之间不匹配,您很可能会遇到缩放问题
固定比例+一些其他修正:
import 'dart:html';
import 'dart:async';
CanvasElement canvas = document.querySelector('#myPaintCanvas');
CanvasRenderingContext2D context;
//circle deminsions
var centerX;
var centerY;
var radius = 15;
var PI = 3.14;
void scribble(pointX, pointY) {
print("MouseX: " + pointX.toString() + " MouseY: " + pointY.toString());
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.arc(pointX, pointY, radius, 0, 2 * PI, false);
context.fillStyle = 'black';
context.fill();
context.strokeStyle = '#003300';
context.stroke();
context.closePath();
}
void main() {
canvas.width = 500;
canvas.style.width="500px";
canvas.height = 500;
canvas.style.height="500px";
context = canvas.getContext('2d');
canvas.onMouseDown.listen((onDown) {
StreamSubscription mouseMoveStream = canvas.onMouseMove.listen((onData) {
var rec = canvas.getBoundingClientRect();
scribble(onData.client.x- rec.left, onData.client.y - rec.top);
});
//to end my stream when the mouse is up
document.onMouseUp.listen((onData) => mouseMoveStream.cancel());
});
}
我添加了
context.clearRect
,以使圆圈清晰可见。需要context.beginPath();
和context.closePath();
来防止圆之间的桥梁。当在 Canvas 外释放鼠标按钮时,用document.onMouseUp
而不是canvas.onMouseUp
解决了问题。关于html - Dart ,为什么我的形状不露面?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24318945/