Html5钢琴块游戏制作与分享(音游可玩)

news/2024/5/18 14:00:14 标签: html5, 游戏, 前端, 游戏程序

当年一款手机节奏音游,相信不少人都玩过或见过。最近也是将其做了出来分享给大家。

游戏的基本玩法:点击下落的黑色方块,弹奏音乐。(下落的速度会越来越快) 

可以进行试玩,手机玩起来效果会更好些。

点击试玩

游戏使用了一首儿歌乐谱,听出来是啥了吗^ ^

----------------------------------------------------------------------

   长期更新不同类型 H5 游戏,进行经验分享

   对游戏感兴趣的小伙伴,加个关注哈

----------------------------------------------------------------------

实现功能

  1. 制作了简单的近乎黑白的显示界面。
  2. 加入了音频乐谱,可以快速弹奏出一首简单的音乐。
  3. 游戏加入了Game Over的判断,当点击两次,或为点击黑色方块时,游戏结束。

源码地址:pro.youyu001.com

制作思路

  1. 游戏的主场景使用了js绘图进行制作,里面的方块都是程序画出来的。
  2. 音乐方面采用了weixin的js控件,进行了预加载处理。
  3. 不同的音色,找了10几个音节的Mp3文件,演奏时进行播放控制。
  4. 声音播放时做了一个音频对象池子,进行音乐的播放和停止后的回收。

以上为开发的一些思路和关键点。欢迎一起讨论

代码说明

1、通过绘图方式制作了游戏中钢琴按键的效果

this.graphics = new PIXI.Graphics();
this.graphics.beginFill(this.color, 1);
this.graphics.drawRect(0, 0, w, h);
this.addChild(this.graphics);

2、游戏的按钮进行了对象化处理控制了按钮的下落速度显示状态与点击事件等

function Rect(w, h, rectType) {
    //对象继承Container
    PIXI.Container.call(this);
    //用于控制回掉函数的本对象属性控制
    var self = this;

    this.clicked = true;

    this.rectType = rectType;
    this.color = 0x555555;
    if(this.rectType == 0) {
        //黑色
        this.color = 0x000000;
        this.clicked = false;

    } else if(this.rectType == 1){
        //白色
        this.color = 0xFFFFFF;

    } 

    this.graphics = new PIXI.Graphics();
    this.graphics.beginFill(this.color, 1);
    this.graphics.drawRect(0, 0, w, h);
    this.addChild(this.graphics);

    //添加黑色或白色方块点击事件
    if(this.rectType != 2) {
        this.interactive = true;
        this.on("click", function(){
            self.play();
        });
        this.on("touchstart", function(){
            self.play();
        });
    }

    this.play = function() {
        
        //方块只能点击一次,添加此验证
        if(this.rectType == 0 && this.clicked == false) {
            //记录点击状态
            this.clicked = true;
            //黑色方块被点击变色
            self.graphics.beginFill(0x888888, 1);
            self.graphics.drawRect(0, 0, 123, 150);
            
            //按照乐谱寻找需要播放的音色
            var mIndex = musicArrListIndex[music[musicIndex]];
            var audio = musicArrList[music[musicIndex]][mIndex];
            //播放音乐
            audio.play();

            //切换同音色的声音对象,解决同音色一起播放问题
            mIndex ++;
            if(mIndex >= 5) {
                mIndex = 0;
            }
            //记录同音色 播放的序列,5选1
            musicArrListIndex[music[musicIndex]] = mIndex;
            musicIndex ++;
            //乐谱循环播放
            if(musicIndex >= music.length - 1) {
                musicIndex = 0;
            }
            
            //得分
            score ++;
            scoreTxt.text = "score: " + score;

        } else {
            //黑色方块被点击变红
            self.graphics.beginFill(0xff1111, 1);
            self.graphics.drawRect(0, 0, 123, 200);

            over();
        }
    }

}
//对象继承Container的属性方法
Rect.prototype = Object.create(PIXI.Container.prototype);

3、游戏中的音频处理模块音频预加载

    //iphone手机声音预加载兼容
    document.addEventListener("WeixinJSBridgeReady", function () {
        
        var controls = document.getElementsByTagName('audio');
        for(var i=0; i<controls.length; i++){
            controls[i].load();
            controls[i].pause();
        }

    }, false);

4、乐谱与音频对象的代码逻辑编写

//乐谱
var music = [1,1,1,3,5,5,5,5,6,6,6,8,5,4,4,6,6,3,3,3,3,2,2,2,2,5,5,1,1,1,3,5,5,5,5,6,6,6,8,5,4,4,4,6,3,3,3,3,3,3,2,2,2,3,1];
var musicIndex = 0;

//储存声音autio对象
var musicArrList = [];
var musicArrListIndex = [];
for(var i=1;i<10;i++){
    //创建声音
    var musicArr = [];
    //初始化9个音色
    for(var j = 0; j < 5;j ++) {
        var audio = new Audio();
        audio.autoplay = true;
        audio.src='';
        audio.src = 'audio/'+i+'.mp3';
        audio.load();
        audio.pause();
        audio.preload="auto";
        document.body.appendChild(audio);
        musicArr.push(audio);   
    }
    musicArrListIndex.push(0);
    musicArrList.push(musicArr);
}


http://www.niftyadmin.cn/n/225006.html

相关文章

企业的数据中台到底指的是什么?_光点科技

随着数据技术的不断发展和企业数据应用的广泛应用&#xff0c;越来越多的企业开始将数据中台作为数字化转型的核心战略之一。那么&#xff0c;企业的数据中台到底指的是什么呢&#xff1f; 数据中台是一种以数据为核心的企业数字化转型架构&#xff0c;旨在通过数据的汇聚、整合…

【SQL 初阶教程】一文轻松玩转 SQL

目录 一、SQL 通用语法 二、SQL 语句的分类 三、DDL语句 DDL——数据库操作 查询所有数据库 语句&#xff1a; SHOW DATABASES;&#xff08;大小写均可&#xff0c;建议大写&#xff09; 创建数据库HSK 语句&#xff1a;CREATE DATABASE HSK; 删除数据库HSK 语句 &#…

【SpringSecurity】学习笔记(一)

学习笔记一、SpringSecurity 简介二、创建测试项目2.1、引入依赖2.2、测试三、SpringSecurity基本原理3.1、过滤器链3.1.1、FilterSecurityInterceptor3.1.2、ExceptionTranslationFilter3.1.3、UsernamePasswordAuthenticationFilter3.2、过滤器加载过程3.3、两个重要的接口3.…

$\Beta$分布推导与可视化

$\Gamma$函数 $\Gamma$函数(Gamma函数)是阶乘函数在实数和复数域的扩展。对于正整数$n$&#xff0c;阶乘函数表示为$n! 1 \times 2 \times ... \times n$。然而&#xff0c;这个定义仅适用于正整数。Gamma函数的目的是将阶乘扩展到实数和复数域&#xff0c;从而计算实数和复数…

UDP/TCP的相关性你知道几个?

TCP/IP网络原理——主要围绕UDP/TCP进行讲解 文章目录TCP/IP网络原理——主要围绕UDP/TCP进行讲解应用层传输层UDP/TCPTCP丢包总结应用层 网络协议的五层协议分别是应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层&#xff0c;这五层构成…

记录-Vue.js模板编译过程揭秘:从模板字符串到渲染函数

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 Vue.js是一个基于组件化和响应式数据流的前端框架。当我们在Vue中编写模板代码时&#xff0c;它会被Vue编译器处理并转换为可被浏览器解析的JavaScript代码。Vue中的模板实际上是HTML标记和Vue指令的组…

k8s部署流水账

久仰大名k8s&#xff0c;业余选手一直望而却步。最近终于初步炮制成功。知道了大概的流程。本篇为部署备忘录。 经过的大环节有&#xff1a;修改树莓派/boot/cmdline.txt甚至/cmd/config.txt里面的集群相关设置&#xff0c;把cgroup驱动enable好。swap关掉。这些都是所有集群内…

低压接地系统:TN-C 、TN-S、TN-C-S、TT、IT

电力系统的接地直接关系到用户的人身和财产安全,以及电气设备和电子设备的正常运行。如何针对实际情况选择合适的接地系统,确保配电系统及电气设备的安全使用,是电气设计人员面临的首要问题。 根据 国际电工委员会(IEC)规定的各种保护接地方式的术语概念,低压配电系统按…