两个关于CocoStdio的咨询

1.编辑的界面文件 .json ,是不是在运行时它的资源路径是基于这个json文件在cocostudio项目里Resources文件夹的?
比如我用cocostudio创建一个项目叫 myDemo。 主要问的是myDemo文件夹下Json和Resources 这两个文件夹的问题。创建一个画布叫 Login,画布里有一个图片对象,其图片文件在Resources目录下的bg.png。 那么现在Json文件夹下就有一个Login.json Resources文件夹里有一个文件 bg.png。 我在自己的项目里,如果把Login.json放到项目的Resources目录的json文件夹里, bg.png放在项目的Resources目录下。那么在执行的时候,会报错找不到 Resources/json/bg.png 。

2.是否支持将某个某个画布作为子对象?
比如cocosBuilder里ccbi可以作为另一个ccbi的子对象。

1:导出的json放的位置并不是特别重要的(暂未验证,但是理论可行),但是导出的其他文件位置是不能够随意改变的,所以建议在项目开始的阶段就要准备好资源管理这部分。
当然所有的资源都要放到resources文件内。
资源管理请参考:http://www.cocoachina.com/bbs/read.php?tid=164363

2:可以将导出后的Ui作为模板倒入进来,另下个版本将会支持自定义控件。

编辑器默认的根目录起名为resources就是指cocos2dx新建项目的resources文件夹

引用的帖子说道:
注意:这个路径信息是相对于Resources的路径,并非相对于配置文件的!很多用户导出文件后更改原有导出目录结构,导致在cocos2d-x程序中黑屏或其他不加载现象多数都是由此照成的!!!

我用的cocos2d-javascript 和 cocos2d-html5,经测试,的确是基于配置文件(json文件)的。

我用vc跟了一下cocoStudio的c++版本。看到以下代码,是不是是我理解错了某个地方。

// ImageView组件的创建为例
void WidgetPropertiesReader0300::setPropsForImageViewFromJsonDictionary(cocos2d::gui::Widget*widget,const rapidjson::Value& options)
{
setPropsForWidgetFromJsonDictionary(widget, options);

cocos2d::gui::ImageView* imageView = (cocos2d::gui::ImageView*)widget; 

const rapidjson::Value& imageFileNameDic = DICTOOL->getSubDictionary_json(options, "fileNameData"); 
int imageFileNameType = DICTOOL->getIntValue_json(imageFileNameDic, "resourceType"); 
switch (imageFileNameType) 
{ 
    case 0: 
    { 
        std::string tp_i = m_strFilePath;    // 这里赋值的一次路径,这个路径前面的赋值是 m_strFilePath = jsonpath.substr(0,pos+1);   json文件的路径 
      const char* imageFileName = DICTOOL->getStringValue_json(imageFileNameDic, "path");    // json的path字段值,根目录是cocoStudio项目的Resources。 
       const char* imageFileName_tp = NULL; 
        if (imageFileName && (strcmp(imageFileName, "") != 0)) 
        { 
            imageFileName_tp = tp_i.append(imageFileName).c_str(); // 这里做了一次拼接,我感觉就是把json文件的路径后面append了一个Resources路径。 
           // cocos2d::CCFileUtils::sharedFileUtils()->fullPathForFilename( strImageFileName );         也许这样才能读取到以cocoStudio项目下Resources文件夹为根目录的资源。 
           imageView->loadTexture(imageFileName_tp);

js版本的管理方式应该是和c++的管理方式相同的。我不理解你说的相对json文件指的是什么。

资源可以分成两部分,一部分是原有的,一部分编辑器导出的。

这个文章里说的是建议将资源提前准备好,包括合图、文件夹的管理等。这样我们可以导出后只取json文件,而目录中的东西则无需管理(因为导出的时候如果选择“所有小图”模式则不会改变原有的结构)。

long_wtf 和 你说的是对的。目前的瑕疵是是,编辑scene工程进,要把整个resource目录拖到scene这个工程的Resource目录下 (http://www.cocoachina.com/bbs/read.php?tid=164363 )。每个Scene工程要拖一次。

这样我们可以导出后只取json文件,而目录中的东西则无需管理

您说的这句就是我希望得到的结果。但是GUIReader.cpp 在加载资源的时候,是以json文件的完整路径拼接上资源的 path 字段。
也就是说,json文件路径是 x:/test/Resources/ui/Login.json
path 字段是 “bg.png”,也就是说这个文件就在Resources文件夹里。
那么执行后,cocos2d就会去读 x:/test/Resources/ui/bg.png 而期望的是读取 x:/test/Resources/bg.png

确认了,现在的版本确实是按照相对于json的来读取资源的,不过如果你选择一开始选择整理好整个资源系统的话就不涉及这样的问题,当然所有的json文件就应该在根文件夹了。目前没有好的方式解决这个问题,后面会再考虑是否有更好的方式来管理。