微信小程序实现刮刮乐,并计算百分比(基于uniapp)

页面

<canvas 
	canvas-id="canvas" 
	id="canvas" 
	class="canvas"
	:style="{
		backgroundImage: `url(${canvasBackgroundImage})`,
	}" 
	@touchstart.stop="handleCanvasTouchStart"
	@touchmove.stop="handleCanvasTouchMove"
	@touchend.stop="handleCanvasTouchEnd"
></canvas>

JS

    onShow() {
        this.initCanvas()
	},
	
	onHide() {
		this.clearTimer()
	},
	
	onUnload() {
		this.clearTimer()
	},

    methods: {
		clearTimer() {
			clearTimeout(this.intervalTime)
			this.intervalTime = null
	    },

        initCanvas() {
			this.ctx = uni.createCanvasContext('canvas')
			setTimeout(() => {
				uni.createSelectorQuery().select('#canvas').boundingClientRect().exec(res => {
					this.canvasW = res[0].width
					this.canvasH = res[0].height
					this.canvasTop = res[0].top
					this.canvasLeft = res[0].left
					uni.downloadFile({
						url: 'https://image.51cheyaoshi.com/xcx/app/static/partner/prize-mask.png',
						success: (imgRes) => {
							this.ctx.drawImage(imgRes.tempFilePath, 0, 0, this.canvasW, this.canvasH)
							this.ctx.draw()
							this.canvasBackgroundImage = 'https://image.51cheyaoshi.com/xcx/app/static/partner/prize1.png'
						},
					})
				})
			})
		},
		
		handleCanvasTouchStart(e) {
			this.status = true
		},
		
		handleCanvasTouchMove(e) {
			if (this.status) {
				const x = e.changedTouches[0].pageX - this.canvasLeft
				const y = e.changedTouches[0].pageY - this.canvasTop
				this.ctx.clearRect(x-this.r/2, y-this.r/2, this.r, this.r)
				this.ctx.draw(true, () => {
					if (!this.intervalTime) {
						this.intervalTime = setInterval(() => {
							this.getFilledPercentage()
							this.clearTimer()
						}, 200)
					}
				})
			}
		},
		
		handleCanvasTouchEnd(e) {
			this.status = false
		},
		
		getFilledPercentage() {
			if (this.status) {
				uni.canvasGetImageData({
				  canvasId: 'canvas',
				  x: 0,
				  y: 0,
				  width: this.canvasW,
				  height: this.canvasH,
				  success: (imgData) => {
				    // imgData.data是个数组,存储着指定区域每个像素点的信息,数组中4个元素表示一个像素点的rgba值
						const pixels = imgData.data
						
						const transPixels = []
						for (let i = 0; i < pixels.length; i += 4) {
							// 严格上来说,判断像素点是否透明需要判断该像素点的a值是否等于0,
							// 为了提高计算效率,这儿设置当a值小于128,也就是半透明状态时就可以了
							if (pixels[i + 3] < 128) {
								transPixels.push(pixels[i + 3])
							}
						}
						const rate = (transPixels.length / (pixels.length / 4) * 100).toFixed(2)
						if (rate > 60) {
							this.ctx.clearRect(0, 0, this.canvasW, this.canvasH)
                            this.clearTimer()
						}
				  }
				})
			}
		},

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
美容化妆企业微信小程序官网,后台管理更新微信小程序上数据信息,测试无Bug,感兴趣的欢迎下载 1、 后台内容管理:管理网站的pc和wap端的产品、文章、单页等管理、有多状态(置顶、推荐、热门、评论、幻灯片)设置、附件(压缩包、视频、音频、图片)上传、多图上传管理、拓展字段信息编辑等 2、 后台会员系统:会员列表、会员基本信息,积分明细、余额明细、购物记录、收货地址(在系统设置的频道管理可以开启此功能) 3、 后台订单:订单列表,订单基本信息、订单退款、订单发货 (在系统设置的频道管理可以开启此功能) 4、 后台其他管理:评论管理 、留言管理 、友情链接、广告管理 、 门店管理、图片管理、优惠卷管理 等功能 5、 后台系统设置:导航栏目、分类管理、 OAuth设置 、支付设置、扩展字段 、频道管理、模型管理、站点基本信息等功能设置 6、 后台拓展字段管理:配置网站需要的字段(图片、文本、富文本、时间、多选、单选)在前台进行数据显示(在系统设置的频道管理可以开启此功能) 7、 后台短信管理:管理短信发送、发送日志管理(在系统设置的频道管理可以开启此功能) 8、 后台微信管理:自定义菜单 、文本回复、 图文回复 、关键字回复 、首次关注回复 、 授权设置等(在系统设置的频道管理可以开启此功能) 9、 后台抽奖管理:大转盘抽奖 、刮刮乐抽奖 、 随机抽奖等(在系统设置的频道管理可以开启此功能) 10、后台系统用户管理: 管理员列表、角色管理 、 管理日志等(在系统设置的频道管理可以开启此功能) 11、后台支付管理: 微信支付 、支付宝支付 、 银联支付等(在系统设置的频道管理可以开启此功能)
Matlab是一种强大的编程语言和开发环境,提供了许多功能和工具,可以用于各种应用程序的开发。基于GUI(图形用户界面)的刮刮乐游戏是其中的一个应用例子。 首先,我们可以使用Matlab中的GUI设计工具创建一个用户界面窗口。该窗口包含一个刮刮乐区域和一些按钮和标签等控件。用户可以使用鼠标或触摸屏进行刮刮乐操作。在刮刮乐区域下方,我们可以显示一些文字或图片作为奖励。 然后,我们需要在Matlab中编写相应的代码来实现刮刮乐的功能。当用户点击刮刮乐区域时,我们可以使用随机数生成一个奖励结果。这个结果可以是一个数字、一个符号或一张图片,代表不同的奖励等级。我们可以根据奖励结果设置刮刮乐区域的显示。当用户刮开一定比例的区域时,我们可以将奖励结果显示出来。 此外,我们还可以在界面中加入一些额外的功能,如计分系统、倒计时或音效等,增加游戏的趣味性和挑战性。我们可以通过编写相应的代码实现这些功能,并将它们与界面控件进行绑定,使用户能够与它们进行交互。 综上所述,基于GUI的刮刮乐游戏是通过Matlab的功能和工具实现的。它提供了一个交互式界面,让用户能够刮开区域获得不同的奖励。这个游戏不仅可以作为一种娱乐方式,还可以用于教学、宣传活动等。通过几百行的代码,我们可以轻松创建一个简单而有趣的刮刮乐游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值