Как я могу создать подкласс CCMenuItemImage

Я получаю сообщение об ошибке, в котором говорится, что я неправильно преобразовал CCMenuItemImage в «Кнопку».

кнопка.cpp:

#include "button.h"

void Button::selected(){
    CCLOG("SELECTED");
}

void Button::unselected(){
    CCLOG("UNSELECTED");
}

кнопка.ч:

#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));

person David Small    schedule 06.12.2012    source источник
comment
вам также нужно переписать функцию создания.   -  person m.ding    schedule 07.12.2012
comment
Я не знаю как. Извините, я все еще учусь. Не могли бы вы кратко объяснить?   -  person David Small    schedule 07.12.2012
comment
проверьте ответ @SoMuchDramaStudios, я думаю, он ясно объясняет: P.   -  person m.ding    schedule 08.12.2012


Ответы (1)


Когда вы вызываете Button::create, он фактически ссылается на метод create в CCMenuItemImage, поэтому вы получаете обратно CCMenuItemImage (а не кнопку).

Вам нужно будет создать статический метод создания в вашем классе кнопок. Вы все еще можете ссылаться на инициализаторы в своем суперклассе, так что это должно быть довольно просто. Итак, в вашем методе создания класса 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;
    }
}

(Отказ от ответственности: я на самом деле не тестировал это, просто немного кода здесь.)

Если вы используете этот метод создания, он вернет объект Button, а это именно то, что вы ищете.

Инициализатор, который вы ищете, это:

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.)

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

person So Much Drama Studios    schedule 07.12.2012
comment
Прошу прощения, что так долго. Я был занят выпускными экзаменами в колледже. Я также извиняюсь за то, что был таким нубом. Поэтому я добавил метод создания, как вы сказали, в свой Button.cpp. Теперь я получаю сообщение об ошибке о том, что это недопустимое преобразование из cocos2d::CCMenuItemImage в Button*. Я не уверен, что вы хотели, чтобы я сделал с инициализатором, который вы опубликовали. Спасибо за помощь! - person David Small; 14.12.2012
comment
Я все еще не понимаю. Любая помощь? - person David Small; 18.12.2012