我目前正在项目中使用这个Matrix脚本,我想要做的是转换字符输出,以便打印出西里尔字符而不是中文字符:
var s = window.screen;
var width = q.width = s.width;
var height = q.height = s.height / 6;
var letters = Array(256).join(1).split('');
var draw = function () {
q.getContext('2d').fillStyle='rgba(0,0,0,.05)';
q.getContext('2d').fillRect(0,0,width,height);
q.getContext('2d').fillStyle="FF0000";
letters.map(function(y_pos, index){
text = String.fromCharCode(3e4+Math.random()*33);
x_pos = index * 10;
q.getContext('2d').fillText(text, x_pos, y_pos);
letters[index] = (y_pos > 768 + Math.random() * 1e4) ? 0 : y_pos + 10;
});
};
setInterval(draw, 33);
从我可以收集的内容中,这两行代码负责将字符打印到屏幕上:
var letters = Array(256).join(1).split('');
text = String.fromCharCode(3e4+Math.random()*33);
然而,这是我卡住的地方,它似乎是从随机数学运算中打印出来的。我不明白改变它的过程,并告诉它打印出西里尔文脚本的unicode范围。
任何帮助都会很棒,希望我已经足够清楚了。
编辑:
我一直在玩它并取得了一些进展。西里尔字母的unicode范围从'0410'到'042F' - 所以我编辑了
text = String.fromCharCode(3e4+Math.random()*33);
并重写为 text = String.fromCharCode(0410,0411,0412,0413,0414);
此代码有效,但它会同时打印所有5个字符,并在此过程中破坏矩阵代码。我需要做的就是让它从定义的范围内打印单个字符,尽管我觉得这个字符目前高于我的理解水平。
答案 0 :(得分:0)
原件返回一个介于30000和30033之间的随机数。您可以用数学代替返回您喜欢的任何字符代码。
" 3E4 +的Math.random()* 33"使用指数(3e4转换为30000)作为基数,然后得到0到33之间的随机数,并将它们加在一起以返回30000到30033之间的字符代码。
String.fromCharCode(3e4 + Math.random()* 33)可以写成
String.fromCharCode(30000 +(Math.random()* 33))
为了清楚起见,但它不需要在乘法周围有括号。
我印象深刻的是String.fromCharCode(0410,0411,0412,0413,0414)打印了所有五个字符,但这正是它被要求做的事情。如果我们传递浮点值并将它们四舍五入,它似乎也不在乎。
例如,如果您希望它返回所有大写字母,您需要传递它的数字(或十六进制值)并让它随机获得一个。对于大写字母A-Z(65 - 90),它需要26个字母中的一个,给我们,
String.fromCharCode(65 + Math.random()* 26)
返回介于65和90之间的数字。乘法具有优先权,因此在添加之前发生。
Cyrillic Basic是1024到1279和256个字符:
String.fromCharCode(1024 + Math.random()* 256)