html5游戏闪屏卡顿,HTML5 闪屏的熊猫
JavaScript
语言:
JaveScriptBabelCoffeeScript
确定
const TWO_PI = Math.PI * 2;
// canvas settings
var viewWidth = 512,
viewHeight = 512,
glitchCanvas = document.getElementById("glitch_canvas"),
ctx;
var image,
glitchImageData,
originalImageData,
pixels;
// these control glitching, and are in turn controlled by TweenMax
var gvars = {
waveAmp0:0,
waveFrq0:1,
waveOfs0:0,
waveAmp1:0,
waveFrq1:1,
waveOfs1:0,
pos0:0,
pos1:0,
pos2:0
};
var cosCache0 = [];
var cosCache1 = [];
window.onload = function() {
image = new Image();
image.crossOrigin = 'Anonymous';
image.onload = imageLoaded;
image.src = '/assets/panda.jpg';
function imageLoaded() {
initCanvas();
createImageData();
processImageData();
setupTweens();
requestAnimationFrame(loop);
}
};
function initCanvas() {
glitchCanvas.width = viewWidth;
glitchCanvas.height = viewHeight;
ctx = glitchCanvas.getContext('2d');
}
// draw the image into the canvas and grab the pixel data
// the image is drawn with an offset, because the white border looks kinda nice
function createImageData() {
ctx.fillStyle = '#fff';
ctx.fillRect(0, 0, viewWidth, viewHeight);
ctx.drawImage(image, 32, 32, 448, 448);
originalImageData = ctx.getImageData(0, 0, viewWidth, viewHeight);
glitchImageData = ctx.getImageData(0, 0, viewWidth, viewHeight);
ctx.clearRect(0, 0, viewWidth, viewHeight);
}
// split pixel data (red, green, blue, alpha) into pixels and make a grid
// alpha is ignored because it is always 255
function processImageData() {
var data = originalImageData.data,
pixelCount = data.length / 4,
pixelIndex = 0,
x, y;
pixels = [];
for (var i = 0; i < pixelCount; i++) {
pixelIndex = i * 4;
x = i % viewWidth;
y = Math.floor(i / viewHeight);
if (!pixels[y]) pixels[y] = [];
pixels[y][x] = [
data[pixelIndex + 0], // red
data[pixelIndex + 1], // green
data[pixelIndex + 2] // blue
];
}
}
function setupTweens() {
var tl0 = new TimelineMax({repeat:-1, yoyo:true});
tl0.to(gvars, 0.8, {waveAmp0:64, waveFrq0:16, waveOfs0:16, ease:Back.easeOut, delay:0.5});
var tl1 = new TimelineMax({repeat:-1, yoyo:true});
tl1.to(gvars, 2, {waveAmp1:128, waveFrq1:8, waveOfs1:64, ease:Elastic.easeIn, delay:0.25});
var tl2 = new TimelineMax({repeat:-1, yoyo:true});
tl2.to(gvars, 1, {pos0:256, ease:Bounce.easeInOut, delay:4});
var tl3 = new TimelineMax({repeat:-1, yoyo:true});
tl3.to(gvars, 5, {pos1:128, pos2:512, ease:Cubic.easeInOut, delay:2});
}
function update() {
var data = glitchImageData.data,
row,
pixelIndex = 0;
// fraction of x and y of width and height
var fx, fy;
// red, green and blue channel pixel coordinates
var rx, ry,
gx, gy,
bx, by;
var wave0Sin,
wave1Sin,
wave0Cos,
wave1Cos,
pos0,
pos1,
pos2;
cosCache0.length = 0;
cosCache1.length = 0;
for (var y = 0; y < viewHeight; y++) {
row = pixels[y];
fy = y / viewHeight;
wave0Sin = Math.sin(gvars.waveOfs0 + gvars.waveFrq0 * fy) * gvars.waveAmp0;
wave1Sin = Math.sin(gvars.waveOfs1 + gvars.waveFrq1 * fy) * gvars.waveAmp1;
pos1 = gvars.pos1 * fy;
for (var x = 0; x < viewWidth; x++) {
pixelIndex = (y * viewWidth + x) * 4;
fx = x / viewWidth;
if (cosCache0[x] !== undefined) {
wave0Cos = cosCache0[x];
}
else {
wave0Cos = Math.cos(gvars.waveOfs0 + gvars.waveFrq0 * fx) * gvars.waveAmp0;
cosCache0[x] = wave0Cos;
}
if (cosCache1[x] !== undefined) {
wave1Cos = cosCache1[x];
}
else {
wave1Cos = Math.cos(gvars.waveOfs1 + gvars.waveFrq1 * fx) * gvars.waveAmp1;
cosCache1[x] = wave1Cos;
}
pos0 = gvars.pos0 * fx;
pos2 = gvars.pos2 * fx;
// it really does not matter what you do here, it all looks glitchy :)
// really, just put the operators and vars in any random combination (but be careful you don't divide by 0)
// AND A WHOLE NEW GLITCHY MESS WILL EMERGE!
rx = x + wave1Sin + pos0;
ry = y + wave1Cos - pos2;
gx = x - wave1Cos * pos1;
gy = y - wave0Sin + pos1;
bx = x + wave0Sin + pos0;
by = y - wave0Sin * pos2;
data[pixelIndex + 0] = getChannel(rx, ry, 0);
data[pixelIndex + 1] = getChannel(gx, gy, 1);
data[pixelIndex + 2] = getChannel(bx, by, 2);
}
}
}
function draw() {
ctx.putImageData(glitchImageData, 0, 0);
}
function loop() {
update();
draw();
requestAnimationFrame(loop);
}
function getChannel(x, y, c) {
x = x | 0;
y = y | 0;
x = wrap(x, 0, viewWidth - 1);
y = wrap(y, 0, viewHeight - 1);
return pixels[y][x][c];
}
function wrap(v, min, max) {
return (((v - min) % (max - min)) + (max - min)) % (max - min) + min;
}
html5游戏闪屏卡顿,HTML5 闪屏的熊猫相关推荐
- android 横屏切换竖屏 卡顿,Android横竖屏切换卡顿问题
今天遇到一个android系统在切换横竖屏时一直卡着不动,大概3秒以后才能转过来的问题.最后定位到是由于ScreenRotationAnimation类的构造函数调用了 SurfaceControl. ...
- 苹果手机白屏_安卓卡顿苹果闪退,手机换代的动力原来是这些
一般手机使用大约两年之后,就会明显感觉流畅度大不如从前.这种现象以前在安卓手机上比较常见,但其实是以流畅著称的苹果iPhone用久了也会体验变差,甚至出现了闪退.白屏等现象.想要搞懂其中的原因,我们不 ...
- android 呼入电话游戏闪退,安卓手机游戏卡顿、闪退问题解决方案
安卓手机游戏卡顿.闪退问题解决方案,下面就由去游戏pro小编忆成殇为大家带来安卓手机游戏卡顿.闪退问题解决方案,剑魂之刃闪退.卡顿一直困扰着玩家,那么究竟怎样更好的玩好我们的卡顿及闪退问题呢,下面就随 ...
- cad2014卡顿的解决方法_升级iOS14.1后出现卡顿、闪退?这3种方法可以解决
随着iOS14.1正式版的推出,大家对于该版本有着很高的关注度,毕竟这是iOS14版本第一次正式的小版本更新,同时也将是新机iPhone12系列的预搭载版本. 但是,随着体验了几天的iOS14.1之后 ...
- 游戏更新一直卡在计算机,win10电脑玩战地5游戏一直卡屏卡顿如何解决
许多用户在安装完win10系统之后,想要在电脑中玩战地5游戏,可是却发现一直出现卡屏卡顿的情况,影响了正常游戏,该怎么解决呢,下面为大家分享一下win10电脑玩战地5游戏一直卡屏卡顿的具体解决方法吧. ...
- Office2021与mathtype7.4兼容问题_1_Office2021(尤其是word2021)与mathtype7组合出现点击mathtype选项后word卡顿并闪退解决方法
一.安装原理 由笔者自己遇见如题目所说问题的实践中,总结了Office2021(尤其是word2021)与mathtype7组合原理,或者说word2021选项卡出现mathtype并且可以使用的原理 ...
- 苹果闪退解决方法_升级iOS14.1后出现卡顿、闪退?这3种方法可以解决
随着iOS14.1正式版的推出,大家对于该版本有着很高的关注度,毕竟这是iOS14版本第一次正式的小版本更新,同时也将是新机iPhone12系列的预搭载版本. 但是,随着体验了几天的iOS14.1之后 ...
- 电脑卡顿不流畅是什么原因_什么造成游戏直播画画卡顿、延迟?这三个原因了解一下...
原标题:什么造成游戏直播画画卡顿.延迟?这三个原因了解一下 从事直播的朋友们相信都有所体会,直播时很容易出现画面卡顿.延迟的现象,这究竟是什么原因造成的呢?最可能是这几点! 1.服务器过载崩溃 说起服 ...
- win10蓝屏无法进入系统_Win10 补丁又翻车!蓝屏卡顿崩溃,系统性能“负优化”...
8月23日消息,据外媒体报道,微软日前发布的一批新 Windows 10 补丁出现严重错误,有部分用户在升级后出现了蓝屏 (BlueScreen of Death,BSOD) 错误,电脑运行性能也出现 ...
最新文章
- python: 关于解决‘\u‘开头的字符串转中文的方法
- 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 )
- 【年终总结】2019年有三AI知识星球做了什么,明年又会做什么
- 2018年第九届蓝桥杯C/C++ C组国赛 —— 第二题:最大乘积
- CF1245F Daniel and Spring Cleaning(等会了更新)
- python读取配置文件使用_python 使用 ConfigParser 读取和修改INI配置文件
- 网站二次开发如何防止别人打包源码_企业网站制作前需注意的几个事项
- 读后有感 - UI设计师必知:线框图、原型和视觉稿
- mysql的底层运行原理,【数据库】震惊!!MySQL的底层原理竟然是这样
- 平面设计计算机基本配置,平面设计电脑配置要求
- 将经纬度坐标用线段形式在地图上链接起来
- [日更-2019.5.21] Android 系统的分区和文件系统(一)--Android分区的大概框架
- 等待任务执行完成时,界面上转圈圈,不让用户操作软件
- 解决tar 时间戳XXX是未来的XXX秒之后问题
- append和extend的区别
- 计算机教学训练的有效性,提高对口单招计算机专业技能训练的有效性.doc
- #VCS# 关于Verdi KDB 数据库
- CCF BDCI 剧本角色情感识别:多目标学习开源方案
- 如何正视ISO9001/2000质量管理体系认证?(转载)
- 云计算不需要服务器吗,云计算需要服务器吗
热门文章
- golang web 框架 gin beego iris 对比
- linux 内核 虚拟文件系统VFS 路径查找 path_lookup
- VS编译时output/Error list窗口自动弹出设置
- 关于VS中区分debug与release,32位与64位编译的宏定义
- Linux 用户进程内存空间详解
- linux 64位 shellcode,Linux Shellcode“你好,世界!”
- oracle case grouping,ORACLE GROUPING函數的使用
- kprobes/kretprobes 在 bcc 程序中的使用
- linux发布java网站_Linux下部署java web项目
- excel行转列_excel统计函数:应用广泛的动态统计之王OFFSET(上)