zoukankan      html  css  js  c++  java
  • 基于canvas和web audio实现低配版MikuTap

    导言

    最近发掘了一个特别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

  • 相关阅读:
    Python-枚举
    Python-函数
    Python-装饰器(语法糖)上下五千年和前世今生
    Python-全局函数(内置方法、内置函数)
    Python-时间模块-time
    Python-随机模块-random
    Python-维护排序好的序列模块-bisect
    需求推动技术的产生
    RBF神经网络
    聚类算法的衡量指标
  • 原文地址:https://www.cnblogs.com/10manongit/p/12748023.html
Copyright © 2011-2022 走看看