微信小程序-贪吃蛇开发6 画布,Canvas和tapStart、tapMove、tapEnd事件

本系列是作者自学实践过程的记录
本文是页面设计,包含Canvas和触摸开始,触摸移动等触摸事件
有问题欢迎讨论

一、前言,js介绍

// pages/snake/snake.js
Page({

  /**
 * 页面的初始数据,以键值对进行初始化
   */
  data: {
    score: 0, // 当前得分
    maxscore: 100, // 历史最高分
    start_x: 0, // 触摸开始横坐标
    start_y: 0, // 触摸开始纵坐标
    end_x: 0, // 触摸结束横坐标
    end_y:0, // 触摸结束纵坐标

    ground:[] // 存储操场的每个方块
  },

  /**
 * 生命周期函数--监听页面加载,当加载完成后执行的操作,例如获取用户登录数据
   */
  onLoad: function (options) {
  },

  /**
 * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
  },

  /**
 * 生命周期函数--监听页面显示
   */
  onShow: function () {
  },

  /**
 * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
  },

  /**
 * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
  },

  /**
 * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
  },

  /**
 * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
  },

  /**
 * 用户点击右上角分享
   */
  onShareAppMessage: function () {
  }
})

二、数据绑定

数据绑定是微信小程序非常核心的功能,wxml中所有动态的数据都是由此产生。
数据绑定使用 Mustache 语法(双大括号) 将变量包起来。
形如:

  • < view> {{ message }} < /view>,其中,message可以是数值、字符串、布尔等类型

不仅赋值,同时也可以在括号内进行算数运算、逻辑运算、字符串运算(拼接)。
本例中有得分和历史得分两个变量。
在这里插入图片描述
wxml如图
在这里插入图片描述
显示效果
在这里插入图片描述

三、概要设计

3.1 Canvas

学到这里,基本上页面的静态设计已经结束,现在要做的就是加上js使其获得动态改变的效果。
首先,由于是小程序,是需要进行绘制和进行触控事件的,所以我们需要将之前的所有页面嵌套进一个view标签中,然后给定触控事件。
绘制图像的组件叫做画布标签Canvas
对应属性和使用方法:

属性名作用
type指定 canvas 类型
canvas-idcanvas 组件的唯一标识符,若指定了 type 则无需再指定该属性
disable-scroll当在 canvas 中移动时且有绑定手势事件时,禁止屏幕滚动以及下拉刷新
bindtouchstart手指触摸动作开始
bindtouchmove手指触摸后移动
bindtouchend手指触摸动作结束
bindtouchcancel手指触摸动作被打断,如来电提醒,弹窗
bindlongtap手指长按 500ms 之后触发,触发了长按事件后进行移动不会触发屏幕的滚动
binderror当发生错误时触发 error 事件,detail = {errMsg}
对应API,我们这里需要的是CanvasContext,context是上下文的意思,这个API提供的便是Canvas的上下文内容。目前CanvasContext已经被Canvas 2D取代了。
简单的使用:
  /**
 * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 创建对象
    const ctx = wx.createCanvasContext('canvas')
    // 设置颜色
    ctx.setFillStyle("pink")
    // 绘制一个矩形,前面两个为矩形左上角的横纵坐标,后两个数据是矩形的长和高
    ctx.fillRect(10,10,150,75)
    // 开始绘制
    ctx.draw()
  }

效果:
在这里插入图片描述

3.2 事件与行为

定义:

  • 事件是视图层到逻辑层的通讯方式。
  • 事件可以将用户的行为反馈到逻辑层进行处理。
  • 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。
  • 事件对象可以携带额外信息,如 id, dataset, touches。

使用:

  • < view id=“tapTest” data-hi=“Weixin” bindtap=“tapName”> Click me! </ view>,这里事件只需要写名字,和js有区别
  • 类似于HTML中的< button onlick = “function()”></ button>,只要发生对应的动作,这个函数事件就会响应

事件分类

类型触发条件
tap单击
longpress长按
dbtap双击
touchmove滑动
touchstart触摸开始
touchend结束触摸

这样,我们就可以进行触摸事件的添加了。

四、详细设计

4.1 添加开始触摸函数

先在标签内添加触摸开始组件

  • < view class=“control” bindtouchstart=“tapstart”>

然后在js里定义tapstart函数,形式为:名称:function(参数) { }

  // 手指触摸开始函数,参数e是event对象,系统自动传回
  tapstart:function(e){
    console.log("开始点击")
    console.log(e)
  }

console.log()是在控制台输出,相当于printf()

运行效果:
在这里插入图片描述
这里的e输出的是json数据,,具体内容如图:
e的数据
这里最主要用到的是touches的属性,我们可以看出它的类型是Array, 包括了横纵坐标,接下来我们要获取它的横纵坐标,我们只需要和获取json数据的方法一样即可。

4.2 触摸移动函数

在标签内添加触摸移动组件:

  • < view class=“control” bindtouchstart=“tapstart” bindtouchmove=“tapmove”>

然后在js内部定义tapmove函数

  // 手指触摸移动函数
  tapmove:function(e){
    console.log("move")
    console.log(e)

    this.setData({
      end_x : e.touches[0].pageX,
      end_y : e.touches[0].pageY
    })
  }

运行效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小子挺不错

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值