写在前面:随着越来越多的新人开始接触白鹭引擎,创作属于自己的游戏。考虑到初学者会遇到一些实际操作问题,我们近期整理推出“菜鸟”系列技术文档,以便更好的让这些开发者们快速上手,Egret大神们可以自动忽略此类内容。

今天我们分享的菜鸟文档将介绍微信小游戏好友排行榜的制作过程,包括创建项目并发布、微信开发者平台添加小游戏、打开开放域功能、主域和开放域通讯,以及ShareCanvas与原生Canvas的布局。

微信好友排行榜利用微信关系链数据实现一个简单的排行榜,此文档包含关系链数据、Egret平台数据接口、ShareCanvas离屏画布、原生Canvas布局。

创建项目并发布

创建Egret项目,使用Launcher发布,建议使用您个人AppID(测试用的id限制很多功能,例如分享)

添加小游戏

设置 > 基本设置 > 添加小程序(能够通过审核即可)

打开开放域功能

使用微信开发者工具打开发布的微信小游戏,或在终端运行 egret run --target wxgame ,找到游戏配置文件game.json,配置如下,其中openDataContext使小游戏支持了微信开放域功能。

{"deviceOrientation": "portrait","networkTimeout": {"request": 5000,"connectSocket": 5000,"uploadFile": 5000,"downloadFile": 5000},"openDataContext": "openDataContext"
}

ShareCanvas介绍

开放数据域的绘制文件中已经拥有一个通过Canvas API绘制的排行榜 ,SharedCanvas 是主域和开放数据域都可以访问的一个离屏画布,原理如下所示。

index.js文件中,官方已经为我们绘制了一个简单的排行榜demo,渲染出的效果如下图所示

主域和开放域通讯

开放域已经为我们绘制好了虚拟排行榜,现在只需要让主域打开开放域的排行榜就可以展示在Canvas上了。

首先,创建开放数据域显示对象,离屏画布的显示对象可直接在主域中通过以下的方式进行创建,创建的显示对象为 egre.Bitmap 类型,可直接添加到舞台上。

//在主域中创建开放数据域显示对象
var platform = window.platform;
this.bitmap = platform.openDataContext.createDisplayObject(null,this.stage.stageWidth, this.stage.stageHeight);

其次,通过主域与开放数据域的单向数据接口进行通讯。主域可向开放数据域单方向发送消息。

//主域向子域发送数据
plathform.openDataContext.postMessage({isRanking: this.isRankClick,text: "egret",year: (new Date()).getFullYear(),command: "open"
});

子域可通过监听事件的方式获取到主域发送过来的自定义信息。

 1 //子域接收信息2 wx.onMessage((data) => {3   if (data.command == 'open') {4     //显示开放域5     if (!hasCreateScene) {6       //创建并初始化7       hasCreateScene = createScene();8       ...9   }
10 }

最后,开发者便可以在主域中发送数据,请求开放域打开排行榜,子域接收到数据打开排行榜。

扩展

您可以通过修改index.js文件内的参数改变排行榜样式达到目标效果,可以使用自己的图片放到对应的路径中(总文件大小不要超过4M)。布局建议不要使用固定数字的数值,而是以 stageWidth stageHeight 舞台宽高作为基数,以尽量减少不同手机出现的适配问题。

1 /**2  * 资源加载组,将所需资源地址以及引用名进行注册3  * 之后可通过assets引用名方式进行获取4  */5 var assets = {6   icon: "openDataContext/assets/icon.png",7   box: "openDataContext/assets/signIn.png",8   panel: "openDataContext/assets/bg.png",9   button: "openDataContext/assets/OK_button.png",
10   title: "openDataContext/assets/rankingtitle.png"
11 };

注意:安卓偶尔有不显示数据的BUG,在index.js中给字体加一个颜色即可

1 //设置字体
2   context.font = fontSize + "px Arial";
3   context.fillStyle = "#fff"

小结

通过本文您可以对以下问题有更深入的了解

对微信的关系链数据有更深入的理解
平台数据接口的作用和使用
熟悉主域与开放域数据通讯规则
对原生Canvas的布局有所了解

本文关键代码参考

1 private isRankClick:boolean = false;2     private bitmap: egret.Bitmap;3      /**4      * 排行榜遮罩,为了避免点击开放数据域影响到主域,在主域中建立一个遮罩层级来屏蔽点击事件.</br>5      * 根据自己的需求来设置遮罩的 alpha 值 0~1.</br>6      */7     private rankingListMask: egret.Shape;8 9     //显示微信排行榜
10     public obBtnRankingClick(e:egret.TouchEvent) {
11         console.log("点击排行榜");
12         let plathform:any = window.platform;
13         if(!this.isRankClick) {
14              //处理遮罩,避免开放域数据影响主域
15             this.rankingListMask = new egret.Shape();
16             this.rankingListMask.graphics.beginFill(0x000000,1);
17             this.rankingListMask.graphics.drawRect(0,0,this.stage.width,this.stage.height);
18             this.rankingListMask.graphics.endFill();
19             this.rankingListMask.alpha = 0.4;
20             //设置为true,以免触摸到下面的按钮
21             this.rankingListMask.touchEnabled = true;
22             this.addChildAt(this.rankingListMask,999);
23
24             //让排行榜按钮显示在容器内
25             this.addChild(this.btn_ranking);
26
27             //显示开放域数据
28             this.bitmap = plathform.openDataContext.createDisplayObject(null,                       this.stage.stageWidth, this.stage.stageHeight);
29             this.addChild(this.bitmap);
30             //主域向子域发送数据
31             plathform.openDataContext.postMessage({
32                 isRanking: this.isRankClick,
33                 text: "egret",
34                 year: (new Date()).getFullYear(),
35                 command: "open"
36             });
37
38             this.isRankClick = true;
39         }
40         else {
41             this.bitmap.parent && this.bitmap.parent.removeChild(this.bitmap);
42             this.rankingListMask.parent && this.rankingListMask.parent.removeChild(this.rankingListMask);
43             this.isRankClick = false;
44             plathform.openDataContext.postMessage({
45                 isRanking: this.isRankClick,
46                 text: "egret",
47                 year: (new Date()).getFullYear(),
48                 command: "close"
49             });
50         }
51     }

本文源码链接:https://github.com/shenysun/F...

菜鸟| 微信小游戏好友排行榜教程相关推荐

  1. 菜鸟|Egret微信小游戏好友排行榜教程

    原文链接:https://mp.weixin.qq.com/s/kYIdnHv-C5KuR9snekPNBg 原文虽然是菜鸟教程,但是有几个地方没有说清楚,补充如下. 你可以先看原文,看不懂时,再来这 ...

  2. 微信小游戏好友排行榜快速开发教程

    要做这个好友排行榜.必然要有好友的战绩比分,然后再做排序,最后将数据呈现在UI上 , 可以分为下面几个步骤: 保存每个用户的分数 获取好友列表,并获取好友的分数 渲染排行榜 保存每个用户的分数 保存每 ...

  3. Layabox开发微信小游戏好友排行榜功能流程

    官方参考文档:(https://ldc2.layabox.com/doc/?nav=zh-ts-5-0-7) 一.主域项目,即小游戏(Laya2.0版本) 针对微信小游戏初始化 MiniAdpter. ...

  4. 教你快速开发一个微信小游戏好友排行榜

    概述 ​ 要做这个好友排行榜.必然要有好友的战绩比分,然后再做排序,最后将数据呈现在UI上 , 可以分为下面几个步骤: 保存每个用户的分数 获取好友列表,并获取好友的分数 渲染排行榜 保存每个用户的分 ...

  5. 教你“偷偷”的获取微信小游戏好友关系链数据

    好友是是很多游戏都有的功能,原因在于好友玩法可以提升用户间的互动性,增加产品和用户的黏性.对提升留存率有重要帮助.很多游戏策划和产品经理都喜欢在游戏中加入这个设定,在腾讯开发平台.空间玩吧平台也都提供 ...

  6. 利用Phaser开发微信小游戏(排行榜小结)

                                                                利用Phaser开发微信小游戏(排行榜小结) 小游戏中的开放数据域可用来保存游戏 ...

  7. 微信小游戏开发实战教程15-关卡编辑器的制作以及关卡分享功能的实现

    微信小游戏开发实战系列的第15篇. 本节主要内容有游戏中的关卡编辑器的实现思路以及如何利用分享功能将自己制作的关卡与好友分享. 如果你没有任何的游戏开发经验,欢迎阅读我的"人人都能做游戏&q ...

  8. 【微信小游戏】排行榜概念篇

    一.前提 微信小游戏主打社交玩法,为了丰富社交玩法我们肯定会用到关系链数据来做好友排行帮,群排行榜等功能.本篇主要介绍概念同时划重点,下一篇Cocos Creator中实战. 二.概念 1.1)关系链 ...

  9. 微信小游戏开发实战教程13-随机生成形状功能的实现

    微信小游戏开发实战系列的第13篇. 本节内容包括:通过使用列表来实现可以设置权重的随机功能,以及游戏中的随机生成形状功能的具体实现. 如果你没有任何的游戏开发经验,欢迎阅读我的"人人都能做游 ...

最新文章

  1. mybatis-plus团队新作:mybatis-mate 轻松搞定数据权限
  2. Java语言 泛型 类型擦除
  3. 【考研】2022温州大学计算机学硕招收调剂
  4. 【详细分析】1023 Have Fun with Numbers (20 分)_20行代码AC
  5. 前端学习(2537):vue源码解析2伪数组转换为真数组
  6. 电脑如何安装php文件夹在哪个文件夹,win7系统桌面文件在c盘哪个文件夹
  7. apache+php
  8. ❤️《Mybatis从基础到高级》(建议收藏)❤️
  9. java 军工_为什么军工行业不用java而是选择继续用c(对于业务系统Java是非常合适的而不带操作系统的板子甚至可以做到微秒级别的实时控制)...
  10. 使用ef查询有缓存的问题
  11. C盘爆满给Android Studio瘦身将sdk移除C盘
  12. 基于STM32MP157的tf-a移植
  13. 手机文件上传服务器,如何上传文件到服务器 上传文件到服务器方法
  14. Meta标签:让360浏览器默认使用极速模式打开网页
  15. 微信小程序页面跳转方式
  16. 冰刃(IceSword)的使用方法(高级篇)
  17. ubuntu查看 固态硬盘位置_在Ubuntu(Linux)中启用固态硬盘(固态硬盘)TRIM | MOS86...
  18. 安兔兔 android 4.4,适配智能电视 安兔兔评测V4.4.3发布
  19. Linux Nc命令详解及使用Nc查看Zookeeper的信息
  20. 【强化学习】Q-Learning原理及代码实现

热门文章

  1. puppet重申证书
  2. flash按钮控制播放
  3. strtotime() PHP中的其他用途 上月下月时间不准确
  4. 黑马 React 学习记录
  5. 童鞋们有福了,U880 GPS使用指南终于找到了,不看后悔
  6. 【halcon 线扫相机二维码矫正算法】
  7. Win10家庭版gpedit.msc命令打不开组策略的解决方案
  8. 供应链厂商信息-2014
  9. 德国电信撕逼诺基亚:史上最烂5G供应商
  10. BIO和NIO有啥区别?为啥要使用-Netty!一文说清!