Spine 骨骼动画

Spine 是一款专门为软件和游戏开发者量身打造的 2D 动画软件。动画师、原画师和工程师共同为您的游戏赋予生命。使用 Spine 骨骼动画可以实现一些更加丰富的效果,相对于帧动画能够更好的减少内存占用。Spine 是收费软件,请购买后使用,Spine 官网:http://zh.esotericsoftware.com/。目前支持 Spine 版本为:3.6 / 3.8 / 4.0,版本之间资源不兼容,可以在这里查看如何设置

安装

当前支持 spine 的 3.6 / 3.8 / 4.0 版本,可以根据版本选择不同npm包。

  • 3.6 @eva/plugin-renderer-spine
  • 3.8 @eva/plugin-renderer-spine38
  • 4.0 @eva/plugin-renderer-spine40

使用 NPM

  1. npm i @eva/plugin-renderer @eva/plugin-renderer-spine

在浏览器中

  1. <script src="https://unpkg.com/@eva/plugin-renderer-spine@1.2.x/dist/EVA.plugin.renderer.spine.min.js"></script>

使用

  1. import { Game, GameObject, resource, RESOURCE_TYPE } from '@eva/eva.js'
  2. import { RendererSystem } from '@eva/plugin-renderer'
  3. import { Spine, SpineSystem } from '@eva/plugin-renderer-spine'
  4. resource.addResource([
  5. {
  6. name: 'anim',
  7. type: 'SPINE',
  8. src: {
  9. ske: {
  10. type: 'json',
  11. url: 'https://pages.tmall.com/wow/eva/b5fdf74313d5ff2609ab82f6b6fd83e6.json'
  12. },
  13. atlas: {
  14. type: 'atlas',
  15. url: 'https://pages.tmall.com/wow/eva/b8597f298a5d6fe47095d43ef03210d4.atlas'
  16. },
  17. image: {
  18. type: 'png',
  19. url: 'https://gw.alicdn.com/tfs/TB1YHC8Vxz1gK0jSZSgXXavwpXa-711-711.png'
  20. }
  21. }
  22. }
  23. ])
  24. const game = new Game({
  25. systems: [
  26. new RendererSystem({
  27. canvas: document.querySelector('#canvas'),
  28. width: 750,
  29. height: 1000
  30. }),
  31. new SpineSystem()
  32. ],
  33. autoStart: true,
  34. frameRate: 60
  35. })
  36. game.scene.transform.size = {
  37. width: 750,
  38. height: 1000
  39. }
  40. const gameObject = new GameObject('spine', {
  41. anchor: {
  42. x: 0.5,
  43. y: 0.5
  44. },
  45. scale: {
  46. x: 0.5,
  47. y: 0.5
  48. }
  49. })
  50. const spine = new Spine({ resource: 'anim', animationName: 'idle' })
  51. gameObject.addComponent(spine)
  52. spine.on('complete', e => {
  53. console.log('动画播放结束', e.name)
  54. })
  55. spine.play('idle')
  56. game.scene.addChild(gameObject)

参数

resource string

资源名称

animationName string

动画名

方法

play(name?: string, loop?: boolean)

播放动画

  • name 动作名
  • loop 是否循环播放

stop()

停止播放