我收到一个错误,说我错误地将CCMenuItemImage转换为"Button“
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();
};
#endifSinglePlayer.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));发布于 2012-12-08 01:41:25
当您调用Button::create时,它实际上引用了CCMenuItemImage中的create方法,因此您将得到一个CCMenuItemImage (而不是Button)。
您需要在Button类中创建一个static 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对象,这正是您要查找的对象。
您要查找的初始化器是:
bool CCMenuItemImage::initWithNormalImage(const char *normalImage, const char *selectedImage, const char *disabledImage, CCObject* target, SEL_MenuHandler selector);您可能希望使Button类的create构造函数容纳更多的CCMenuItemImage初始值。你说了算。
跟踪CCMenuItem.cpp文件;CCMenuItemImage本身是CCMenuItem的子类,因此这应该为您提供一个相当强的参考点,了解应该如何设置所有这些内容。( CCMenuItem和CCMenuItemImage都在CCMenuItem.cpp/.h文件中定义。)
希望这能有所帮助!!
https://stackoverflow.com/questions/13753906
复制相似问题