欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

HTML5原地的魚代碼canvas

阮建安2年前9瀏覽0評論

HTML5中的canvas是一個非常強大的元素,能夠讓我們在網頁中實現各式各樣的動態效果。其中經典的一個案例就是原地的魚代碼,極其逼真地模擬了魚兒在水中的游動狀態。以下是這段代碼:

var canvas = document.getElementById('canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var context = canvas.getContext('2d');
var fishes = [];
function Fish(x, y, scale, angle, speed, color) {
this.x = x;
this.y = y;
this.scale = scale;
this.angle = angle;
this.speed = speed;
this.color = color;
}
Fish.prototype.draw = function() {
context.save();
context.translate(this.x, this.y);
context.rotate(this.angle);
context.scale(this.scale, this.scale);
context.fillStyle = this.color;
context.beginPath();
context.moveTo(0, 0);
context.quadraticCurveTo(30, -15, 60, 0);
context.quadraticCurveTo(30, 15, 0, 0);
context.closePath();
context.fill();
context.restore();
}
Fish.prototype.update = function() {
this.x += Math.cos(this.angle) * this.speed;
this.y += Math.sin(this.angle) * this.speed;
if (this.x >canvas.width + 100) {
this.x = -100;
}
if (this.y >canvas.height + 100) {
this.y = -100;
}
if (this.x< -100) {
this.x = canvas.width + 100;
}
if (this.y< -100) {
this.y = canvas.height + 100;
}
this.angle += (Math.random() - 0.5) / 6;
}
for (var i = 0; i< 50; i++) {
var x = Math.random() * canvas.width;
var y = Math.random() * canvas.height;
var scale = Math.random() + 0.5;
var angle = Math.random() * 2 * Math.PI;
var speed = 1 + Math.random() * 2;
var color = 'hsl(' + Math.random() * 360 + ',50%,50%)';
var fish = new Fish(x, y, scale, angle, speed, color);
fishes.push(fish);
}
function draw() {
context.clearRect(0, 0, canvas.width, canvas.height);
for (var i = 0; i< fishes.length; i++) {
fishes[i].update();
fishes[i].draw();
}
requestAnimationFrame(draw);
}
draw();

這段代碼中,我們首先創建了一個畫布元素,并設置了它的寬高和2d繪圖上下文。然后我們定義了一個魚類,包含位置、大小、方向、速度和顏色等屬性,并提供了繪制和更新方法。接著我們利用循環創建50條隨機位置、隨機顏色、隨機速度和隨機大小的魚,并將它們存入一個數組中。最后我們使用 requestAnimationFrame() 方法實現了動態的魚群效果。

需要注意的是,這段代碼使用了一些高級的數學計算和2d繪圖操作,以及 requestAnimationFrame() 方法來實現流暢的動畫效果。學習和理解它可以為我們今后的Web開發工作帶來很大的幫助。