我收到一条错误消息,说我将CCMenuItemImage未正确转换为“按钮”
button.cpp:
#include "button.h"
void Button::selected(){
CCLOG("SELECTED");
}
void Button::unselected(){
CCLOG("UNSELECTED");
}
button.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:
//I get an error 'invalid conversion from 'cocos2d::CCMenuItemImage*' to 'Button*' '
Button *left1 = Button::create("turncircle.png","turncircle.png", this, menu_selector(SinglePlayer::turning));
答案 0 :(得分:4)
当你调用Button :: create时,它实际上引用了CCMenuItemImage中的create方法,所以你得到一个CCMenuItemImage(不是Button)。
您需要在Button类中创建一个静态create方法。您仍然可以在超类中引用初始值设定项,因此它应该相当简单。因此,在Button类的create方法中,执行以下操作:
Button* Button::create(const char* normalImg, const char* selectedImg) {
Button *button = new Button ();
if (button && button->CCMenuItemImage::initWithNormalImage(normalImg, selectedImg, NULL, NULL, NULL) {
button->autorelease ();
return button;
} else {
delete button;
button = NULL;
return NULL;
}
}
(免责声明:我实际上并没有对此进行测试,只是这里有一些快速代码。)
如果您使用此create方法,它将返回一个Button对象,这正是您正在寻找的。 p>
您正在寻找的初始化程序是:
bool CCMenuItemImage::initWithNormalImage(const char *normalImage, const char *selectedImage, const char *disabledImage, CCObject* target, SEL_MenuHandler selector);
您可能希望使Button类的创建构造函数适应CCMenuItemImage初始值设定项的更多值。由你决定。
跟踪CCMenuItem.cpp文件; CCMenuItemImage本身是CCMenuItem的子类,因此应该为您提供一个相当强大的参考点,说明如何设置它。 (CCMenuItem和CCMenuItemImage都在CCMenuItem.cpp / .h文件中定义。)
希望这会有所帮助!!