如何将另一个矩阵雨代码动画添加到我的画布动画中?

Posted

技术标签:

【中文标题】如何将另一个矩阵雨代码动画添加到我的画布动画中?【英文标题】:How do I add another Matrix rain code animation to my canvas animation? 【发布时间】:2012-03-04 13:23:57 【问题描述】:

我正在尝试使用画布元素和 javascript 来模拟矩阵代码雨。我可以一次删除一个元素,但不能删除多个。如何滴下多个矩阵雨滴。这是我的代码:

   <html>
    <head>
        <title>Matrix Code Rain</title>
        <style>
            *margin:0; padding:0; 
            bodybackground:black;
        </style>
    </head>
    <body>
        <canvas id="c"></canvas>
        <script type="text/javascript">
            var canvas = document.getElementById("c");
            canvas.width = window.innerWidth;
            canvas.height = window.innerHeight;
            canvas.style.background = "black";
            var c = canvas.getContext("2d");
            var code = ["<html>","<p>","<b>","<strong>","<head>","<body>","<a>","<i>","<div>","<form>","<ol>","<li>","<ul>","<pre>","<nav>","<footer>","<header>","<article>","<section>","<em>","<style>","<title>","<meta>","<br>","<table>"];
            var rain = [ ];
            var max = 10;
            for(var i = 0; i < max; i++)
                var drop =  ;
                drop.code = Math.round(Math.random() * code.length);
                drop.x = Math.random() * canvas.width;
                drop.y = 0;
                drop.size = Math.random() * 40;
                drop.speed = drop.size/4;
                rain.push(drop);
            
            var y = 0;
            c.fillStyle="lime";
            setTimeout(function()
                 c.clearRect(0,0,canvas.width,canvas.height);
                 for(var i = 0; i < max; i++)
                    var drop = rain[i];
                    c.font = drop.size+"pt arial";
                    c.fillText(drop.code,drop.x,drop.y);
                    drop.y += drop.speed;
                    if(drop.y > canvas.height + drop.size)
                        drop.y = 0;
                 
            ,1000/60);
        </script>
    </body>
</html>

【问题讨论】:

对我有用吗?你的意思是你想要很多同时下降? @Alex 不,我一次想要不止一个。像矩阵一样多次下降。 我尝试使用 Simons 解决方案,但我还不够好,无法让它发挥作用。我用 Simon 的想法更新了我的代码,但我做得不对。 【参考方案1】:

制作一堆独立的物体,它们都有自己的单词、位置和速度。

然后将它们全部打印出来并按它们的速度前进。

这是一个干净的例子:

http://jsfiddle.net/U5eFJ/

重要代码:

var code = ["<html>", "<p>", "<b>", "<strong>", "<head>", "<body>", "<a>", "<i>", "<div>", "<form>", "<ol>", "<li>", "<ul>", "<pre>", "<nav>", "<footer>", "<header>", "<article>", "<section>", "<em>", "<style>", "<title>", "<meta>", "<br>", "<table>"];

// make 90 things to fall with a random code element and random starting location
var things = [];
var THINGCOUNT = 90;
for (var i = 0; i < THINGCOUNT; i++) 
    var a = ;
    //randomly pick one tag
    a.code = code[Math.round(Math.random() * code.length)];
    a.x = Math.random()*500; //random X
    a.y = Math.random()*500 -500; // random Y that is above the screen
    a.speed = Math.random()*10;
    things.push(a);


setInterval(function() 
    ctx.clearRect(0,0,500,500);
    for (var i = 0; i < THINGCOUNT; i++) 
        var a = things[i];
        ctx.fillText(a.code, a.x, a.y);
        a.y += a.speed; // fall downwards by the speed amount
        if (a.y > 600) a.y = -50; // if off the screen at bottom put back to top
    
, 90);
​

【讨论】:

不错。它所说的 var a = 是否意味着等于新对象? 抱歉,我是 javascript 新手。当我使用你的代码时,它的效果很棒,但是当我尝试在我的代码中实现你的想法时,它就不起作用了。 我以错误的方式使用 setTimeout。我想使用 setInterval 并使它起作用。有人会推荐使用 setTimeout 还是有区别? 是的,var a = 只是创建了一个空对象。 setInterval 每 X 毫秒发生一次。 setTimeout 仅在 X 毫秒后发生一次 通常你想要 setInterval 因为你想一遍又一遍地做某事,而不仅仅是一次【参考方案2】:

如果您正在运行 Windows 计算机,您可以让 java 脚本打开一个 .bat 文件,上面写着这个。 `@echo 关闭 模式 1000 @颜色 :一种 echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%随机%%随机%%随机% 转到 A'

这可能不是您想要的,但我希望它有所帮助 =) `

【讨论】:

以上是关于如何将另一个矩阵雨代码动画添加到我的画布动画中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将动画 css 添加到我的 wordpress 主题中[重复]

将类似 Office 2013 的动画添加到我的 C# 应用程序

使用 Delphi 的 HTML5 画布动画

如何在 Flutter 中将 Hero 动画添加到我的 ListView?

Konva 画布中的 SVG 动画

如何在画布上为路径设置动画 - android