导言

最近发掘了一个特别happy的网页小游戏--MikuTap。打开之后沉迷了一下午,导致开发工作没做完差点就要删库跑路了,还好boss瞥了我一眼就没下文了。于是第二天我就继续沉迷,随着一阵抽搐,这个游戏索然无味之后,冷静的我决定用canvas和web audio开发出一个低配版MikuTap。


先放上游戏的原链接: https://aidn.jp/mikutap/
再放上我的高仿低配链接: http://weapp.zzuzsj.cn/zmiku
恬不知耻地再git库链接: https://github.com/zzuzsj/Zsa...

在用canvas和web audio实现的基础上学习了一下webpack的配置,算是搭建了一个比较简易的webpack项目。webpack入门者可以大概了解一下

模块分析


简易说一下我的代码模块

  • main.js 实现页面中的主题逻辑和事件逻辑,代码比较混乱,没有用类的概念管理,但是我比较懒,以后再说嘻嘻嘻
  • audio.js 对应的是页面中音乐播放模块,通过web audio实现。音乐资源来自原网页的json数据,是base64格式的,可以先将base64转为arraybuffer然后再利用audioContext的decodeAudioData将arraybuffer数据转为buffer数据然后播放。值得注意的是:一个context.source只能播放一个音源,如果想播放不同音源需要创建不同的context.source
  • back.js 我把mikutap的渲染部分分为back和cont,back负责渲染画面的背景切换,cont负责交互时的渲染花样
  • shapes.js 最初级的几何体概念,比如线、圆、方形,提供最基础的计算和渲染api
  • shape.js 由不同的shapes组成,不同数量的初级几何体通过一定的动效组成可以成为一种shape。可根据自己的想法不断扩充,暂时只有八种
  • cont.js 负责管理并渲染不同种类的shape,通过addShape增加页面内容中的渲染样式,达到实时交互的效果
  • res.js 是页面中的背景音乐和交互音乐的音源,为base64格式

主体内容由这些类组成,进行一定的管理即可实现效果。

后续想法


不得不吐槽一下的是,canvas和webgl的性能还是有一定差距的。我的低配版mikutap在交互操作比较高的情况下,还是比较卡的,没有原网页的流畅性,可能后续考虑webgl版本实现。
web audio api是一个很牛逼的东西,我只是初步实现了多个音源的播放,但是在节奏感这方面还有很大的改善,需要深入学习(坑也不少。。)。
对应自己写的shape和shapes模块觉得还可以,只要有想法,就可以进行后续花式的扩充,说不定哪天就实现32种样式了,想想还有点小激动呢~


今天的分享到这里就结束啦~
如果觉得我的代码可能对大家有帮助~欢迎大家star~~
有疑问的可以留评论问我

本文转载于:猿2048→https://www.mk2048.com/blog/blog.php?id=h0jchab1h1j

基于canvas和web audio实现低配版MikuTap的更多相关文章

  1. 基于canvas和Web Audio的音频播放器

    wavesurfer.js是一款基于HTML5 canvas和Web Audio的音频播放器插件.通过wavesurfer.js你能够使用它来制作各种HTML5音频播放器,它能够在各种支持 Web A ...

  2. 【Node/JavaScript】论一个低配版Web实时通信库是如何实现的( WebSocket篇)

    引论 simple-socket是我写的一个"低配版"的Web实时通信工具(相对于Socket.io),在参考了相关源码和资料的基础上,实现了前后端实时互通的基本功能 选用了Web ...

  3. 【JavaScript】论一个低配版Web实时通信库是如何实现的之二( EventSource篇)

    前情提要 「 话说上回说到!那WebSocket大侠,巧借http之内力,破了敌阵的双工鸳鸯锁,终于突出重围. 然而玄难未了,此时web森林中飞出一只银头红缨枪,划破夜色. "莫非!?&qu ...

  4. Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD

    随着项目的不断增多,最开始单体项目手动执行 docker build 命令,手动发布项目就不再适用了.一两个项目可能还吃得消,10 多个项目每天让你构建一次还是够呛.即便你的项目少,每次花费在发布上面 ...

  5. 【Java】利用注解和反射实现一个"低配版"的依赖注入

    在Spring中,我们可以通过 @Autowired注解的方式为一个方法中注入参数,那么这种方法背后到底发生了什么呢,这篇文章将讲述如何用Java的注解和反射实现一个“低配版”的依赖注入. 下面是我们 ...

  6. 搭建react项目(低配版)

    react项目低配版,可作为react相关测试的基础环境,方便快速进行测试. git clone git@github.com:whosMeya/simple-react-app.git git ch ...

  7. java线程学习第一天__低配版的卖面包机

    package Thread;import javax.xml.bind.ValidationEvent;class snacks{    private int  SaledSnacks=0;   ...

  8. unittest框架(惨不忍睹低配版)

    根据我上个随笔的unittest框架优化得来,虽然对于smtp模块还是有点迷糊,不过还是勉强搭建运行成功了,还是先上代码: #login_test.py import requests class L ...

  9. Java低配版简单的随机点名系统

    import java.util.*; public class Dome{ public static void addSname(String[] students){ Scanner sc = ...

随机推荐

  1. Matplotlib:Python三维绘图

    1.创建三维坐标轴对象Axes3D 创建Axes3D主要有两种方式,一种是利用关键字projection='3d'来实现,另一种是通过从mpl_toolkits.mplot3d导入对象Axes3D来实 ...

  2. Spring入门笔记简要

    总览:https://www.processon.com/view/link/605b14ab5653bb2225e6b0c5 一.Spring 1.概述 1.spring框架简介 ​ 为简化企业级开 ...

  3. 面试官:Redis中哈希数据类型的内部实现方式是什么?

    面试官:Redis中基本的数据类型有哪些? 我:Redis的基本数据类型有:字符串(string).哈希(hash).列表(list).集合(set).有序集合(zset). 面试官:哈希数据类型的内 ...

  4. 矩池云上如何快速安装nvcc

    若您想要使用 nvcc,但是所选的镜像中没有预装 nvcc,可按照如下操作自行安装. 1.检查系统版本 source /etc/os-release && echo $VERSION_ ...

  5. java下载镜像

    镜像地址 https://repo.huaweicloud.com/java/jdk/ 如果你不知道选择哪个版本就点击下面这个链接吧 https://repo.huaweicloud.com/java ...

  6. tensorflow源码解析之framework-function

    目录 什么是function FunctionDef 函数相关类 关系图 涉及的文件 迭代记录 1. 什么是function 在讲解function的概念之前,我们要先回顾下op.op是规定了输入和输 ...

  7. MySQL主从复制介绍:使用场景、原理和实践

    MySQL主从复制介绍:使用场景.原理和实践 MySQL数据库的主从复制方案,和使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过MySQL的主从复制是其自带的功能,无需借 ...

  8. golang 中 channel 的详细使用、使用注意事项及死锁分析

    目录 1.什么是 channel,介绍管道 2.channel 的基本使用 3.channel 的使用场景 4.使用 channel的注意事项及死锁分析 什么是 channel 管道 它是一个数据管道 ...

  9. CF917D题解

    题目大意 一张有 \(n\) 个节点的完全图,再给出这张图的一棵生成树,问该图有多少颗生成树和这颗生成树的公共边总共有 \(k\) 条,求助 \(0 \leq k \leq n-1\) 时所有 \(k ...

  10. 单链表上的一系列操作(基于c语言)

    单链表的实现分为两种单链表(其实差别并不是很大):带头结点和不带头结点,分别对应下面图中的上下两种. 链表的每一个结点是由两个域组成:数据域和指针域,分别存放所含数据和下一个结点的地址(这都是很明白的 ...