canvas木材燃烧火苗动画代码

代码语言:html

所属分类:动画

代码描述:canvas木材燃烧火苗动画代码

代码标签: canvas 木材 燃烧 火苗 动画 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>逼真木材燃烧大火</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            overflow: hidden;
        }
        body {
            background: #000;
            width: 100vw;
            height: 100vh;
        }
        canvas {
            display: block;
            position: fixed;
            top: 0;
            left: 0;
        }
        #bgCanvas {
            z-index: 1;
        }
        #fireCanvas {
            z-index: 2;
        }
        #sparkCanvas {
            z-index: 3;
        }
    </style>
</head>
<body>
    <canvas id="bgCanvas"></canvas>
    <canvas id="fireCanvas"></canvas>
    <canvas id="sparkCanvas"></canvas>
    
    <script>
        // 画布设置
        const bgCanvas = document.getElementById('bgCanvas');
        const fireCanvas = document.getElementById('fireCanvas');
        const sparkCanvas = document.getElementById('sparkCanvas');
        const bgCtx = bgCanvas.getContext('2d');
        const fireCtx = fireCanvas.getContext('2d');
        const sparkCtx = sparkCanvas.getContext('2d');
        
        let W, H, centerX, fireBaseY;
        
        function resize() {
            W = window.innerWidth;
            H = window.innerHeight;
            centerX = W / 2;
            fireBaseY = H * 0.78;
            
            [bgCanvas, fireCanvas, sparkCanvas].forEach(c => {
                c.width = W;
                c.height = H;
            });
            initScene();
        }
        
        window.addEventListener('resize', resize);
        
        // 火焰粒子
        class FlameParticle {
            constructor(x, y, size, speedY, life) {
                this.x = x;
                this.y = y;
                this.originX = x;
                this.size = size;
                this.speedY = speedY;
                this.life = life;
                this.maxLife = life;
                this.speedX = (Math.random() - 0.5) * 2;
                this.turbulence = Math.random() * 2;
                this.angle = Math.random() * Math.PI * 2;
          .........完整代码请登录后点击上方下载按钮下载查看

网友评论0