前端口袋小册-第 57 期

# Phaser3 container 容器事件绑定

container 用作包围、佷容器

通常用于游戏对象批量、整体处理

比如位移、旋转等操作

一般不会直接绑定事件

但由于本身提供了 setInteractive 方法

用于开启事件监听能力

所以也是可以绑定事件的

先看下官方的例子

通过添加一个响应区域容器及对应的回调实现事件绑定

// 点击区域偏移通过修改 Rectangle 的 x、y 坐标处理
// container 容器会随着发生位移
let rect = new Phaser.Geom.Rectangle(100, 100, 300, 300)
this.add
  .container()
  .setInteractive(rect, Phaser.Geom.Rectangle.Contains)
  .on('pointerdown', () => {
    console.log('clicked')
  })
1
2
3
4
5
6
7
8
9

这显得有点啰嗦

更简洁一点的做法

通过 setSize 设置事件响应内置宽高

由于 container 默认原点是中心点

而且不能通过 setOrigin 设置原点(锚点)坐标

所以要实现 300x300 点击区域大小

要将 container 容器向右、向下移动 300 的 1/2

即 150 距离

this.add
  .container(300 / 2, 300 / 2)
  .setSize(300, 300)
  .setInteractive()
  .on('pointerdown', () => {
    console.log('clicked')
  })
1
2
3
4
5
6
7

这个好处在于不用绑定额外的事件响应区域

缺点在于需要明确容器尺寸大小

# 优质搜罗

# HTML 骚操作

前端开发中会有一些不为人所熟知的特性

比如 ol 元素 start 属性设置起始索引

mark 标签的文本高亮

更多 HTML 特性详见 (opens new window)

# 几个不错的 JS 操作

1.向下取整

// 通常
Math.floor(1.2) // 1

// 可用按位非操作符
~~1.2 // 1
1
2
3
4
5

2.指数数字

// 表示 10000
1e4 // 10000
1
2

3.数组 indexOf 优雅地判断

var arr = [1, 2, 3, 4]

// 判断数组中是否存在 2 元素
if (arr.indexOf(2) > -1) {
  // 存在 ...
}
if (arr.indexOf(2) === -1) {
  // 不存在...
}

// 使用按位非处理
// 结果 > -1 时
// 处理后结果为负数,负数为真值,即当成 true 看待
if (~arr.indexOf(2)) {
  // 存在...
}

// 如果值为 -1 时
// 按位非处理后为 0
// 取反,结果为 true
if (!~arr.indexOf(2)) {
  // 不存在
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

4.判断奇偶

  • 奇数 & 1 // 1
  • 偶数 & 1 // 0
13 & 1 // 结果为 1,表示 13 为奇数

10 & 1 // 结果为 0,表示 10 为偶数
1
2
3

# 聊点别的

15 老款的 Mac 换了个电池

官方线下店与自己换价格相差了几倍

比如,自换的 280 块

到线下店可能是 8、9 百块

多出来的钱买点好吃的不行嘛

而且换电池

也不是啥有技术含量的活

配上说明书

过程甚是丝滑

记得一定要买解胶水

要不拆电池的过程就让你怀疑到底做错了啥

扫一扫,微信中打开

微信二维码