# 二维逻辑脚本使用

本章节主要介绍二维场景下,如何编写与使用脚本。 如简单的触摸、点击处理,增删场上节点组件

脚本组件可以认为是普通的组件,与普通组件一起执行 生命周期更新

# 使用逻辑

  1. 新建逻辑脚本 Project面板 右键 - 新建 - script 新建逻辑脚本
  2. 编写所需脚本内容 默认脚本内容
  3. 将脚本组件添加到所需节点。

# 获取/增删场上节点组件

  1. 获取节点, 根据名称,遍历节点 Transform 树,匹配返回对应节点 Transform
public getChildByName(transform, name) {
    const getNode = transform.findChildByName(name);
    if (getNode === null) {
      for (let i = 0; i < transform._children.length; i++) {
        const childNode = this.getChildByName(transform._children[i], name);
        if (childNode != null) {
          return childNode;
        }
      }
      return null;
    } else {
      return getNode;
    }
  }
  1. 增删节点 查看详情
// 增加节点
parentTransform.addChild(transform);
// 删除节点
parentTransform.removeChild(transform);
transform.destroy();
// ...
  1. 获取/增加组件 查看详情
// 增加组件
entity.addComponent(engine.UISprite);
// 获取节点
const comp = entity.getComponent(engine.UISprite);
// ...

# 触摸、点击挂载

  • 若脚本组件挂载的节点,带有 TouchInputComponent 组件, 可直接于脚本组件添加内置的各触摸点击处理函数使用。
export default class touchHandler extends engine.Script {

  public onTouchStart(t: engine.TouchInputComponent, e: TouchInputEvent){}
  public onTouchMove(t: engine.TouchInputComponent, e: TouchInputEvent){}
  public onTouchEnd(t: engine.TouchInputComponent, e: TouchInputEvent){}
  public onTouchCancel(t: engine.TouchInputComponent, e: TouchInputEvent){}
  public onTouchEnter(t: engine.TouchInputComponent, e: TouchInputEvent){}
  public onTouchLevel(t: engine.TouchInputComponent, e: TouchInputEvent){}
  public onTouchOver(t: engine.TouchInputComponent, e: TouchInputEvent){}
  public onTouchOut(t: engine.TouchInputComponent, e: TouchInputEvent){}
  public onTouchUp(t: engine.TouchInputComponent, e: TouchInputEvent){}
  public onClick(t: engine.TouchInputComponent, e: TouchInputEvent){}

}
  • 脚本获取带有 TouchInputComponent 组件的节点, 通过监听器的形式添加组件
function touchStartHandler (t: engine.TouchInputComponent, e: TouchInputEvent) {}

const touchTransform = this.getChildByName(this.entity.transform2D, 'close-button');
const buttonClose = touchTransform.entity.getComponent(engine.TouchInputComponent);
buttonClose.onTouchStart.add(touchStartHandler);
// ...

# 触摸、点击使用

export default class touchHandler extends engine.Script {

  public onTouchMove(t: engine.TouchInputComponent, e: TouchInputEvent){
    // 当前点击事件
    const changedTouch = e.touches[0];

    // 当前点击坐标
    const clientX = changedTouch.clientX;
    const clientY = changedTouch.clientY;
  }
}