文章目录

  • 七、游戏正解场景:
  • 八、音频管理:
    • 1. 新建设置的 GameSetting.ts 组件:
  • 九、功能优化:

七、游戏正解场景:

  • 在 SceneGame.exml 中,拖入新的布局控件 Group 并铺满整个屏幕,设置 ID 为: group_win;
  • 拖入 rect 组件,充满整个屏幕;
  • 自定义 rect 控件透明的:
  • 正解图片,拖入 image 组件,使用图片 Result_png,宽度为 640,高度为 474:
  • 在正解页面添加一个按钮,设置为下一关按钮:
  • 拖入俩个 Label 控件,设置 ID、标签、宽度如图,作为成语解释和出处:
  • 选中 group_win 复制自定义,来到 SceneGame.ts 中站内钢铁自定义:
// 游戏正解的组(页面)
public group_win:eui.Group; // 下一关按钮
public btn_next:eui.Button; // 成语解释
public lb_explain:eui.Label; // 成语出处
public lb_from:eui.Label;

  • 在 SceneGame.ts 中处理显示正解的场景
/*
*显示正解答案
*/
private showWin() {  // console.log('答案正确!');   // 让游戏场景的正解场景显示出来  this.group_win.visible = true; // 获取游戏的关卡信息  var levelData = LevelDataManager.Shared().getLevel(this.levelIndex);  this.lb_from.text = levelData.content;  this.lb_explain.text = levelData.tip;
}
  • 点击下一关绑定方法
// 初始化
private init() {  // 返回按钮  this.btnBack.addEventListener(   egret.TouchEvent.TOUCH_TAP,   this.back_tap,   this  );  // 下一关按钮  this.btn_next.addEventListener(   egret.TouchEvent.TOUCH_TAP,   this.next_tap,   this  );
}  /**
*下一关按钮的响应函数
*/
private next_tap() {
// 先把游戏正解场景隐藏起来
this.group_win.visible = false;  // 重新初始化游戏场景
this.initLevel(this.levelIndex + 1);
}
  • 点击下一关的时候为最远关卡做记录,打开 SceneLevel.ts ,记录玩家过关的最远关卡,并且调整箭头指示的位置
/**
* 记录玩家过关的最远关卡,并且调整箭头指示的位置
* */
public SetMileStoneLevel(level: number) {  // 拿到过关的关卡按钮  var icon = this.levelIcon[level - 1];  // 设置该关卡为激活状态  icon.enabled = true;  // 设置指示箭头到该关卡上  this.img_arrow.x = icon.x + icon.width/2;  this.img_arrow.y = icon.y;   // 记录最远关卡  if(level > LevelDataManager.Shared().MileStone) { LevelDataManager.Shared().MileStone = level;  }
}
  • 在 SceneGame.ts 调用该方法
/**
* 下一关按钮的响应函数
* */
private next_tap() {
// 先把游戏正解场景隐藏起来
this.group_win.visible = false; // 重新初始化游戏场景  this.initLevel(this.levelIndex + 1);  // 记录最远关卡  SceneLevel.Shared().SetMileStoneLevel(this.levelIndex + 1);
}

八、音频管理:

1. 新建设置的 GameSetting.ts 组件:

  • 构建 GameSetting.exml,设置界面大小 640*1136;
  • 设置 image 组件,背景图设置为 MoneyBG_png 上下左右居中,并设置九宫格模式:
  • 添加 lable 组件设置左右居中:
  • 添加确定按钮,设置图片和位置:
  • 添加布局组件 Group ,在组里面添加 Button 并设置宽高,添加 imsge:
  • 添加 禁用图片 到组件 image 中,并设置 x、y 以及宽高:
  • 选中组,复制粘贴;
  • 修改按钮的 ID;

  • image 组件中的属性 touchEnabled,如果设置为 true,就会阻挡点击的效果,如果设置为 false,就是穿透图片实现点击效果;
  • 在 GameSetting.ts 中写一个单例;
  • 注意:单例类在整个运行周期里面不会摧毁,如果每个类都是单例会占用内存,少用的类或者没必要的类可以设置成不是单例:
// 声明单例
private static shared: GameSetting;
public static Shared(): GameSetting{  if(GameSetting.shared == null) {  GameSetting.shared = new GameSetting();  }  return GameSetting.shared;
}
  • 选择控件,右键复制自定义:
// 确定按钮
public btn_agree:eui.Button; // 音乐按钮
public btn_music:eui.Button; // 音乐静音显示
public img_music_disable:eui.Image; // 音效按钮
public btn_sound:eui.Button; // 音效静音显示
public img_sound_disable:eui.Image;/**
* 初始化
* */
private init() {  // 确定按钮的绑定方法  this.btn_agree.addEventListener(   egret.TouchEvent.TOUCH_TAP,   this.agree_tap,   this  );  // 音乐按钮的绑定方法  this.btn_music.addEventListener(   egret.TouchEvent.TOUCH_TAP,   this.music_tap,   this  );  // 音效按钮的绑定方法  this.btn_sound.addEventListener(   egret.TouchEvent.TOUCH_TAP,   this.sound_tap,   this  );
}  /**
* 确定按钮的响应函数
* */
private agree_tap() {     console.log("确定");
}  /**
* 确定按钮的响应函数
*/
private music_tap() {  console.log("music");
}   /**
* 确定按钮的响应函数
*/
private sound_tap() {  console.log("sound");
}
  • 实现调用,在 SceneBedin.ts 中:
/**
* 点按设置按钮的响应函数
* */
private settingTap() {  // 打开设置界面  // console.log("打开设置界面");  this.addChild(GameSetting.Shared());
}
  • 设置禁用图片默认隐藏

  • 创建音频管理类:SoundManage.ts

  • 创建 SoundManage.ts 的单例类:

// 声明单例
private static shared: SoundManager;
public static Shared(): SoundManager {  if(SoundManager.shared == null) {   SoundManager.shared = new SoundManager();  }  return SoundManager.shared;
}
  • 声明不同声音的类型:
// 点击声音
private click_sound: egret.Sound; // 点击字块的声音
private word_sound: egret.Sound; // 胜利的声音
private right_sound: egret.Sound; // 错误的音频
private wrong_sound: egret.Sound; // 背景音乐
private bgm_sound: egret.Sound; // 保存背景音乐静音的音轨
private bgm_channel: egret.SoundChannel;
  • 加载所有音频文件:
public constructor() {     // 加载所有的音频文件 // this.click_sound = new egret.Sound();  // this.click_sound.load(url);   this.click_sound = RES.getRes('buttonclick_mp3');  this.bgm_sound = RES.getRes('Music_mp3');  this.right_sound = RES.getRes('right_mp3');  this.wrong_sound = RES.getRes('wrong_mp3');  this.word_sound = RES.getRes('type_word_mp3');
}
  • 播放背景音乐:
/**
* 播放背景音乐
* */
public playBgm() {     if(this.isMusic) {  this.bgm_channel = this.bgm_sound.play(0,0);  }
}   /**
* 停止背景音乐
*/
public stopBgm() {  if(this.bgm_channel != null) {   this.bgm_channel.stop();     }
}  /**
* 音乐是否播放,保存设置  */ public set isMusic(val) {  if(!val) {   // 0 为不需要播放   egret.localStorage.setItem('isMusic','0');  }else {   // 1 为需要播放   egret.localStorage.setItem('isMusic','1');  }
}  /**
* 获取音频是否播放
* */
public get isMusic() {     var status = egret.localStorage.getItem('isMusic');  if(status == null || status == '') {   return true;  }else {   return status == '1';     }
}
  • 播放音效的调用,在 GameBegin.ts 中:
/**
* 点按设置按钮的响应函数
* */
private settingTap() {     SoundManager.Shared().playClick();  this.addChild(GameSetting.Shared());
}
  • 在 GameSetting.ts 中:
/**
* 确定按钮的响应函数
* */
private agree_tap() {  // console.log("确定");  // 隐藏设置场景  this.parent.removeChild(this);// 播放一个点击的音效 SoundManager.Shared().playClick(); }  /**  * 背景音乐按钮的响应函数  * */ private music_tap() {  // console.log("music");  SoundManager.Shared().playClick();  SoundManager.Shared().isMusic = !SoundManager.Shared().isMusic;//改变状态(如果是可播放状态,则设置为禁用状态)  this.update_button_stage(); }   /**  * 确定按钮的响应函数  * */ private sound_tap() {  // console.log("sound");  SoundManager.Shared().playClick();  SoundManager.Shared().isSound = !SoundManager.Shared().isSound; this.update_button_stage();  }  /** * 修改音效 / 音效的状态 *  */ private update_button_stage() {     this.img_music_disable.visible = !SoundManager.Shared().isMusic;  this.img_sound_disable.visible = !SoundManager.Shared().isSound; }
  • 初始化:
/**
* 初始化
* */
private init() {  ……  // 初始化音乐 / 音效的显示  this.update_button_stage();
}
  • 问题:背景音乐没有播放
  • 解决:在 GameBegin.ts 中初始化时候,设置背景音乐可播放
// 初始化
private init() {     // 给两个按钮绑定点击方法  this.btnSetting.addEventListener(      egret.TouchEvent.TOUCH_TAP,       this.settingTap,       this  );  this.btnBegin.addEventListener(         egret.TouchEvent.TOUCH_TAP,         this.beginTap,         this  );   // 设置游戏背景音乐默认是可播放  SoundManager.Shared().isMusic = true;
}
  • 在 SoundManage.ts 中,设置背景音乐自动播放 / 自动停止:
/**
* 音乐是否播放,保存设置
* */
public set isMusic(val) {  if(!val) {          // 0 为不需要播放          egret.localStorage.setItem('isMusic','0');          this.stopBgm();  }else {          // 1 为需要播放          egret.localStorage.setItem('isMusic','1');          this.playBgm();  }
}
  • 设置不同音效……

九、功能优化:

解决如果用户玩到 100 关的时候,不需要每次进入游戏手动往上滑。

  • 在 SceneLevels.ts 中:
// 滚动视图默认出现在最底部
this.group_levels.scrollV = group.height - this.height;  // 拿到最远关卡,超过 20 关就是超过一个屏幕的高度
if(mileStone > 20) {  this.group_levels.scrollV = group.height - mileStone*spanY - this.img_arrow.height;
}

【源码获取方式】

  1. 关注公众号 “悦己者Life” 回复 “成语猜猜看” 获取源码。
  2. gitee:https://gitee.com/jwr2001/guess-word.git

成语猜猜看小游戏(四)相关推荐

  1. 成语猜猜看小游戏(一)

    文章目录 一.游戏的准备: 开始场景: 游戏场景: 关卡场景: 需求: 正确场景: 音频页面: 二.开始构建游戏: 1. 创建游戏项目: 2. 添加游戏素材: 3. 添加一些素材到 preload 组 ...

  2. 成语猜猜看小游戏(三)

    文章目录 五.实现关卡相关内容: 六.游戏场景: 五.实现关卡相关内容: 在 SceneLevel.ts 文件,在 init 方法尾部继续 // 获取游戏存档的最远的关卡 // 当玩到当前关卡或者玩过 ...

  3. 成语猜猜看小游戏(二)

    文章目录 三.游戏关卡场景: 1. 创建 SceneLevnl 组件: 2. 在 SceneLevel 里声明单例: 3. GameBegin.ts 跳转: 4. 设置 SceneLevel.exml ...

  4. android写的猜猜看小游戏

    android版猜猜看 猜猜看app主要是帮助老师记住学生的一个app,因为是在手机上的应用,所以老师任何时候,只要有一部手机就可以玩,非常方便! 首先分析作业的需求,随机出现三张图片,每张图片一个名 ...

  5. 《JAVA课程设计》实训第四天——《猜猜看》游戏

    第四天,本来想进一步去改进<猜猜看>游戏的.可是非常多问题都不理解.也不熟悉怎么去弄到连接数据库.统计猜对次数,所以并没有进行再多的改动. 基本上就是这种执行结果了 import java ...

  6. 微信小程序--成语猜猜看

    原文链接:https://mp.weixin.qq.com/s/p6OMCbTHOYGJsjGOINpYvQ 1 概述 微信最近有很多火爆的小程序.成语猜猜看算得上前十火爆的了.今天我们就分享这样的小 ...

  7. 微信无法连接服务器501,微信成语猜猜看第501关BUG出现全是英文怎么过解决方法...

    近日因为跳一跳许多微信小程序游戏异常火爆,其中就包括了成语猜猜看游戏,但是很多小伙伴向小编反应游戏之中出现了BUG,那么微信成语猜猜看BUG怎么办呢?为了帮助各位小伙伴,小编特意带来了成语猜猜看BUG ...

  8. 微信小游戏 腾讯课堂《白鹭教育 - 成语大挑战小游戏开发》学习笔记

    腾讯课堂<白鹭教育 - 成语大挑战小游戏开发>:https://ke.qq.com/course/287266 学习笔记 首先这个视频课程简单介绍了一个小游戏的制作,包括新建项目.适配模式 ...

  9. 微信无连接服务器1.104,微信成语猜猜看太子少师答案汇总 太子少师1-104关攻略...

    本文导航第1页: 太子少师 第8页:翰林 第2页:学童 第9页:侍郎 第3页:童生 第10页:尚书 第4页:秀才 第11页:大学士 第5页:举人 第12页:御史 第6页:贡士 第13页:丞相 第7页: ...

最新文章

  1. OpenDigg前端开源项目月报201704
  2. android notification点击无效,Notification.addAction在Android O中无效
  3. VS2017中删项目属性中连接器删除继承的值
  4. 剑网三通过VR来进行游戏快乐,是不是会加倍?什么时候用得上?
  5. 在ubuntun虚拟机里安装goLang语言编程环境
  6. 学习笔记02:直播串讲——3/22
  7. P1850 [NOIP2016 提高组] 换教室
  8. 进程与服务的签名_苹果app签名需要注意哪几点
  9. 系统学习机器学习之正则化(二)
  10. php mysql join查询结果_PHP mySQL表JOIN查询 - 最有效的方法?
  11. 根据小米商城官网首页效果敲写页面
  12. Server 2008系统安装驱动提示“无法验驱动程序数字签名”怎么办?
  13. GhostXP_SP3电脑公司特别版_V2013.06
  14. 开发框架-.Net:Learun(力软敏捷开发)
  15. 个税申报系统显示服务器证书不合法,个人所得税申报系统常见问题汇总
  16. linux HID驱动分析
  17. unity 动态图集
  18. YTU oj 3631 树的高度
  19. 新浪大赚,阿里吃亏------剖析阿里巴巴入股新浪微博
  20. 加拿大曼尼托巴大学计算机专业几年,加拿大曼尼托巴大学专业

热门文章

  1. 云裳羽衣-好友系统优化(完稿时间2021/3/21)
  2. 关于Unity unsafe的解决
  3. display:box和flex的区别
  4. 如何保证亚马逊账户的安全
  5. 区块链小媒体还能蹦跶几天,苹果的双卡双待才是王道!
  6. 变量、基本数值类型、格式化输出、运算符
  7. Android项目上传到GItHub
  8. 图片上传三方云服务器,前端主导方案
  9. idea - 添加本地jar包依赖
  10. MySQL查询之子查询