天天看點

cocos2dx3.0alpha1加載cocostudio編輯的ui

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

cocos2dx3.0alpha1加載cocostudio編輯的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)):

           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 ============= creatingnow........=========================="

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

pause  

exit  

:inputError  

@echo 項目名稱或者包标示名不能為空!  

pause  

9、  使用腳本建立好工程(工程目錄在F:\cocos2dx30alpha1\projects+工程名),用vs2012打開工程,3.0後必須vs2012以上版本。

cocos2dx3.0alpha1加載cocostudio編輯的ui

10、加入頭檔案目錄、lib包。(鹽多不壞菜,根據自己項目需要精簡。)

cocos2dx3.0alpha1加載cocostudio編輯的ui
cocos2dx3.0alpha1加載cocostudio編輯的ui

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)

可将以上寫入到頭檔案中提供引用。

繼續閱讀