Я пытаюсь создать эффект дождя, используя холст.В коде я добавил комментарии «ТОЧКА 1», «ТОЧКА 2» и «ТОЧКА 3», чтобы помочь вам понять, о какой части я говорю.
- «ТОЧКА 1» создает несколько капель со случайной осью X и осью Y, равной 0.
- «ТОЧКА 3» (закомментированная) создает одну каплю, которая правильноувеличивает ось у, так что капля падает.
Мне нужно, чтобы «ТОЧКА 3» применялась к каждой капле, которая создается в «ТОЧКЕ 1».«ТОЧКА 2» является частью моей попытки сделать это, но вместо этого он создает новую каплю, которая меньше, чем опускает каплю, которая была создана ранее.
Любая помощь очень ценится,
Стив.
Я создал для этого скрипку JS: https://jsfiddle.net/xrainbowuk/qaws59uz/10/
/* ///// ///// ///// ///// */
var canvas = document.querySelector("canvas");
var c = canvas.getContext("2d");
var canvasWidth = window.innerWidth;
var canvasHeight = window.innerHeight;
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
//RAIN DROP CONSTRUCTOR FUNCTION
function Rain(rainDropStandardX, rainDropStandardY, opacity) {
this.rainDropStandardX = rainDropStandardX;
this.rainDropStandardY = rainDropStandardY;
this.opacity = opacity;
var dropTipX = rainDropStandardX + 0;
var dropTipY = rainDropStandardY + 0;
var dropBottomLeftX = rainDropStandardX - 15;
var dropBottomLeftY = rainDropStandardY + 40;
var dropBottomRightX = rainDropStandardX + 15;
var dropBottomRightY = rainDropStandardY + 40;
this.droplet = function() {
c.beginPath();
c.moveTo(dropTipX, dropTipY); // line on the right
c.bezierCurveTo(dropBottomLeftX, dropBottomLeftY, dropBottomRightX, dropBottomRightY, dropTipX, dropTipY);
c.fillStyle = "rgba(43, 173, 255, " + this.opacity + ")";
c.fill();
}
}
/* POINT 1 - This piece of code produces multiple droplets but their "y-axis" value never increases */
var rngPosY = 0;
setInterval(function() {
var rngPosX = Math.random() * canvasWidth;
var rngOpacity = Math.random() * (1 - 0.1) + 0.1;
var rainDrop = new Rain(rngPosX, rngPosY, rngOpacity);
rainDrop.droplet();
//rngPosY += 10; /* POINT 2 - This will make the next droplet lower (increase y-axis). Not lower the individual droplets */
}, 500);
/* POINT 3 - A single droplet is created and then the "y-axis" value increases */
/*
var rngPosY = 0;
var rngPosX = Math.random() * canvasWidth;
var rngOpacity = Math.random() * (1 - 0.1) + 0.1;
setInterval(function() {
c.clearRect(0, 0, canvasWidth, canvasHeight);
var rainDrop = new Rain(rngPosX, rngPosY, rngOpacity);
rainDrop.droplet();
rngPosY += 5;
}, 1);
*/
* {
box-sizing: border-box;
margin: 0px;
padding: 0px;
}
body {
height: 100%;
width: 100%;
}
canvas {
background-color: #000;
}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Canvas Rain</title>
<link href="css/RG5.css" rel="stylesheet" type="text/css">
</head>
<body>
<canvas>
Your browser does not support HTML canvas.
</canvas>
<script src="js/RG5.js"></script>
</body>
</html>