custom properties and using exported date of rube
2013-09-15 17:25
507 查看
用户自定义的特性:
有的时候你想更物理对象更多的信息,可以把这些信息做为用户自定义特性加到一个物体类,然后就跟前面的一样设置这个特性的值。下面的类可以增加用户特性:1.刚体
2.夹具
3.关节
4.图片
5.世界
一个用户自定义的特性可以是整型、浮点型、字符串、向量或者布尔型。
用户自定义的特性以***显示在特性栏里面,用户自定义特性保存在.rube场景文件里面,所以每个场景文件包含一个用户自定义特性集
创建用户自定义的特性:
在[场景设置对话框],用户自定义特性可以被创建、编辑和删。为了增加一个新的特性,你应该指定特定的类、类型、名字和显示的名字。类指定了它属于哪种物理特性,而类型则指定了用户特性类型。
名字是一个用户自定义特性的简写,它可以做为一个脚本可用的字符串,这也意味着它只可以含有字母。这个名字可以用来在脚本中访问这个用户自定义特性,而且可以导出
JSON原始数据文件。
你可以撤消/重写所有的用户自定义的操作:创建、编辑和删除。只有一点需要注意的是:每个独立的改变都对应一个撤消操作,并且这种变化会马上生效,即使[场景设置对话框]都是打开的状态。比如,如果你打开[场景设置对话框],并且增加了三个特性,当你关闭了对话框之后,你需要撤消三次去反转这个操。如果你有疑问,你可以去[编辑菜单]下面去看看撤消操作的文字说明。
管理用户自定义的特性:
凡是在[场景设置对话框]里面可以编辑的特性,都可以用脚本来完成,下面还有些全局脚本函数用来创建和修改用户特性:bool addCustomProperty(string class, string name, string displayName, string type); bool removeCustomProperty(string class, string type); bool setCustomPropertyNames(string class, string oldName, string newName, string newDisplayName);
你可以用下面的函数来查询单个的物体里面的用户自定义特性:(其中物体包含世界、刚体、夹具、关节和图片)
string[] item::getCustomProperties(); string item::getCustomPropertyType(string name); bool item::hasCustomProperty(string name);
你可以设置、得到或者清理单个的物体的用户自定义特性,只要熟悉下面的这些函数就可以了:
void item::setCustomInt(string name, int val); void item::clearCustomProperty(string name); int item::getCustomInt(string name);
使用导出的数据:
为了导出一个适合你自己的应用程序使用的格式,你只需要选择[导出场景]-〉[保存原始信息],这样就会导出一个.json文件,这个文件保住所有的可用物理世界信息,但是这个导出文件跟R.U.B.E自己使用的文件有细微的区别。要使用R.U.B.E编辑的物理世界,就要求你的程序可以一个JSON加载器,当前有三种语言可以加载JSON文件,分别是C++、J***A和J***ASCRIPT
你可以在sampleLoaders文件夹里面找到一个应用这些语言的例子
支持的加载器:
因为我只会C++,所以我只翻译C++的部分:C++使用b2dJson来加载R.U.B.E的导出文件,在网上有完整的使用指南,并且在sampleLoaders/box2d-testbed-(c++)文件夹下面有一个完整的例子。
下面是一些基本的用法:
为了加载box2d世界,你需要一些库文件去解析JSON和b2dJson文件,这里面总共7个文件,你可以在sampleLoaders/box2d-testbed-(C++)文件夹下面找到
下面是图示文件:
为了加载这个场景,你必须包含b2dJson.h这个头文件。用readFromFile加载一个你导出的文件去创建一个b2dJson实例,如果这场景没有被加载,这个函数会返回null:
b2dJson json; string errorMsg; b2World* world = json.readFromFile( "rubeRawInfoOutput.json", errorMsg ); if ( ! world ) printf("Could not load JSON file : %s\n", errorMsg.c_str());
有关json的更多细节,可以访问下面的链接:http://www.iforce2d.net/b2djson/
加载图片:
导出的数据不仅包括物理世界,同样也包括里面的图片信息。b2dJsonImage类包含了每张图片信息,在导出文件加载成功后,你可以得到一系列的图片信息,这些图片信息以渲染次序来排序:
vector<b2dJsonImage*> images; json.getAllImages(images);
加载用户特性,当加载了一个场景到你的程序中后, 你可以访问用户自定义的特性信息。主要的方法是:通过用户自定义的特性信息得到物体,或者通过一个物体得到它的用户自定义的特性信息。
你可以能过给getXXXByCustomYYY()给定特定的值来得到一系列的匹配物体,XXX部分可以是刚体、夹具、关节或者图片。YYY部分可以是int, float, string, vector or bool。例如:
vector<b2Body*> enemies; json.getBodiesByCustomString("category", "enemy", enemies);
当然也可以只获取单个物体,例如:
b2Fixture* f = json.getFixtureByCustomInt("damage", 5);
保存和导出的区别:
R.U.B.E的场景文件和导出的原始信息文件都是JSON格式的扁平文本,它们的基本结构大体上是相似的,但是主要的不同的地方是一些场景部分的保存,这部分就解析这些不同点,而且它们最主要的不同点是在于夹具的表现:当为box2d定义一个多边形时,它们必须是凸多边形,并且最多只有逆时针方向上8个顶点,做为对比,RUBE允许你不考虑这些烦人的规定,而且RUBE允许你切换下面几个状态:多边形、线条和循环类型,并且可以为所有的类型设置半径,为了说明RUBE文件和原始信息文件之间的差别,我们用下面的例子来做说明:
在RUBE文件里面,它保存为六个顶点,而在JSON文件里面,它就以三个独立的夹具来保存。
JSON文件数据结构:
相关文章推荐
- Using CustomProperties of CodeSmith
- The ins and outs of using Java with Domino
- A simple of Using XML Data Source type and Querying a Web Service with Reporting Services 2008
- how to get geometry type of layer using IMapServer3 and IMapLayerInfo? (C#)
- Using a palette from .NET to display properties of multiple AutoCAD objects
- Implementing and Using Custom Drawable States
- Photoshop CS2 RAW : Using Adobe Camera Raw, Bridge, and Photoshop to Get the Most out of Your Digita
- [React Intl] Format Date and Time Using react-intl FormattedDate and FormattedTime
- a complete example of using One to Many and One to One associations using MyBatis annotations
- CodeSnip: How to Get Id of the Record Using ASP.NET and SQL Server 2000
- Representing and Recognizing the Visual Appearance of Materials using Three-dimensional Textons部分翻译
- METHODS OF AND APPARATUS FOR USING TEXTURES IN GRAPHICS PROCESSING SYSTEMS
- Set Font Properties On Mouse Hover Of Push Button And Text Items At Run time In Oracle Forms
- Evaluate the Costs and Benefits of Using DBMS_REPAIR【每日一译】--2012-10-26
- [.NET]advantages and disadvantages of using c++ interop
- Group and sum array of hashes by date
- Using JavaFX Properties and Binding
- Issue 71 - pymssql - Undefined symbols on Mac, CentOS, Redhat with pre-compiled build - A fast MS SQL Server client library for Python directly using C API instead of ODBC. It is Python DB-API 2.0 compliant. Works on Linux, *BSD, Solaris, Mac OS X and Win
- 87.You want to display the date for the first Mon day of the next month and
- Add custom and listview web part to wiki page using powershell