• 基于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

  • 相关阅读:
    游戏的真实度
    91)Prometheus简单入门
    90)ubuntu 内核升级/降级系统内核(4.13.0)
    89)yaml文件语法
    使用格式工厂,把视频转为gif,画质受损,出现彩虹条模糊的情况
    fastadmin管理后台--带个人日程管理功能
    http响应--禁用缓存设置
    HTTP响应-302,304码的运用
    http请求详解 防盗链技术
    php支付宝支付接口开发(教程笔记)
  • 原文地址:https://www.cnblogs.com/10manongit/p/12748023.html
Copyright © 2020-2023  润新知