做了一个绑定视图和数据的小工具bindview, 再也不用烦恼数据更新了;-)

做了一个绑定视图和数据的小工具bindview, 用于cocos creator.
功能是将一个javascript object或者array与节点绑定, 控制该节点下的label和sprite的更新. 这样更新js数据就可以实时更新label和sprite了. 算是一种简单的MVVM实现. 目前托管在github上.

点击进入github项目页面
请大家多提意见, 希望对大家有用!

中文版:

bindview

Bindview 是一个cocos creator的工具,可以将JavaScript的数组和对象与节点、prefabs、标签、精灵绑定。更新数组和对象就可以更新游戏界面。

JavaScript的对象可以和节点绑定。例如一个名为fatherNode的节点,在层级管理器中是这样的:

fatherNode
|-name //a label
|-birthday // another label
|-avatar // a sprite

JavaScripte的对象是这样的:

// javascript object
var person = {
    name: "Jacques Yang",
    birthday: "1984-6-4",
    avatar: new cc.SpriteFrame()
}

把fatherNode和对象person绑定,然后修改person的属性值,fatherNode就会自动更新。

示例工程

  1. git clone这个项目,用Cocos Creator打开并运行它。

    git clone https://github.com/darceye/bindview.git
    
  2. 示例项目的资源结构:

    assets
    |-Scene
      |-bindview.fire  // Demo Scene.
    |-js // Main files of bindview.
      |-bindview.js // Core functions.
      |-view.js // Cocos Creator JS component. Drag it to a node which you want to bind with.
    |-prefab
      |-child.prefab // Prefab for demo.
    |-resources
      |-headsatlas.plist // Used for demostrating sprite binding.
      |-heads.png
    |-testdata  // Js files for demo. 
      |-data.js  // Data bound with labels and sprites. Any changing of data will be shown on labels and sprites.
      |-edit.js  // For editing on Demo scene.
      |-imgload.js // Load images from resources, and set SpriteFrame data. 
    
  3. 在浏览器中运行bindview场景,修改name, birthday, avatar ID或者array index,然后点击Set。可以看到文字和精灵会立刻改变。试着点击Push()或者Pop()来为数组增加新元素和删除一个元素。你也可以在浏览器的console中进行测试试用。

  4. 现在看一下“层级管理器”面板,Canvas下面有如下三个节点,他们都有个view组件:

  • objectAndNode. view组件中bind type 是 OBJECT_AND_THIS_NODE,它和data[0]绑定。
  • arrayAndFirstChild. view组件中bind type 是 ARRAY_AND_FIRST_CHILD。它将data和他的第一个子节点child绑定。
  • arrayAndPrefab.view组件中bind type 是 ARRAY_AND_PREFAB,prefab属性设置为child,该prefab在资源管理器的assets/prefab下。它将data和prefab绑定.

使用简介

  1. 把 bindview.js 和 view.js复制到assets 目录下;

  2. 拖动 view.js 到你想要绑定的节点上,我们先称之为父节点;

  3. 设置bind type, data file , 和 data key.

  4. 如果是绑定一个数组:

  • 数组与Prefab绑定(ARRAY_AND_PREFAB): 新建一个你想绑定的prefab。注意这个prefab只能有一个根节点。根节点下的文字和精灵将会被绑定。将prefab拖入 "father node -> view component -> prefab"中;

  • 数组与首个子节点绑定(ARRAY_AND_FIRST_CHILD): 在父节点下新建一个子节点。子节点下的文字和精灵将会被绑定。该子节点应该是父节点的第一个子节点。

  1. 对象和父节点绑定(OBJECT_AND_THIS_NODE), 父节点下的文字和精灵将会被绑定

  2. 新建一个数据js文件, 例如: “data.js”。 文件名需要和你填写在view组件Data File中的一致

  3. 如果是绑定数组, 那么数据文件需要导出数组。数组的元素将和父节点下的子节点依次绑定。数组元素的键值应该和子节点下的文字节点或精灵节点的名称相同。

  4. 如果是绑定对象,那么数据文件应该导出对象。对象属性的键值应该和父节点的文字节点或精灵节点的名称相同。

  5. 如果绑定文字节点, 那么属性值的类型应该是字符串,如果是绑定精灵节点,属性值应该是空的cc.SpriteFrame。例如:

module.exports = {
    name: "Jacques Yang",
    birthday: "1984-6-4",
    avatar: new cc.SpriteFrame()
}

如果是数组,应该看起来是这样的:

module.exports = [{
        name: "Jacques Yang",
        birthday: "1984-6-4",
        avatar: new cc.SpriteFrame()
    }, {
        name: "Penguin",
        birthday: "1999-3-1",
        avatar: new cc.SpriteFrame()
    }
]
  1. 完成了!此时如果要修改文字和精灵,修改data就可以了!
    // For example, Bind object and node.
    var data = require('data')
    data.name = "new name"
    //....
    

联系我

QQ: 1329046779 (加的时候请说来自于github或者cocos论坛)
Mail: 1329046779@qq.com

小广告: 练手益智小游戏 欢乐24点, 也欢迎大家提意见!

Download from Google Play

Web Version

6赞

二楼是我固有领土,我有无可争议的领土主权

推工具!! 感謝分享

弄一堆英文,好哪了呢:joy:

呵呵, 晚些出个中文的.

厉害了~ @nantas 看看?

web version 会报错

论坛是真香,天天白嫖,不嫖又不行,这里的老哥个个都是人才,写的代码都很好看

mark…

mark!!!