Как я могу создать подкласс CCMenuItemImage
Я получаю сообщение об ошибке, в котором говорится, что я неправильно преобразовал 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));
1 ответ
Когда вы вызываете Button::create, он на самом деле ссылается на метод create в CCMenuItemImage, поэтому вы получаете CCMenuItemImage обратно (не Button).
Вам нужно будет создать статический метод create в вашем классе Button. Вы все еще можете ссылаться на инициализаторы в вашем суперклассе, так что это должно быть довольно просто. Итак, в вашем методе создания класса Button сделайте что-то вроде:
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);
Возможно, вы захотите, чтобы ваш конструктор create для вашего класса Button вмещал больше значений инициализатора CCMenuItemImage. Вам решать.
Трассировка через файл CCMenuItem.cpp; CCMenuItemImage сам по себе является подклассом CCMenuItem, поэтому он должен дать вам достаточно надежную точку отсчета того, как все это должно быть настроено. (И CCMenuItem, и CCMenuItemImage определены в файлах CCMenuItem.cpp/.h.)
Надеюсь это поможет!!