news 2026/10/29 2:14:19

微信小程序实战:传感器应用与“变脸游戏”开发(附动态计数功能)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微信小程序实战:传感器应用与“变脸游戏”开发(附动态计数功能)

一、 实验目的

本次实验基于《案例 5.1 变脸游戏》,旨在掌握微信小程序中wx.onAccelerometerChange(function listener)接口的使用方法。通过监听手机加速度计,实现摇晃手机触发“摇一摇”事件。结合Math.random()随机函数和setData数据绑定,实现点击图片或摇晃手机时随机切换脸谱,并在基础功能上扩展实现“动态显示累计变脸次数”的功能。

二、 项目准备与配置

1. 新建项目
打开微信开发者工具,新建一个项目,后端服务选择“不使用云服务”,模板选择“不使用模板”。

2. 准备图片资源
在项目根目录(与pages文件夹同级)下新建images文件夹,放入 14 张脸谱图片,分别命名为01.png到14.png。
(注:必须放在根目录,否则使用/images/xx.png绝对路径时会报 500 错误)

3. 修改app.json
配置小程序顶部的导航栏标题。

{ "pages": [ "pages/index/index" ], "window": { "navigationBarTitleText": "变脸游戏", "navigationBarBackgroundColor": "#ffffff", "navigationBarTextStyle": "black" } }

三、 核心代码实现

1. 页面结构 (index.wxml)
使用<image>组件展示脸谱,绑定点击事件bind:tap;并在底部新增一个<view>用于显示累计变脸次数。

<view class="box"> <view class="title">wx.onAccelerometerChange示例</view> <!-- 脸谱图片,绑定点击事件 --> <image src="{{faces[index]}}" mode="widthFix" bind:tap="changeFace" /> <!-- 扩展要求:动态显示累计变脸次数 --> <view class="count-text">累计变脸总次数:{{changeCount}}</view> </view>

2. 页面样式 (index.wxss & app.wxss)
让界面布局美观,脸谱居中显示,计数文本醒目。

app.wxss:

.box { padding: 20rpx; border: 2rpx solid purple; margin: 20rpx; display: flex; flex-direction: column; align-items: center; } .title { font-size: 40rpx; font-weight: bolder; text-align: center; margin-bottom: 30rpx; color: rebeccapurple; }

index.wxss:

page { height: 100vh; display: flex; flex-direction: column; } image { margin: 20rpx; width: 600rpx; height: 600rpx; border-radius: 50%; } /* 扩展要求:次数文本样式 */ .count-text { font-size: 36rpx; font-weight: bold; color: blue; text-align: center; margin-top: 20rpx; }

3. 逻辑处理 (index.js) —— 包含计数器与摇一摇
在data中定义图片数组、当前索引和累计次数。编写随机生成索引的函数,并在onShow生命周期中开启加速度监听。

Page({ data: { index: 0, // 当前显示的图片索引 changeCount: 0, // 扩展要求:累计变脸次数 faces: [ '/images/01.png', '/images/02.png', '/images/03.png', '/images/04.png', '/images/05.png', '/images/06.png', '/images/07.png', '/images/08.png', '/images/09.png', '/images/10.png', '/images/11.png', '/images/12.png', '/images/13.png', '/images/14.png' ] }, // 产生 [0, n) 之间的随机数 createRandomIndex(n) { return Math.floor(Math.random() * n); }, // 核心:换脸函数(点击或摇一摇触发) changeFace() { let newIndex = this.createRandomIndex(this.data.faces.length); // 防止随机到与当前相同的图片(优化体验) while (newIndex === this.data.index && this.data.faces.length > 1) { newIndex = this.createRandomIndex(this.data.faces.length); } // 更新图片索引,并累加变脸次数 this.setData({ index: newIndex, changeCount: this.data.changeCount + 1 // 扩展功能:每次换脸加1 }); }, // 生命周期函数:监听加速度计(摇一摇) onShow() { wx.onAccelerometerChange((res) => { // 判断 X、Y、Z 任一轴的加速度绝对值是否超过阈值 (0.5) if (Math.abs(res.x) > 0.5 || Math.abs(res.y) > 0.5 || Math.abs(res.z) > 0.5) { this.changeFace(); // 摇动触发换脸及计数 wx.showToast({ title: '摇一摇成功', icon: 'success', duration: 1000 }); } }); }, // 生命周期函数:页面隐藏时关闭加速度监听,节省性能 onHide() { wx.offAccelerometerChange(); } });

四、 运行效果展示

  1. 点击换脸:点击页面中央的脸谱,脸谱会随机切换,底部的“累计变脸总次数”随之 +1。

  2. 摇一摇换脸:在微信开发者工具的模拟面板中(或使用真机),点击“摇一摇”模拟加速度变化。页面会弹出摇一摇成功的提示框,同时脸谱切换,累计次数 +1。

运行截图:

五、 实验总结

通过本次实验,我掌握了小程序传感器 API 的基本调用流程。在排错过程中,再次深刻理解了小程序绝对路径的使用规则(图片必须放在根目录的images下才能被/images/xxx.png正确读取)。扩展功能的实现让我更加熟悉了this.setData的数据驱动视图机制,实现了数据的动态渲染。同时,在onHide中取消监听wx.offAccelerometerChange也是一个重要的性能优化习惯。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/29 2:13:12

微信小程序案例 《4.10 canvas 画布组件》

案例需求页面展示type"2d"新版 canvas 画布&#xff0c;蓝色背景&#xff1b;手指在画布滑动可以自由绘制线条。bindtouchstart手指按下&#xff0c;设置绘图起点&#xff1b;bindtouchmove手指移动持续画线。 3.【清空画布】按钮&#xff0c;调用clearRect清除画布全…

作者头像 李华
网站建设 2026/10/29 2:12:55

Codex 插件打包前漏了什么?用目录树检查 Skill、MCP 和最小测试

Codex 插件打包前漏了什么?用目录树检查 Skill、MCP 和最小测试 插件在本机能跑、装到别处却找不到 Skill,通常不是模型问题,而是包内路径或声明不一致。发布前用目录树检查,可以先发现最便宜的错误;以下是本地文件检查,不涉及上传或安装。 先核对三份声明是否能互相指…

作者头像 李华
网站建设 2026/10/29 2:12:24

一个 CDN 触发的数据出境:后端组件排查手册

有个做跨境独立站的团队被问了一个问题&#xff1a;“你们有没有数据出境&#xff1f;” 技术负责人很确定&#xff1a;没有&#xff0c;服务器全在境内。 但把域名解析记录、客户端上报日志、第三方脚本清单摆出来之后&#xff0c;结论反转了&#xff1a;站点引用了境外 CDN、…

作者头像 李华
网站建设 2026/10/29 2:12:04

移动网络与卫星互联网终端模组的AT指令备忘

2026年10月开发中使用鼎桥通信的5G模组MT5710上网&#xff0c;回忆到2025年10月应用睿普康集成电路的801天通模组https://www.rpcom-micro.com/product/satellite_chip/17.html实现两台终端间拨号以通话形式传输数据。好奇所用到的各自手册中定义的一些AT指令&#xff0c;通话与…

作者头像 李华
网站建设 2026/10/29 2:11:52

职业倦怠不是懒惰,是长期透支发出的信号

职业倦怠不是懒惰&#xff0c;是长期透支发出的信号 越来越多上班族在工作一段时间后&#xff0c;会出现这样的状态&#xff1a;早晨起床想到上班就提不起劲&#xff0c;工作越来越应付&#xff0c;曾经能带来成就感的事情变得索然无味&#xff0c;身体也频繁出现疲惫、失眠、头…

作者头像 李华
网站建设 2026/10/29 2:11:25

局域网网页控灯验收:ESP-IDF v6.1 用 STA IP 开灯 / 关灯

文章目录局域网网页控灯验收&#xff1a;ESP-IDF v6.1 用 STA IP 开灯 / 关灯一、前置准备二、验收目标三、业务链路与两种网络模式3.1 请求链路&#xff08;记这一句&#xff09;3.2 SoftAP 与 STA&#xff1a;用途不同四、分步实操4.1 拿到 STA 局域网 IP4.2 手机回到家里主 …

作者头像 李华