2

CCMenuItemImage を "Button" に不適切に変換したというエラーが表示されます

ボタン.cpp:

#include "button.h"

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

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

ボタン.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));
4

1 に答える 1

4

Button::create を呼び出すと、実際には CCMenuItemImage の create メソッドが参照されるため、(ボタンではなく) CCMenuItemImage が返されます。

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 クラスの作成コンストラクターを、CCMenuItemImage 初期化子のより多くの値に対応させたい場合があります。君による。

CCMenuItem.cpp ファイルをトレースします。CCMenuItemImage 自体は CCMenuItem のサブクラスであるため、これをすべて設定する方法についてかなり強力な参照ポイントが得られるはずです。(CCMenuItem と CCMenuItemImage の両方が CCMenuItem.cpp/.h ファイルで定義されています。)

お役に立てれば!!

于 2012-12-07T17:41:24.627 に答える