您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx3.0alpha1加载cocostudio编辑的ui

2013-11-29 11:32 323 查看
cocos2dx30alpha1加载cocostudio编辑的ui(完整版)
 
1、   下载cocostudiov1.1.0.0 版本下载地址Download v1.1.0.0
2、   下载cocos2dx30alpha1版本下载地址Downloadv3.0 alpha1
3、   VS2012安装及开发环境配置、python安装及配置、NDK安装及配置、Eclipse安装及配置,网上资源很多,大家可以去参考,主要解决cocos2dx上面的一些问题。
4、   利用cocostudio编辑好ui界面,放置到工程resource目录下面(UI编辑教程自己去官网学习,提供帮助文档地址http://upyun.cocimg.com/CocoStudio/helpdoc/v1.0.0.0/zh/index.html
5、  导出项及路径。F:\cocos2dx30alpha1\projects\CarDemo\Resources\UI



6、  导出编辑好的UI结构。

7、  使用cocos2dx自带的create_project.py脚本创建工程。(官方有问题,不知你们有没有碰到过,贴上我自己的修改的脚本)
 
#!/usr/bin/python
# create_project.py
# Create cross-platform cocos2d-x project
# Copyright (c) 2012 cocos2d-x.org
# Author: WangZhe
 
# define global variables
PLATFORMS = {
    "cpp" :["ios_mac", "android", "win32","linux"],
    "lua" :["ios_mac", "android", "win32","linux"],
    "javascript" :["ios_mac", "android", "win32"]
}
 
 
# begin
import sys
import os, os.path
import json
import shutil
 
def checkParams():
    from optparse importOptionParser
   
    # set the parser to parse inputparams
    # the correspond variable nameof "-x, --xxx" is parser.xxx
    parser =OptionParser(usage="Usage: %prog -p <PROJECT_NAME> -k <PACKAGE_NAME>-l <cpp|lua|javascript>\nSample: %prog -p MyGame -kcom.MyCompany.AwesomeGame -l javascript")
   parser.add_option("-p", "--project",metavar="PROJECT_NAME", help="Set a project name")
   parser.add_option("-k", "--package",metavar="PACKAGE_NAME", help="Set a package name forproject")
   parser.add_option("-l", "--language",
                     metavar="PROGRAMMING_NAME",
                     type="choice",
                     choices=["cpp", "lua", "javascript"],
                      help="Majorprogramming language you want to use, should be [cpp | lua | javascript]")
   
    #parse the params
    (opts, args) =parser.parse_args()
 
    # generate our internal params
    context ={}.fromkeys(("language", "src_project_name","src_package_name", "dst_project_name","dst_package_name", "src_project_path", "dst_project_path","script_dir"))
    platforms_list = []
 
    context["script_dir"]= os.path.abspath(os.path.dirname(__file__))
   
    if opts.project:
       context["dst_project_name"] = opts.project
       context["dst_project_path"] =os.path.abspath(os.path.join(context["script_dir"], "..","..", "projects", context["dst_project_name"]))
    else:
        parser.error("-p or--project is not specified")
 
    if opts.package:
       context["dst_package_name"] = opts.package
    else:
        parser.error("-k or--package is not specified")
 
    if opts.language:
       context["language"] = opts.language
    else:
        parser.error("-l or--language is not specified")
                                
    # fill in src_project_name andsrc_package_name according to "language"
    template_dir =os.path.abspath(os.path.join(context["script_dir"], "..","..", "template"))
    if ("cpp" ==context["language"]):
       context["src_project_name"] = "HelloCpp"
       context["src_package_name"] ="org.cocos2dx.hellocpp"
       context["src_project_path"] = os.path.join(template_dir,"multi-platform-cpp")
    elif ("lua" ==context["language"]):
       context["src_project_name"] = "HelloLua"
       context["src_package_name"] ="org.cocos2dx.hellolua"
       context["src_project_path"] = os.path.join(template_dir,"multi-platform-lua")
    elif ("javascript" ==context["language"]):
       context["src_project_name"] = "HelloJavascript"
       context["src_package_name"] ="org.cocos2dx.hellojavascript"
       context["src_project_path"] = os.path.join(template_dir,"multi-platform-js")
    else:
        print ("Your languageparameter doesn\'t exist." \
            "Check correctlanguage option\'s parameter")
        sys.exit()
    platforms_list =PLATFORMS.get(context["language"], [])
    return context, platforms_list
# end of checkParams(context) function
 
def replaceString(filepath, src_string, dst_string):
       content = ""
       f1 = open(filepath,"rb")
       for line in f1:
              strline =line.decode('utf8')
              if src_string instrline:
                     content +=strline.replace(src_string, dst_string)
              else:
                     content +=strline
       f1.close()
       f2 = open(filepath,"wb")
       f2.write(content.encode('utf8'))
       f2.close()
# end of replaceString
 
def processPlatformProjects(context, platform):
    # determine proj_path
    proj_path =os.path.join(context["dst_project_path"], "proj." +platform)
    java_package_path = ""
 
    # read json config file for thecurrent platform
    conf_path =os.path.join(context["script_dir"], "%s.json" % platform)
    f = open(conf_path)
    data = json.load(f)
 
    # rename package path, like"org.cocos2dx.hello" to "com.company.game". This is aspecial process for android
    if platform =="android":
        src_pkg =context["src_package_name"].split('.')
        dst_pkg = context["dst_package_name"].split('.')
 
        java_package_path =os.path.join(*dst_pkg)
 
    # rename files and folders
    for item indata["rename"]:
        tmp =item.replace("PACKAGE_PATH", java_package_path)
        src =tmp.replace("PROJECT_NAME", context["src_project_name"])
        dst =tmp.replace("PROJECT_NAME", context["dst_project_name"])
        ifos.path.exists(os.path.join(proj_path, src)):
           os.rename(os.path.join(proj_path, src), os.path.join(proj_path, dst))
 
    # remove useless files andfolders
    for item indata["remove"]:
        dst =item.replace("PROJECT_NAME", context["dst_project_name"])
        ifos.path.exists(os.path.join(proj_path, dst)):
         
e5af
  shutil.rmtree(os.path.join(proj_path, dst))
   
    # rename package_name. Thisshould be replaced at first. Don't change this sequence
    for item indata["replace_package_name"]:
        tmp =item.replace("PACKAGE_PATH", java_package_path)
        dst =tmp.replace("PROJECT_NAME", context["dst_project_name"])
        ifos.path.exists(os.path.join(proj_path, dst)):
           replaceString(os.path.join(proj_path, dst),context["src_package_name"], context["dst_package_name"])
   
    # rename project_name
    for item indata["replace_project_name"]:
        tmp =item.replace("PACKAGE_PATH", java_package_path)
        dst =tmp.replace("PROJECT_NAME", context["dst_project_name"])
        ifos.path.exists(os.path.join(proj_path, dst)):
           replaceString(os.path.join(proj_path, dst), context["src_project_name"],context["dst_project_name"])
                 
    # done!
    print ("proj.%s\t\t:Done!" % platform)
# end of processPlatformProjects
 
def createPlatformProjects():
    # prepare valid"context" dictionary
    context, platforms_list  = checkParams()
    # print context, platforms_list
 
    # copy"lauguage"(cpp/lua/javascript) platform.proj intococos2d-x/projects/<project_name>/folder
    ifos.path.exists(context["dst_project_path"]):
        print ("Error:" +context["dst_project_path"] + " folder is alreadyexisting")
        print ("Please removethe old project or choose a new PROJECT_NAME in -project parameter")
        sys.exit()
    else:
       shutil.copytree(context["src_project_path"],context["dst_project_path"], True)
 
    # call process_proj from eachplatform's script folder         
    for platform in platforms_list:
       processPlatformProjects(context, platform)
    #    exec "import%s.handle_project_files" % (platform)
    #    exec"%s.handle_project_files.handle_project_files(context)" % (platform)
 
    print ("New project hasbeen created in this path: " +context["dst_project_path"].replace("/tools/project-creator/../..",""))
    print ("Have Fun!")
 
 
 
 
 
# -------------- main --------------
# dump argvs
# print sys.argv
if __name__ == '__main__':
    createPlatformProjects()
 
主要问题是:print函数有问题,增加了复制org代码,便于编译到android系统上。
 
8、  为了方便整理了bat脚本(create_project.bat),保存为cocos2dx30alpha1\tools\project-creator目录下。
 
脚本如下:
@echo off 

echo ====================== 新建 cocos2d-x 3.0 alpha1 工程项目 ==========================

set /p projectName=请输入项目名称(如:cardemo):

if "%projectName%"=="" gotoinputError

set /p packageName=请输入包名(如:com.wd100.demo):

if "%packageName%"=="" gotoinputError  

@set /p lang=-language(cpp):

echo "============= creatingnow........=========================="

python create_project.py -p %projectName% -k%packageName% -l %lang%

pause  

exit  

:inputError  

@echo 项目名称或者包标示名不能为空!  

pause  
 
9、  使用脚本创建好工程(工程目录在F:\cocos2dx30alpha1\projects+工程名),用vs2012打开工程,3.0后必须vs2012以上版本。



10、加入头文件目录、lib包。(盐多不坏菜,根据自己项目需要精简。)





5、程序中包含以下头文件及命名空间:(我统一包含在WDCocosHeader.h中)代码如下。
 
#ifndef __WD_COCOS_HEADER_H__
#define __WD_COCOS_HEADER_H__
 
#include
"cocos2d.h"
#include
"UILayer.h"
#include
"UIHelper.h"
 
#include
"cocos-ext.h"//引入扩展类
#include
"cocostudio/CCSGUIReader.h"
 
 
#include
"UIWidget.h"
#include
"UIButton.h"
#include
"UILabelAtlas.h"
#include
"UISlider.h"
#include
"UILoadingBar.h"
 
#include
"CCComRender.h"
#include
"CCArmature.h"
 
#include
"external/Box2D/Box2D.h"
#include
"external/Box2D/Dynamics/b2Fixture.h"
#include
"b2World.h"
 
 
 
 
 
//添加命名空间
using namespacecocos2d::extension;
using namespacegui;
using namespacecocos2d;
 
using namespacecocostudio;
 
USING_NS_CC;
USING_NS_CC_EXT;
 
 
 
 
#endif
6、现在切换到代码,修改init函数,去掉其他的代码,加入以下代码
UILayer* ul = UILayer::create();

this->addChild(ul, 0, 100);

ul->addWidget(cocostudio::GUIReader::shareReader()->widgetFromJsonFile("UI/Main.ExportJson"));
 
以上经过测试验证,可以运行(3.0资料很少,自己也是摸索出来的,Python脚本、makefile文件都最好了解下)。
 
 
如果要编译到android系统,mk需要修改下。
 
LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE := cocos2dcpp_shared
 
LOCAL_MODULE_FILENAME := libcocos2dcpp
 
##----------------------------------
(这下面是我自己文件目录,因为发现find方法有问题,没办法递归查找,如果哪位朋友递归解决了,也麻烦通知下,免得每次添加文件夹还要去修改makefile。)
WD_BASE_DIR := $(LOCAL_PATH)/../../Classes
WD_CPP_DIRS := WDHeader WDScene WDSchedule ./
 
WD_CPP_LIST := $(foreach src_path, \
                                     $(WD_CPP_DIRS), \
                                          $(wildcard$(WD_BASE_DIR)/$(src_path)/*.cpp ) \
                                           )
 
WD_CPP_LIST +=$(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)
 
LOCAL_SRC_FILES := hellocpp/main.cpp
LOCAL_SRC_FILES += $(WD_CPP_LIST:$(LOCAL_PATH)/%=%)
 
 
#输出信息
$(info "******WD_CPP_LIST:"$(WD_CPP_LIST))
$(info "******LOCAL_SRC_FILES:"$(LOCAL_SRC_FILES))
 
#包含头文件
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
                  $(LOCAL_PATH)/../../../../cocos \
                  $(LOCAL_PATH)/../../../../cocos/audio/include \
                  $(LOCAL_PATH)/../../../../cocos/editor-support \
                  $(LOCAL_PATH)/../../../../external \
                  $(LOCAL_PATH)/../../../../external/tinyxml2 \
                  $(LOCAL_PATH)/../../../../external/chipmunk/include/chipmunk \
                  $(LOCAL_PATH)/../../../../extensions \
                  $(LOCAL_PATH)/../../../../cocos/gui
                                                     
 
#加载动态库定义
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
 
LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_gui_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dxandroid_static
 
#包含动态库
include $(BUILD_SHARED_LIBRARY)
 
#引入库文件包
$(call import-module,2d)
$(call import-module,audio/android)
$(call import-module,Box2D)
 
$(call import-module,gui)
$(call import-module,editor-support/cocostudio)
$(call import-module,extensions)
$(call import-module,2d/platform/android)
 
可将以上写入到头文件中提供引用。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐