# uneed2d migration

## v3.0.1 to v3.0.2

`v3.0.2` 改变了 `UN.createSprite`方法：

```
// 原来
UN.createSprite(textureOrImageSrc, anchorX, anchorY)
// 现在，第一个参数指明该sprite将被添加到何处，而不再需要手动addChild了
UN.createSprite(parent, textureOrImageSrc, anchorX, anchorY)
// 现在，可以使用更简洁的方法名
UN.sprite(...)
```

新API：

* UN.text, UN.createText
* UN.graphics, UN.createGraphics
* UN.entity, UN.createEntity

> 以上方法第一参数都可以指定被添加到何处，而不用手动addChild，少量的节省代码行数
> 详细请参看: utils/index.js

## v2 to v3

### Tween API

* start方法已经被去掉，现在自动start，如需要暂停，请使用pause/resume
* promise返回的不再是Q.js的promise，而是一个标准的Promise，因此没有done方法
* TweenManager.create方法将无法创建全局tween，该概念将在此版本丢弃，并且TweenManager的to方法可以直接创建tween
* UN.initTween已经失效，保留只为考虑方法调用兼容
* 添加更方便的easing tween方法：例如，this.tween.backOut({ x: 0 }, 1000)，详情看`src/tween/Tween.js`代码

### core.js

* 目前通过babel-polyfill内置core.js的`ES5/ES6/stage-0~3`的所有api
* 有了core.js，因此我们直接使用标准的Promise对象，而不是使用Q.js

### async/await support

> 使用此支持前请更新uneed2d-cli

有async/await支持后的对比

```javascript
class A extends Entity {

  playTweenA() {
    this.tween.to({
      scale: 1
    }, 100).promise()
  }

  playTweenB() {
    this.tween.to({
      xy: 100
    }, 100).promise()
  }

  onTweenEnd() {

  }

  // 无async/await
  test() {
    this.playTweenA()
      .then(() => {
        return new Promise((resolve) => {
          this.scheduler.frame(resolve, 10)
        })
      })
      .then(() => this.playTweeenB())
      .then(() => UN.Q.delay(1000))
      .thne(() => this.onTweenEnd())
  }

  // Awesome!!! 有async/await
  async testAsync() {
    await this.playTweenA()
    await this.scheduler.waitFrame(10)
    await this.playTweenB()
    await this.scheduler.wait(10000)
    this.onTweenEnd()
    return 100
  }

  // 调用时如果不想在async方法调用
  testThen() {
    // async方法返回的是promise
    this.testAsync().then((value) => {
      console.log('async method complete ' + value) // async method complete 100
    })
  }

  // async call async method
  async testCallAsync() {
    let value = await this.testAsync()
    console.log(value) // 100
  }
}
```

### 其他升级约定

* 尽量不使用Q.js，而是用async/await和scheduler