gpt4 book ai didi

javascript - 如何制作滚动星空

转载 作者:行者123 更新时间:2023-11-28 15:46:41 25 4
gpt4 key购买 nike

我想编写一个简单的从右到左滚动starfield。我随机打印出了星星。现在,我如何瞄准每颗星星并随机给它一个速度(比如 1-10)并开始移动它?我还需要在每颗星星到达左边缘后将其放回右边缘。

以下是我迄今为止编写的代码:

<!DOCTYPE html>
<html>
<head>
<script>


function stars()
{
canvas = document.getElementById("can");

if(canvas.getContext)
{
ctx = canvas.getContext("2d");
ctx.fillStyle = "black";
ctx.rect (0, 0, 400, 400);
ctx.fill();
starfield();
}
}
//print random stars
function starfield()
{
for (i=0; i<10; i++)
{
var x = Math.floor(Math.random()*399);
var y = Math.floor(Math.random()*399);
var tempx = x;
ctx.fillStyle = "white";
ctx.beginPath();
ctx.arc(x, y, 3, 0, Math.PI*2, true);
ctx.closePath();
ctx.fill();
}
}

</script>

</head>
<body onload="stars()">
<h1>Stars</h1>
<canvas id="can" width="400" height="400"style="border:2px solid #000100" ></canvas>
</body >
</html>

最佳答案

这是一个quick demo在 Codepen 上。将星星保存在数组中后,我使用 requestAnimationFrame 运行绘图代码并更新每一帧的位置。

function stars() {
canvas = document.getElementById("can");
console.log(canvas);
if (canvas.getContext) {
ctx = canvas.getContext("2d");
ctx.fillStyle = "black";
ctx.rect(0, 0, 400, 400);
ctx.fill();
starfield();
}
}
// Create random stars with random velocity.
var starList = []
function starfield() {
for (i = 0; i < 20; i++) {
var star = {
x: Math.floor(Math.random() * 399),
y: Math.floor(Math.random() * 399),
vx: Math.ceil(Math.random() * 10)
};
starList.push(star);
}
}

function run() {
// Register for the next frame
window.requestAnimationFrame(run);

// Reset the canvas
ctx.fillStyle = "black";
ctx.rect(0, 0, 400, 400);
ctx.fill();

// Update position and draw each star.
var star;
for(var i=0, j=starList.length; i<j; i++) {
star = starList[i];
star.x = (star.x - star.vx + 400) % 400;
ctx.fillStyle = "white";
ctx.beginPath();
ctx.arc(star.x, star.y, 3, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();
}
}

stars();
run();

关于javascript - 如何制作滚动星空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22009887/

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