【发布时间】:2012-04-23 15:17:09
【问题描述】:
Cocos2d-x 是 Cocos2d-for-iPhone 的 C++ 端口。它具有跨平台的优势。我正在使用 Cocos2d-x 为 Android 和 iPhone 开发游戏。
现在我正在用 Android NDK 和 Xcode 编译一组 Cocos2d-X 代码。
在 Xcode 上,游戏在 iPhone 上编译和运行良好。
使用 Android NDK,编译会失败。 (我使用的是官方的 Android r7c NDK)。
请帮忙。
已编辑:对于那些对完整实现文件感兴趣的人。在这里。
#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
【问题讨论】:
-
你不是在几分钟前问过这个吗?这些方法的实现在哪里?
-
尝试发布编译器错误,而不仅仅是出现错误。
-
@Mat 我刚刚添加了实现文件。提前致谢!
-
@Kevin 在截图中有错误描述。这是一个完整的:./obj/local/armeabi/objs/game_shared/__/__/Classes/HelloWorldScene.o:在函数
GameOverScene::node()': /Users/my_account_name/Desktop/Projects/S6/S6/android/jni/../../Classes/GameOverScene.h:40: undefined reference toGameOverScene::init()' -
@diwup:我在截图中没有看到错误,请不要截图来显示代码。
标签: c++ android-ndk cocos2d-x