【发布时间】:2012-12-18 23:59:53
【问题描述】:
我正在尝试创建一个从基类 CCMenuItemImage 派生的按钮。我希望这个按钮能够在第一次触摸而不是在触摸结束后调用它的功能。但是,尝试子类化时,我收到一条错误消息,指出这是无效的转换。
button.ccp:
#include "button.h"
void Button::selected(){
CCLOG("SELECTED");
}
void Button::unselected(){
CCLOG("UNSELECTED");
}
Button* Button::create(const char *normalImage, const char *selectedImage, const char *disabledImage, CCObject* target, SEL_MenuHandler selector) {
Button *button = new Button();
if (button && button->initWithNormalImage(normalImage, selectedImage, disabledImage, NULL, NULL))
{
button->autorelease();
return button;
}
CC_SAFE_DELETE(button);
return NULL;
}
按钮.h:
#ifndef BUTTON_H
#define BUTTON_H
#include "cocos2d.h"
class Button : public cocos2d::CCMenuItemImage{
public:
virtual void selected();
virtual void unselected();
};
#endif
SinglePlayer.ccp 片段:
Button *left1 = Button::create("turncircle.png","turncircle.png", this, menu_selector(SinglePlayer::turning));
【问题讨论】:
-
您是否在 .h 文件中定义了这个 create() 函数?如果没有,你应该把
Button* Button::create(const char *normalImage, const char *selectedImage, const char *disabledImage, CCObject* target, SEL_MenuHandler selector);放在那里。 -
你把
using namespace cocos2d;放到你的h文件里了吗? -
对不起,这是我的错,你应该删除h文件中的
Button:: -
使其成为静态的。在 h 文件中。
static Button*... -
删除 proj.android/libs 和 proj.android/objs 中的所有内容。但我确实认为在你直接进入 cocos2d-x 之前,你需要阅读一些关于 c++ 和 ndk 的书籍。
标签: c++ subclass cocos2d-x ccmenuitem