gpt4 book ai didi

javascript - 如何随机化 javascript Canvas 中的坐标?

转载 作者:行者123 更新时间:2023-12-02 21:45:01 25 4
gpt4 key购买 nike

这里是新手,目前正在学习如何编码。我的老师给了我一个任务,让我在 Canvas 上自己制作一个笑脸来证明自己。 This is the result so far.

现在他给了我随机化坐标的任务,以便笑脸作为一个整体每次都会出现在新的位置(无论是在加载时发生还是通过按钮发生,都是我的决定)。

编辑:澄清一下,我的问题更多地在于改变 Canvas 坐标背后的逻辑。我试图弄清楚如何做到这一点,并且知道我需要 Math.random 来实现这一点。

编辑:澄清一下,我的问题更多地在于背后的逻辑

我的代码:

<body onload="draw();">
<canvas id="canvas" width="150" height="150"></canvas>

<script type="application/javascript">
function draw() {
var canvas = document.getElementById("canvas");
var smiley = canvas.getContext("2d");

//Face shape
smiley.beginPath();
smiley.arc(75, 75, 50, 0, Math.PI * 2, true);

//Right eye
smiley.moveTo(65,55);
smiley.arc(55,55,10,0, Math.PI * 2, true);

//Left eye
smiley.moveTo(105,55);
smiley.arc(95,55,10,0, Math.PI * 2, true);

//Mouth
smiley.moveTo(35,75);
smiley.arc(75, 75, 40, 0, Math.PI, false);
smiley.moveTo(36,81);
smiley.lineTo(114,81);
smiley.stroke();

//Pupils
smiley.beginPath(58,55);
smiley.moveTo(58,55);
smiley.arc(55,55,3,0, Math.PI*2,true);
smiley.moveTo(98,55);
smiley.arc(95,55,3,0, Math.PI*2, true);
smiley.fill()

//Hair
smiley.beginPath(75,25);
smiley.moveTo(75,25);
smiley.lineTo(75,5);
smiley.moveTo(79,5);
smiley.lineTo(78,25);
smiley.moveTo(72,25);
smiley.lineTo(71,5);
smiley.stroke();

//Nose
smiley.beginPath();
smiley.moveTo(73,50);
smiley.lineTo(67,67);
smiley.lineTo(80,70);
smiley.stroke();

smiley.beginPath()
smiley.moveTo(73,50);
smiley.lineTo(63,69);
smiley.lineTo(80,70);
smiley.lineTo(67,67);
smiley.lineTo(73,50);
smiley.fill();
smiley.endPath();
}

</script>
</body>

感谢您的帮助。

最佳答案

您好,您需要使用 Math.random(),它给出 0 到 1 之间的数字。但是您需要 50 到 canvasWidth-50 之间的范围我扩大了 Canvas 宽度以更多地展示随机性

<body onload="draw();">
<canvas id="canvas" width="450px" height="450px"></canvas>

<script type="application/javascript">
function draw() {
var canvas=document.getElementById("canvas");
var x=Math.random()*(canvas.width-100)-25; //smiley's width 100 and your initial value was +75 it needed to be 100/2=50
var y=Math.random()*(canvas.height-100)-25; //smiley's height 100 and your initial value was +75 it needed to be 100/2=50
var canvas = document.getElementById("canvas");
var smiley = canvas.getContext("2d");

//Face shape
smiley.beginPath();
smiley.arc(75+x, 75+y, 50, 0, Math.PI * 2, true);

//Right eye
smiley.moveTo(65+x,55+y);
smiley.arc(55+x,55+y,10,0, Math.PI * 2, true);

//Left eye
smiley.moveTo(105+x,55+y);
smiley.arc(95+x,55+y,10,0, Math.PI * 2, true);

//Mouth
smiley.moveTo(35+x,75+y);
smiley.arc(75+x, 75+y, 40, 0, Math.PI, false);
smiley.moveTo(36+x,81+y);
smiley.lineTo(114+x,81+y);
smiley.stroke();

//Pupils
smiley.beginPath(58+x,55+y);
smiley.moveTo(58+x,55+y);
smiley.arc(55+x,55+y,3,0, Math.PI*2,true);
smiley.moveTo(98+x,55+y);
smiley.arc(95+x,55+y,3,0, Math.PI*2, true);
smiley.fill()

//Hair
smiley.beginPath(75+x,25+y);
smiley.moveTo(75+x,25+y);
smiley.lineTo(75+x,5+y);
smiley.moveTo(79+x,5+y);
smiley.lineTo(78+x,25+y);
smiley.moveTo(72+x,25+y);
smiley.lineTo(71+x,5+y);
smiley.stroke();

//Nose
smiley.beginPath();
smiley.moveTo(73+x,50+y);
smiley.lineTo(67+x,67+y);
smiley.lineTo(80+x,70+y);
smiley.stroke();

smiley.moveTo(73+x,50+y);
smiley.lineTo(63+x,69+y);
smiley.lineTo(80+x,70+y);
smiley.lineTo(67+x,67+y);
smiley.lineTo(73+x,50+y);
smiley.fill();
}

</script>
</body>

关于javascript - 如何随机化 javascript Canvas 中的坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60275995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com