Html5钢琴块游戏制作(音乐游戏)

news2025/3/10 5:31:51

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

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

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

点击试玩

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

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

   长期更新不同类型 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.coloradmin.cn/o/413824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java就业前景如何?

Java还有出路吗&#xff1f;2023年的就业市场依然经历着面临挑战&#xff0c;很多有经验有技术的人被淘汰下来&#xff0c;而马上又有一千多万的新鲜血液涌入就业市场。经济大环境对于各行各业的影响是非常大的&#xff0c;也为IT行业的内卷推波助澜。在2023年想学习Java入行就…

面试造航母,入职拧螺丝,工资...

有粉丝跟我吐槽说&#xff1a;金三银四去面试软件测试岗&#xff0c;真的是面试造航母&#xff0c;入职拧螺丝&#xff0c;工资还低 这种现象很正常&#xff0c;因为找一个测试员&#xff0c;当然希望他能做的业务越多越好&#xff0c;最好像机器猫一样&#xff0c;啥事儿都能…

Chatgpt 实践经验分享

数据准备&#xff1a;ChatGPT 需要大量的训练数据来支撑模型的训练和优化&#xff0c;因此需要进行充分的数据准备。在数据准备方面&#xff0c;需要考虑数据的质量、覆盖范围以及数据的预处理方式等。模型训练&#xff1a;ChatGPT 使用端到端学习的方式训练模型&#xff0c;需…

自动控制原理模拟卷1

自动控制原理模拟题一 Question1 已知机械系统和电网络如下图所示,求解两个系统的传递函数,并证明这两个系统是相似系统. 解: 【图a系统】 由电网络原理图并根据复阻抗原理,可得系统传递函数为: E o ( s ) E i

离线安装k8s/kubernetesv1.17.1

条件&#xff1a; 3台没有网络的centos7.9服务器 1.系统优化 hostnamectl set-hostname k8s-master && bash #只在master节点上执行 hostnamectl set-hostname k8s-node1 && bash #只在node1节点上执行 hostnamectl set-hostname k8s-node2 && …

基于stm32单片机和rt-thread操作系统的智能灯

目 录 一、 总体概况 二、 各部分介绍 2.1 STM32F4开发板 2.2 光敏模块 2.3 麦克风模块 2.4 超声波模块 三、 RT-Thread介绍 四、 开发过程 五、 未来设想 六、 开发心得 总体概况 本次测试技术与信号处理课程作业&#xff0c;我利用了stm32单片机和rt-thread…

SpringBoot中使用WebSocket Demo

大概目录结构 依赖只引入了JSP 和SpringBoot整合WebSocket Spring Web index.jsp <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><meta charset"utf-8"><s…

STM32开发(十三)STM32F103 片内资源 —— 外部中断 按键 详解

文章目录一、基础知识点二、开发环境三、STM32CubeMX相关配置四、Vscode代码讲解五、结果演示一、基础知识点 外部中断/事件控制器主要特征&#xff1a; 每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达20个软件的中断/事件请求检测脉冲宽度低于APB2时…

校园一键报警柱的作用

校园一键报警柱是一种用于校园安全的紧急报警系统&#xff0c;可以随时随地向校园安全管理部门发送紧急警报。这种系统通常采用带有紧急按钮的电缆或无线警报装置&#xff0c;使学生、教师和工作人员可以在出现紧急情况时轻松报告安全问题&#xff0c;迅速地通知校园安全人员&a…

彻底理解java中泛型

一、什么是泛型&#xff1f; 泛型是JDK5引入的一种特性&#xff0c;是一种类型安全检测机制&#xff0c;开发者在编译阶段发现类型相关的报错。 泛型即参数类型化&#xff0c;将操作的数据类型定义为参数&#xff0c;可定义在类、接口、方法中。 可以把类型参数看作是使用参数化…

CorelDRAW2023中文版矢量制图及设计软件更新发布

矢量制图及设计软件&#xff0c;CorelDRAW Graphics Suite 2023中文版&#xff08;以下简称CorelDRAW 2023&#xff09;对新手来说&#xff0c;对于自己多久才能学会cdr软件这个问题是比较关心的。如果你的学习能力比较强&#xff0c;一周时间是有可能完全学会cdr的。但由于每个…

您可以找到的 5 种最佳数据恢复软件

数据恢复软件对很多人来说是一个非常有价值的工具。无论您是否意识到&#xff0c;宝贵的数据都有被删除的风险&#xff0c;而且很多人直到丢失数据才知道数据的价值。 5 种数据恢复软件 如果发生这种情况&#xff0c;您需要最好的软件来恢复数据并确保这种情况不会再次发生。这…

PostgreSQL 函数(一) 数学函数和字符串函数

1.数学函数 1.1.符号函数sign 用于判断正负 1.2.求余函数mod 1.3.圆周率函数pi 1.4.平方根函数sqrt 1.5.向上取整函数ceil和ceiling 1.6.向下取整函数floor 1.7.绝对值函数abs 1.8.四舍五入函数round 第2位参数为保留位数 1.9.其他函数 正弦函数sin, 反正弦函数asin, 余弦…

考研复试确认神操作!

终于进行到了研究生考试的尾声&#xff0c;但让考生感到无力吐槽的事情&#xff0c;却还在继续上演&#xff0c;比如苏科大&#xff0c;再比如中地大、苏大&#xff0c;三所学校的神操作&#xff0c;着实让无数考生忍不住调侃&#xff1a;原来考研不仅拼实力&#xff0c;还得拼…

类ChatGPT代码级解读:如何从零起步实现Transformer、llama/ChatGLM

前言 最近一直在做类ChatGPT项目的部署 微调&#xff0c;关注比较多的是两个&#xff1a;一个LLaMA&#xff0c;一个ChatGLM&#xff0c;会发现有不少模型是基于这两个模型去做微调的&#xff0c;说到微调&#xff0c;那具体怎么微调呢&#xff0c;因此又详细了解了一下微调代…

欧拉回路问题

文章目录 欧拉回路程序设计程序分析欧拉回路 有一条名为Pregel的河流经过Konigsberg城。城中有7座桥,把河中的两个岛与河岸连接起来。当地居民热衷于一个难题:是否存在一条路线,可以不重复地走遍7座桥。这就是著名的七桥问题。它由大数学家欧拉首先提出,并给出了完美的解答…

MapReduce简介

MapReduce是一个编程模型&#xff0c;用于处理和生成大数据。用户通过编写Map函数处理输入键值对生成中间键值对&#xff0c;通过编写Reduce函数来合并所有的中间键值对并生成结果。在我们的日常生活中&#xff0c;大部分的任务都可以被抽象成一个MapReduce模型&#xff0c;并通…

6.1 总体和样本

学习目标&#xff1a; 要学习总体和样本&#xff0c;可以按照以下步骤进行&#xff1a; 了解总体和样本的概念&#xff1a;总体是指研究对象的全体&#xff0c;样本是从总体中随机抽取的一部分。了解它们的概念有助于后续学习。 掌握简单随机抽样的方法&#xff1a;简单随机…

HTML学习(1)

文章目录HTML初识第一个HTML程序HTML元素HTML属性HTML标题HTML段落HTML样式格式化标签HTML引用HTML注释HTMLCSSHTML链接HTML图片HTML表格HTML列表HTML块我的个人博客&#xff1a;欢迎来逛逛 HTML初识 HTML全称是&#xff1a;Hyper Text Markup Language HTML不是一种编程语言…

如何在Windows系统上制作U盘启动盘?

使用U盘重装Windows电脑系统&#xff0c;对于熟悉电脑的人来说十分常见&#xff0c;但是不少电脑小白并不会制作U盘启动盘。U盘启动盘是包含操作系统的外部硬盘驱动器&#xff0c;可用于启动计算机或笔记本电脑。下面我们就来了解一下如何制作U盘启动盘。 注意&#xff1a; U …