在Ubuntu上使用QtCreator开发Cocos2d-x

9

我尝试在QtCreator中运行cocos2d-x v 2.2的HelloWorld项目。我正在使用基于这个仓库的项目文件。

   TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

CONFIG(debug, debug|release) {
DESTDIR = bin/debug/
}

CONFIG(release, debug|release) {
DESTDIR = bin/release/
}


RESOURCES = Resources.qrc

SOURCES += Classes/AppDelegate.cpp  \
    Classes/HelloWorldScene.cpp \
    proj.linux/main.cpp

HEADERS +=Classes/AppDelegate.h \
    Classes/HelloWorldScene.h


COCOS2DX_ROOT = $$system(echo $COCOS2DX_ROOT)

# set include path and depend path
COCOS_INCLUDE_DEPEND_PATH += $$COCOS2DX_ROOT/cocos2dx \
        $$COCOS2DX_ROOT/cocos2dx/include \
        $$COCOS2DX_ROOT/cocos2dx/cocoa \
        $$COCOS2DX_ROOT/cocos2dx/kazmath/include \
        $$COCOS2DX_ROOT/cocos2dx/platform \
        $$COCOS2DX_ROOT/CocosDenshion/include \
        $$COCOS2DX_ROOT/extensions \
        $$COCOS2DX_ROOT/external


    DEFINES += LINUX

        COCOS_INCLUDE_DEPEND_PATH += $$COCOS2DX_ROOT/cocos2dx/platform/linux

    LBITS = $$system(getconf LONG_BIT)

        contains(LBITS,64) {
                COCOS_INCLUDE_DEPEND_PATH += $$COCOS2DX_ROOT/platform/third_party/linux/include64
                STATICLIBS_DIR += $$COCOS2DX_ROOT/cocos2dx/platform/third_party/linux/libraries/lib64
        contains(COCOS2D-X_MODULES,CocosDenshion) {
                        SHAREDLIBS_DIR += $$COCOS2DX_ROOT/CocosDenshion/third_party/fmod/lib64/api/lib
            SHAREDLIBS += -L$$SHAREDLIBS_DIR -lfmodex64
        }

        DEFINES += NDEBUG

                SHAREDLIBS += -L$$COCOS2DX_ROOT/lib/linux/release -Wl,-rpath,$$COCOS2DX_ROOT/lib/linux/release

                STATICLIBS += $$COCOS2DX_ROOT/lib/linux/release/libbox2d.a

        SHAREDLIBS += -lcocos2d -lrt -lz
        SHAREDLIBS += -lfreetype -lcurl -lGL -lGLEW
#        SHAREDLIBS += -lxml2 -lpng -ljpep -ltif\f

        SHAREDLIBS += -lcocosdenshion


    SHAREDLIBS += -Wl,-rpath,$${SHAREDLIBS_DIR}
    SHAREDLIBS += -Wl,-rpath,$$STATICLIBS_DIR

    LIBS += $${STATICLIBS}
    LIBS += $${SHAREDLIBS}
} 

INCLUDEPATH += $${COCOS_INCLUDE_DEPEND_PATH}
DEPENDPATH += $${COCOS_INCLUDE_DEPEND_PATH}

我的main.cpp文件:

  #include "../Classes/AppDelegate.h"
#include "cocos2d.h"
#include "CCEGLView.h"

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string>

#include "../Classes/AppDelegate.h"

USING_NS_CC;

// 500 is enough?
#define MAXPATHLEN 500

int main(int argc, char **argv)
{
    // get application path
    int length;
    char fullpath[MAXPATHLEN];
    length = readlink("/proc/self/exe", fullpath, sizeof(fullpath));
    fullpath[length] = '\0';

    std::string resourcePath = fullpath;
    resourcePath = resourcePath.substr(0, resourcePath.find_last_of("/"));
    resourcePath += "/../../Resources/";

    // create the application instance
    AppDelegate app;
    CCApplication::sharedApplication()->setResourceRootPath(resourcePath.c_str());
    CCEGLView* eglView = CCEGLView::sharedOpenGLView();
    eglView->setFrameSize(800, 480);

    return CCApplication::sharedApplication()->run();
}

该项目编译正常,没有错误,但当应用程序运行时,出现黑屏窗口并在下一瞬间消失。我认为run()方法返回了-1。控制台输出显示如下:
cocos2d-x debug info [Ready for GLSL]
cocos2d-x debug info [Ready for OpenGL 2.0]

我尝试在Ubuntu 12.04上运行我的项目。有人知道我错在哪里吗?
=====编辑 AppDelegate:
#include "AppDelegate.h"
#include "HelloWorldScene.h"

USING_NS_CC;

AppDelegate::AppDelegate() {

}

AppDelegate::~AppDelegate() 
{
}

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director

    CCDirector* pDirector = CCDirector::sharedDirector();
    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

    pDirector->setOpenGLView(pEGLView);

    // turn on display FPS
    pDirector->setDisplayStats(true);

    // set FPS. the default value is 1.0/60 if you don't call this
    pDirector->setAnimationInterval(1.0 / 60);

    // create a scene. it's an autorelease object
    CCScene *pScene = HelloWorld::scene();

    // run
    pDirector->runWithScene(pScene);

    return true;
}

// This function will be called when the app is inactive. When comes a phone call,it's be invoked too
void AppDelegate::applicationDidEnterBackground() {
    CCDirector::sharedDirector()->stopAnimation();

    // if you use SimpleAudioEngine, it must be pause
    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}

// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground() {
    CCDirector::sharedDirector()->startAnimation();

    // if you use SimpleAudioEngine, it must resume here
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}

但我认为,appdelegate中的代码从未执行 :/
1个回答

0

这部分看起来不错,检查一下AppDelegate::applicationDidFinishLaunching()方法,那里是应用程序实际启动的地方,同时您可以在上述提到的方法中设置resourcepath变量,因为在此之前还没有访问任何内容。


如果您需要更多信息,请粘贴从AppDelegate :: applicationDidFinishLaunching()方法中的代码。 - Hari Krishna
AppDelegate.cpp 包含在问题中 :) 我需要更多信息 :P - Wez Sie Tato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接