2012-04-23 107 views
0

Cocos2d-x是Cocos2d-for-iPhone的C++端口。它具有跨平臺的優勢。我使用Cocos2d-x爲Android和iPhone開發遊戲。代碼不會與Android NDK編譯

現在我正在用Android NDK和Xcode編譯一組Cocos2d-X代碼。

在Xcode上,遊戲在iPhone上編譯和運行良好。

使用Android NDK,編譯會失敗。 (我正在使用官方的Android r7c NDK)。

請幫忙。

enter image description here

編輯:對於那些誰感興趣的全面實施文件。這裏是。

#include "GameOverScene.h" 
#include "HelloWorldScene.h" 

using namespace cocos2d; 

bool GameOverScene::init() { 
    if (CCScene::init()) { 
     this->_layer = GameOverLayer::node(); 
     this->_layer->retain(); 
     this->addChild(_layer); 

     return true; 
    } else { 
     return false; 
    } 
} 

GameOverScene::~GameOverScene() { 
    if (_layer) { 
     _layer->release(); 
     _layer = NULL; 
    } 
} 

bool GameOverLayer::init() { 
    if (CCLayerColor::initWithColor(ccc4f(255, 255, 255, 255))) { 
     CCSize winSize = CCDirector::sharedDirector()->getWinSize(); 
     this->_label = CCLabelTTF::labelWithString("", "Artial", 32); 
     _label->retain(); 
     _label->setColor(ccc3(0, 0, 0)); 
     _label->setPosition(ccp(winSize.width/2, winSize.height/2)); 
     this->addChild(_label); 

     this->runAction(CCSequence::actions(CCDelayTime::actionWithDuration(3), CCCallFunc::actionWithTarget(this, callfunc_selector(GameOverLayer::gameOverDone)), NULL)); 

     return true; 
    } else { 
     return false; 
    } 
} 

void GameOverLayer::gameOverDone() { 
    CCDirector::sharedDirector()->replaceScene(HelloWorld::scene()); 
} 

GameOverLayer::~GameOverLayer() { 
    if (_label) { 
     _label->release(); 
     _label = NULL; 
    } 
} 

並全面頭文件

#ifndef S6_GameOverScene_h 
#define S6_GameOverScene_h 

#include "cocos2d.h" 

class GameOverLayer : public cocos2d::CCLayerColor { 

public: 
    GameOverLayer():_label(NULL) {}; 
    virtual ~GameOverLayer(); 
    bool init(); 
    LAYER_NODE_FUNC(GameOverLayer); 

    void gameOverDone(); 

    CC_SYNTHESIZE_READONLY(cocos2d::CCLabelTTF*, _label, Label); 

}; 

class GameOverScene : public cocos2d::CCScene { 

public: 
    GameOverScene():_layer(NULL) {}; 
    ~GameOverScene(); 
    bool init(); 

    //SCENE_NODE_FUNC(GameOverScene); 

    static GameOverScene* node() 
    { 
     GameOverScene *pRet = new GameOverScene(); 

     //Error: undefined reference to `GameOverScene::init()' 
     if (pRet && pRet->init()) 
     { 
      pRet->autorelease(); 
      return pRet; 
     } 
     else 
     { 
      //Error: undefined reference to `vtable for GameOverScene' 
      delete pRet; 

      pRet = NULL; 
      return NULL; 
     } 
    }; 

    CC_SYNTHESIZE_READONLY(GameOverLayer*, _layer, Layer); 
}; 


#endif 
+0

剛剛幾分鐘前你問過這個嗎?你在那些方法的實現在哪裏? – Mat 2012-04-23 15:20:56

+1

嘗試發佈編譯器錯誤,而不僅僅是出現錯誤。 – 2012-04-23 15:25:21

+0

@Mat我剛剛添加了實現文件。提前致謝! – 2012-04-23 15:25:38

回答

1

這可能與Android.mk文件的問題。在你需要添加編譯您GameOverScene.h文件..

+0

謝謝!你拯救了我的一天。 – 2012-04-25 05:12:05

1

/Users/my_account_name/Desktop/Projects/S6/S6/android/jni/../../Classes/GameOver場景。 h:40:未定義的引用GameOverScene :: init()'

您必須鏈接GameOverScene的目標文件。

1

你可能會忘記添加GameOverScene.cpp在Android.mk位於夾分班。