Cocos2d-x in QtCreator on Ubuntu
Asked Answered
J

1

9

I try to run cocos2d-x v 2.2 helloword project in QtCreator. I'm using this project file based on this repository https://github.com/FlyingFishBird/cocos2d-x_2_0_4_templete_for_qtcreator/graphs/contributors

   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}

My main.cpp file:

  #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();
}

The project compiled properly without errors, but when the application run, the window with black screen appear and disappear in the next moment. I think that run() method return -1. The console output print me this:

cocos2d-x debug info [Ready for GLSL]
cocos2d-x debug info [Ready for OpenGL 2.0]

I try to run my project on Ubuntu 12.04. Can anybody know what I doing wrong?

===== edit 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();
}

But I think that, the code from appdelegate never execute :/

Jeep answered 7/12, 2013 at 12:39 Comment(0)
C
0

This part looks fine, check AppDelegate::applicationDidFinishLaunching() method, thats where the app actually starts, also you can set the resourcepath variable inside the above mentioned method, as till then nothing would have been accessed..

Cahoon answered 11/12, 2013 at 19:28 Comment(2)
If you need more info, please paste the code from AppDelegate::applicationDidFinishLaunching() methodCahoon
AppDelegate.cpp included in question :) I need more info :PJeep

© 2022 - 2024 — McMap. All rights reserved.