你知道和不知道的微信小游戏常用API整理,赶紧收藏用起来~

news2024/9/24 15:26:07

好的马上

引言

这…已收藏

最近在书院(一个提供优质内容,专门搞学习的地方,可私信“星球”了解和捧场)看到比较多的星友想学习Cocos进行小游戏开发。

“该从什么方向入手?”

速成

从星友们的主题可以看出,小游戏目前不管是国内还是海外,都非常的,因此笔者给大家整理一下微信小游戏常用API帮大家更好地卷,大家赶紧收藏用起来吧!

本文源工程可在文末获取,小伙伴们自行前往。

总览

为了更好地演示效果,笔者用之前小游戏的资源简单搭了一个Demo小程序,简单但又不失优雅

简单但又不失优雅

其中分享模块流量主广告模块相关配置可视化调整。

简单配置

资源结构清晰易懂分享广告独立成模块。组件简单易用。

结构清晰

Cocos3.8.12.4.11和其他多版本支持。

多版本支持

分享模块

微信小游戏依赖于它的环境,容易分享传播,因此我们小游戏务必接入分享模块,不能错过一次裂变的机会。

给我一次裂变的机会

1.转发菜单

点击右上角按钮,会弹出菜单,菜单中的“转发”选项默认不展示。通过 wx.showShareMenu()wx.hideShareMenu() 可动态显示隐藏这个选项。

由你决定

接口如下:

/**
 * 注册微信事件
 */
registerEvent(): void {
    //显示分享按钮(shareAppMessage转发,shareTimeline朋友圈)
    wx.showShareMenu({
        withShareTicket: true,
        menus: ['shareAppMessage', 'shareTimeline']
    });
}

2.被动转发

用户点击右上角菜单中的“转发”选项后,会触发转发事件,如果小游戏通过 wx.onShareAppMessage() 监听了这个事件,可通过返回自定义转发参数来修改转发卡片的内容,否则使用默认内容。

这很被动

接口如下:

/**
 * 注册微信事件
 */
registerEvent(): void {
  //转发
  wx.onShareAppMessage(() => {
      return this.getShareData();
  });
  //分享朋友圈
  wx.onShareTimeline(() => {
      return this.getShareData();
  });
}
/**
 * 随机获取配置的分享内容
 */
getShareData() {
    var data = {
        title: "",//分享微信的标题
        imageUrl: "", //通过MP系统审核的图片地址
        query: "",//自定义附加参数
    };
    return data;
}

3.主动转发

游戏内可通过 wx.shareAppMessage()接口直接调起转发界面,与被动转发类似,可以自定义转发卡片内容

主动点

接口如下:

/**
 * 主动转发
 */
shareAppMessage(title: string = "", imageUrl: string = "", query: string = "", shareCallback: any = null): void {
    var data = {
        title: title,
        imageUrl: imageUrl,
        query: query
    };
    wx.shareAppMessage(data);
}

流量主广告模块

流量主作为个人小游戏的主要收入来源,如果你想实现变现,必须要接入这个模块。

1.激励视频

激励视频广告组件是由客户端原生的图片、文本、视频控件组成的,层级最高,会覆盖在上屏 Canvas 上。

小小激励

接口如下:

private rewardedVideoAd: any;
private rewardAdCallback: any;
private rewardAdCallbackObj: any;
/**
 * 播放激励视频广告
 */
showRewardedVideoAd(rewardAdCallback: Function, rewardAdCallbackObj: any): void {
    this.rewardAdCallback = rewardAdCallback;
    this.rewardAdCallbackObj = rewardAdCallbackObj;

    this.createRewardedVideoAd();

    if (!this.rewardedVideoAd) {
        this.onRewardAdCallback(false);
        return;
    }

    // 用户触发广告后,显示激励视频广告
    this.rewardedVideoAd.show().catch(() => {
        // 失败重试
        this.rewardedVideoAd.load()
            .then(() => this.rewardedVideoAd.show())
            .catch(err => {
                this.onRewardAdCallback(false);
            })
    })
}
/**
 * 创建激励视频广告
 */
createRewardedVideoAd() {
    if (!this.rewardedVideoAd && this.rewardedVideoAdConfig.adUnitId != "") {
        this.rewardedVideoAd = wx.createRewardedVideoAd({
            adUnitId: this.rewardedVideoAdConfig.adUnitId
        })

        this.rewardedVideoAd.onClose(res => {
            // 用户点击了【关闭广告】按钮
            // 小于 2.1.0 的基础库版本,res 是一个 undefined
            if (res && res.isEnded || res === undefined) {
                // 正常播放结束,可以下发游戏奖励
                this.onRewardAdCallback(true);
            }
            else {
                // 播放中途退出,不下发游戏奖励
                this.onRewardAdCallback(false);
            }
        })

        this.rewardedVideoAd.onError(err => {
            this.onRewardAdCallback(false);
        })
    }
}
/**
 * 激励视频广告回调
 */
onRewardAdCallback(success) {
    if (this.rewardAdCallback) {
        this.rewardAdCallback.call(this.rewardAdCallbackObj, success);
        if (success) {
            this.rewardedVideoAd.load();
        }
        this.rewardAdCallback = null;
        this.rewardAdCallbackObj = null;
    }
}

2.Banner 广告

Banner 广告组件是由客户端原生的图片、文本控件组成的原生组件,层级最高,会覆盖在上屏 Canvas 上。

拉横幅

接口如下:

private bannerAd: any;
/**
 * 显示Banner广告
 */
showBannerAd(show: boolean): void {
    if (show) {
        // 在适合的场景显示 Banner 广告
        this.createBannerAd();
        this.bannerAd.show();
    }
    else {
        this.bannerAd.hide();
        this.bannerAd.destroy();
        this.bannerAd = null;
        this.createBannerAd();
    }
}
/**
 * 创建Banner广告
 */
createBannerAd() {
    if (!this.bannerAd) {
        let sysInfo = wx.getSystemInfoSync();
        // 创建 Banner 广告实例,提前初始化
        var width = 320;
        this.bannerAd = wx.createBannerAd({
            adUnitId: this.bannerAdConfig.adUnitId,
            adIntervals: this.bannerAdConfig.adIntervals,
            style: {
                left: sysInfo.screenWidth / 2 - width / 2,
                top: sysInfo.screenHeight,
                width: width
            }
        })

        this.bannerAd.onResize(res => {
            this.bannerAd.style.top = sysInfo.screenHeight - this.bannerAd.style.realHeight;
        })

        this.bannerAd.onError(err => {
            console.log(err)
        })
    }
}

3.插屏广告

插屏广告组件是由客户端原生的图片、文本、视频控件组成的,层级最高,会覆盖在普通组件上。

突如其来的广告

接口如下:

private interstitialAd: any;
/**
 * 创建插屏广告
 */
createInterstitialAd() {
    // 创建插屏广告实例,提前初始化
    if (wx.createInterstitialAd && !this.interstitialAd) {
        this.interstitialAd = wx.createInterstitialAd({
            adUnitId: this.interstitialAdConfig.adUnitId
        })

        this.interstitialAd.onClose(res => {
            this.interstitialAd = null;
            this.createInterstitialAd();
        })
    }
}
/**
 * 显示插屏广告
 */
showInterstitialAd() {
    // 在适合的场景显示插屏广告
    this.createInterstitialAd();
    if (this.interstitialAd) {
        this.interstitialAd.show().catch((err) => {
            console.error(err)
        })
    }
}

4.原生模板广告

原生模板广告组件是由客户端原生的图片、文本、视频控件组成的原生组件,层级最高,会覆盖在上屏 Canvas 上。

小格子

接口如下:

private customAd: any;
/**
 * 显示自定义广告
 */
showCustomAd(show: boolean, top?: number, left?: number): void {
    if (!this.customAd) {
        this.customAd = wx.createCustomAd({
            adIntervals: this.customAdConfig.adIntervals,
            adUnitId: this.customAdConfig.adUnitId,
            style: {
                fixed: true,
                left: left,
                top: top,
            },
        })
    }
    if (show) {
        this.customAd.show();
    }
    else {
        this.customAd.destroy();
        this.customAd = null;
    }
}

常用模块

1.用户信息获取

用户信息指的是微信用户的昵称、头像等个人信息。

请授权

接口如下:

/**
 * 通过Node获取微信Rect
 */
getWxRect(uiTransform: UITransform) {
    let sysInfo = wx.getSystemInfoSync()
    let rect = uiTransform.getBoundingBoxToWorld();
    let ratio = window.devicePixelRatio;
    let scale = view.getScaleX();
    let factor = scale / ratio;
    var left = rect.x * factor;
    var top = sysInfo.windowHeight - (rect.y + rect.height) * factor;
    var width = rect.width * factor;
    var height = rect.height * factor;
    return { left: left, top: top, width: width, height: height };
}
/**
 * 创建用户信息按钮
 */
createUserInfoButton(uiTransform: UITransform, callback: any) {
    var rect = this.getWxRect(uiTransform);
    var button = wx.createUserInfoButton({
        type: "text",
        text: "",
        style: {
            left: rect.left,
            top: rect.top,
            width: rect.width,
            // backgroundColor: '#ff0000',
            height: rect.height
        }
    });
    button.onTap((res) => {
        //授权成功
        if (res.userInfo) {
            if (callback) {
                callback(res.userInfo);
                button.destroy();
            }
            // res.userInfo.nickName;  //昵称
            // res.userInfo.avatarUrl; //头像链接
        }
        //授权失败
        else {
        }
    })
    /*
    button.show();      //显示
    button.hide();      //隐藏
    */
    return button;
}

2.振动

使手机发生振动。常用于互动反馈

非常灵敏

接口如下:

/**
 * 使手机发生较短时间的振动(15 ms)。仅在 iPhone 7 / 7 Plus 以上及 Android 机型生效
 */
vibrateShort(type: "heavy" | "medium" | "light", success: any = null, fail: any = null, complete: any = null) {
    wx.vibrateShort({
        type: type,
        success: success,
        fail: fail,
        complete: complete
    });
}
/**
 * 使手机发生较长时间的振动(400 ms)
 */
vibrateLong(success: any = null, fail: any = null, complete: any = null) {
    wx.vibrateLong({
        success: success,
        fail: fail,
        complete: complete
    });
}

3.重启小程序

重启当前小程序,可让用户重启小程序完成资源或者配置的更新

重头再来

接口如下:

/**
 * 重启当前小程序
 */
restartMiniProgram() {
    wx.restartMiniProgram({
        success: () => {
            console.log("wx小程序重启成功");
        },
        fail: () => {
            console.log("wx小程序重启失败");
        }
    });
}

3.小程序跳转

打开另一个小程序,常用于搭建自己的小游戏矩阵

欢迎来到我的游戏矩阵

接口如下:

/**
 * 打开另一个小程序
 */
navigateToMiniProgram(appId: string) {
    wx.navigateToMiniProgram({ appId: appId });
}

其他模块

1.获取系统信息

常用于获取屏幕宽高,完成适配。

适配专用

接口如下:

getSystemInfoSync(): { screenWidth: number, screenHeight: number } {
  return wx.getSystemInfoSync();
}

2.显示消息提示框

显示小程序自带的提示框。

省心

接口如下:

showToast(title: string, success: boolean, duration: number = 0) {
    wx.showToast({
        title: title,
        icon: success ? "success" : "error",
        duration: duration
    })
}

3.菜单按钮

获取菜单按钮(右上角胶囊按钮)的布局位置信息。坐标信息以屏幕左上角为原点。用于适配。

还是适配专用

接口如下:

getMenuButtonBoundingClientRect(): { width: number, height: number, top: number, right: number, bottom: number, left: number } {
    return wx.getMenuButtonBoundingClientRect();
}

4.事件上报

用于We分析后台上报事件,用于运营调优

运营调优神器

接口如下:

reportEvent(eventId: string, data: object) {
    wx.reportEvent(eventId, data)
}

5.游戏圈

创建游戏圈按钮,创建方式和获取用户信息类似,用于跳转游戏圈(类似社区)。

游戏自己的社区

接口如下:

createGameClubButton(uiTransform: UITransform) {
    var rect = this.getWxRect(uiTransform);
    return wx.createGameClubButton({
        type: "text",
        text: "",
        style: {
            left: rect.left,
            top: rect.top,
            width: rect.width,
            height: rect.height
        }
    });
}

6.剪贴板

设置系统剪贴板的内容,便于用户复制分享。

Ctrl+C

接口如下:

setClipboardData(data: string): void {
    wx.setClipboardData({ data: data })
}

7.好友排行榜

用户托管数据进行写数据操作。允许同时写多组 KV 数据。常用于实现好友排行榜

setUserCloudStorage(score) {
    //保存数据
    let KVDataList = [{
        key: "",
        value: ""
    }, {
        key: "",
        value: ""
    }];

    let value = {
        "wxgame": {
            "score": score,
            "update_time": Date.now()
        },
    };

    KVDataList[0].key = "rankName";
    KVDataList[0].value = JSON.stringify({
        "score": score
    });
    KVDataList[1].key = "rankName2";
    KVDataList[1].value = JSON.stringify(value);
    wx.setUserCloudStorage({
        KVDataList: KVDataList,
        success: function (res) {
            console.log("wx.setUserCloudStorage => 保存用户数据成功");
        }
    })
}

8.开放域

发消息到开放域,与开放域进行交互,常用于发消息请求开放域去获取好友排行信息,绘制排行榜

postMessage(data): void {
    let openDataContext = wx.getOpenDataContext()
    openDataContext.postMessage(data)
}

结语

以上是整理的全部核心内容,整理不易,时间宝贵,需要源工程的小伙伴可以阅读原文获取,付费不仅是知识的获取,更是对笔者的支持和认可,感谢!

我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。

AD:笔者线上的小游戏《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》大家可以自行点击搜索体验。

实不相瞒,想要个在看!请把该文章分享给你觉得有需要的其他小伙伴。谢谢!

推荐专栏:

你知道王者荣耀是怎么实现技能范围指示器的吗?

8年主程手把手打造Cocos独立游戏开发框架

和8年游戏主程一起学习设计模式

从零开始开发贪吃蛇小游戏到上线系列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1285189.html

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

相关文章

Node 后端 框架 Nest js鉴权

使用 nest g res auth去生成restful风格的auth模块,下面是具体操作 nest g res auth安装基础依赖 {"name": "auth","version": "0.0.1","description": "","author": "","…

第四节 数组

第四节 数组 目录 一. 一维数组的创建和初始化1. 一维数组的创建2. 数组的初始化3. 一维数组的使用4. 一维数组在内存中的存储 二. 二维数组的创建和初始化1. 二维数组的创建2. 二维数组的初始化3. 二维数组的使用4. 二维数组在内存中的存储 三&#xff…

梯度上升和随机梯度上升

目录 梯度上升算法: 代码: 随机梯度上升算法: 代码: 实验: 做图代码: 疑问: 1.梯度上升算法不适应大的数据集,改用随机梯度上升更合适。 2.改进过的随机梯度算法&#xff0…

1.nacos注册与发现及源码注册流程

目录 概述nacos工程案例nacos服务注册案例版本说明本地启动 nacos-server搭建 spring cloud alibaba 最佳实践服务注册案例服务订阅案例 nacos注册源码流程源码关键点技巧 结束 概述 通过本文,学会如何确定项目组件版本(减少可能出现的jar包冲突),nacos…

【Python】创建简单的Python微服务Demo与FastAPI

创建简单的Python微服务Demo与FastAPI 在微服务架构中,通过FastAPI框架创建一个简单的Python微服务Demo涉及多个步骤,包括定义服务、使用框架、进行通信等。在这篇文章中,我们将使用FastAPI框架创建两个简单的微服务,它们通过RES…

12月5日星期二今日早报简报微语报早读

12月5日星期二,农历十月廿三,早报微语早读。 1、国家卫健委:各地基层医卫机构要全面向儿童开放,不得拒诊; 2、五月天演唱会被指假唱,上海文旅局执法总队:已要求五月天演唱会主办方配合调查&am…

The Sandbox 携手 Sandsoft,与 Nuqtah 合作推动沙特阿拉伯的 Web3 发展

新的合作伙伴关系将增强创作者的能力,促进区块链生态系统的包容性。 The Sandbox 及其合作伙伴 Sandsoft 是移动游戏开发商和发行商,也是 AAA 人才驱动的投资者,他们非常高兴地宣布与 Nuqtah 建立新的合作伙伴关系,Nuqtah 是中东和…

MybatisPlus中的使用Wrapper自定义SQL

一、条件构造器 条件构造器提供了一种更加简洁和直观的方式来构建复杂的查询条件。它提供了一组静态方法,用于构建各种类型的查询条件,包括等于、不等于、大于、小于、包含等。使用条件构造器可以避免手动拼接SQL语句的麻烦,提高代码的可读性…

树莓派Python程序开机自启动(Linux下Python程序开机自启动)

前一阵子用python编写了一个驱动I2C程序读写屏幕,输出IP的小程序,程序编好后需要树莓派使能程序开机自启动。其实这些方法对任何Linux系统都适用。 方法一:此方法的缺点是不进入默认pi的账号,甚至不开hdmi开启桌面的话&#xff0…

关于栈的简单理解

1. 栈(Stack) 1.1 文字讲解 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则&a…

IP5316 2.4A 充电、2.4 A 放电、集成 DCP 功能移动电源 SOC

IP5316 2.4A 充电、 2.4 A 放电、集成 DCP 功能移动电源 SOC 简介: IP5316 是一款集成升压转换器、锂电池充电管理、电池电量指示的多功能电源管理 SOC,为移动电源提供完整的电源解决方案。得益于 IP5316 的高集成度与丰富功能,使其在应用时…

零信任组件和实施

零信任是一种安全标准,其功能遵循“从不信任,始终验证”的原则,并确保没有用户或设备受信任,无论他们是在组织网络内部还是外部。简而言之,零信任模型消除了信任组织安全边界内任何内容的概念,而是倡导严格…

外包干了2个月,技术明显退步了...

先说一下自己的情况,大专生,19年通过校招进入广州某软件公司,干了接近5年的功能测试,今年11月份,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测…

JS实现成才网注册系统(网页数据验证)

主代码 <!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv"Conten…

OpenGL ES 帧缓冲对象介绍和使用示例

一、介绍 1. 帧缓冲对象 默认情况下&#xff0c;OpenGL渲染的目标是屏幕&#xff0c;但如果你不想直接渲染到屏幕上&#xff0c;还需要对渲染结果做某些后期处理、渲染到纹理、阴影映射等操作&#xff0c;便可以使用帧缓冲对象&#xff0c;实现离屏渲染。 帧缓冲对象&#x…

DC电源模块的常见故障有哪些?

BOSHIDA DC电源模块的常见故障有哪些&#xff1f; DC电源模块是电子设备中常见的电源供应模块&#xff0c;它可以将交流电转化为直流电供给设备使用。然而&#xff0c;由于长期的使用和外界环境等因素的影响&#xff0c;DC电源模块也会出现各种故障。下面我们来介绍一下常见的…

【go语言开发】编写单元测试

本文主要介绍使用go语言编写单元测试用例&#xff0c;首先介绍如何编写单元测试&#xff0c;然后介绍基本命令的使用&#xff0c;最后给出demo示例 文章目录 前言命令示例 前言 在go语言中编写单元测试时&#xff0c;使用说明 测试文件命名&#xff1a;在 Go 语言中&#xff0…

蓝桥杯网络安全组竞赛

竞赛规则及说明 选拔赛时长&#xff1a;4h 决赛时长&#xff1a;4h 竞赛形式&#xff1a;线上比赛&#xff1a; 个人赛&#xff1a;一人一机&#xff0c;全程机考 大赛制定竞赛系统&#xff0c;在时间内提交答案到比赛系统&#xff0c;超时无法提交 机器环境&#xff1a; 电脑…

CSRF之pikachu靶场DW

1&#xff0c;登录皮卡丘靶场&#xff0c;get请求&#xff1b; 2&#xff0c;抓包并修改标记后的个人信息 最后放通一下&#xff0c;发现账号信息被修改 2&#xff0c;post请求 1提交post数据并使用bp抓包 2.利用工具改包&#xff0c;并生成url 3&#xff0c;点击提交后&#…

应用在触摸开关触控屏中的电容式触摸芯片

触摸开关是一种电子开关&#xff0c;使用时轻按开关按钮即可打开开关。松开手时&#xff0c;开关断开&#xff0c;内部结构由金属弹片受力弹动断开或者由电容值&#xff0c;电阻值等电气参数改变而控制。触摸开关一般是指应用触摸感应芯片原理设计的一种墙壁开关&#xff0c;是…