Как я могу создать подкласс 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.)

Надеюсь это поможет!!

Другие вопросы по тегам