[英]randomizing html5-canvas elements
Trying to make a scene using HTML5-canvas elements. 尝试使用HTML5画布元素制作场景。
I want to generate 'ice_cell' objects with randomized positions inside the canvas, while also having each element of an 'ice_cell' object have a randomized radius, angles, etc. 我想在画布内生成具有随机位置的“ ice_cell”对象,同时还要使“ ice_cell”对象的每个元素具有随机的半径,角度等。
Here is my (non-working) code: 这是我的(无效)代码:
var can = document.getElementsByTagName('canvas')[0];
if (can.getContext) {
var ctx = can.getContext('2d');
var ice_cell = function () {
var posX = Math.random()*can.width();
var posY = Math.random()*can.height();
$(this).css({
"top": y + "px",
"left": x + "px",
"transform": "translateX(-50%) translateY(-50%)"
});
var radX = [5, 10, 30, 80, 100];
var rand_radX = radX[Math.floor(radX.length *Math.random())];
var radY = [5, 10, 30, 80, 100];
var rand_radY = radY[Math.floor(radY.length *Math.random())];
var rot = [5, 30, 200];
var rand_rot = rot[Math.floor(rot.length * Math.random())];
var start = [0, 2, 5, 10, 50];
var rand_start = start[Math.floor(start.length * Math.random())];
var end = [0, 2, 50, 10, 100];
var rand_end = end[Math.floor(end.length * Math.random())];
var tranz = [1, 3, 4, 5, 7, 10];
var rand_tranz = tranz[Math.floor(tranz.length * Math.random())];
ctx.translate(tranz, 0);
ctx.ellipse(rand_posX, rand_posY, rand_radX, rand_radY, rand_rot * Math.PI/180, rand_start, rand_end * Math.PI);
};
var colorStroke = function (color, width) {
ctx.strokeStyle = color;
ctx.lineWidth = width;
ctx.stroke();
};
var ice = function () {
for(var i = 0; i<20;i++){
colorStroke('cyan', 3);
colorStroke('white', 1);
};
};
};
var degrees = 1;
for(var i = 0; i < 50; i++){
ice();
ctx.rotate(degrees*Math.PI/180);
};
ctx.translate(can.width/2, can.height/2);
Unfortunately my Javascript knowledge is slim to none, so I have been almost guessing what goes where, syntax-wise. 不幸的是,我的Javascript知识简直是薄薄的,所以我几乎一直在猜测语法的去向。
Anyone able to pick out parts that I should just completely re-write? 有人能挑出我应该完全重写的部分吗? Debugging using the console hasn't been getting me very far. 使用控制台进行调试并没有使我走的太远。
Thank you so so much! 非常感谢!
Ellipse is missing from FireFox. FireFox中缺少Ellipse。 Here's a function to make ellipse but I'm not sure how it compares to the official implementation. 这是一个制作椭圆的函数,但是我不确定它与正式实现的比较。 You're also missing the x and y for the css so I commented that out. 您也缺少CSS的x和y,所以我注释掉了。
var can = document.getElementsByTagName('canvas')[0]; if (can.getContext) { var ctx = can.getContext('2d'); function ellipse(x, y, rx, ry, rotate, startAng, endAng) { ctx.save(); var w = rx * 2; var h = ry * 2; ctx.translate(x + w / 2, y + h / 2); ctx.scale(rx, ry); ctx.rotate(rotate); ctx.beginPath(); ctx.arc(0, 0, 1, startAng, endAng, false); ctx.restore(); } var ice_cell = function() { ctx.beginPath(); var rand_posX = Math.random() * can.width; var rand_posY = Math.random() * can.height; /* $(this).css({ "top": y + "px", "left": x + "px", "transform": "translateX(-50%) translateY(-50%)" }); */ var radX = [5, 10, 30, 80, 100]; var rand_radX = radX[Math.floor(radX.length * Math.random())]; var radY = [5, 10, 30, 80, 100]; var rand_radY = radY[Math.floor(radY.length * Math.random())]; var rot = [5, 30, 200]; var rand_rot = rot[Math.floor(rot.length * Math.random())]; var start = [0, 2, 5, 10, 50]; var rand_start = start[Math.floor(start.length * Math.random())]; var end = [0, 2, 50, 10, 100]; var rand_end = end[Math.floor(end.length * Math.random())]; var tranz = [1, 3, 4, 5, 7, 10]; var rand_tranz = tranz[Math.floor(tranz.length * Math.random())]; ctx.translate(tranz, 0); ellipse(rand_posX, rand_posY, rand_radX, rand_radY, rand_rot * Math.PI / 180, rand_start, rand_end * Math.PI); }; var colorStroke = function(color, width) { ctx.strokeStyle = color; ctx.lineWidth = width; ctx.stroke(); }; var ice = function() { for (var i = 0; i < 20; i++) { colorStroke('cyan', 3); colorStroke('white', 1); }; }; }; var degrees = 1; for (var i = 0; i < 50; i++) { ice_cell(); ice(); ctx.rotate(degrees * Math.PI / 180); }; ctx.translate(can.width / 2, can.height / 2);
<canvas></canvas>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.