2012-12-06 1 views
2

을 하위 클래스 "버튼"을어떻게 내가 잘못 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 

싱글 플레이어. 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)); 
+2

또한 작성 기능을 다시 작성해야합니다. –

+0

잘 모르겠습니다. 미안, 난 아직도 배우고있어. 간단히 설명해 주시겠습니까? –

+2

체크 @ SoMuchDramaStudios 대답, 나는 그가 분명히 설명하는 것 같아요 : P. –

답변

4

Button :: create, 실제로는 CCMenuItemImage의 create 메소드를 참조하므로 CCMenuItemImage가 다시 표시됩니다 (Button이 아님).

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; 
    } 
} 

(면책 조항 :. 실제로 여기에 단지 몇 가지 빠른 코드를이 테스트를하지 않았다)

이이 방법을 만들어 사용하는 경우, 그것은 것입니다 찾고있는 것 인 Button 객체를 반환하십시오.

당신이 찾고있는 초기화는 다음과 같습니다

bool CCMenuItemImage::initWithNormalImage(const char *normalImage, const char *selectedImage, const char *disabledImage, CCObject* target, SEL_MenuHandler selector); 

당신은 CCMenuItemImage 이니셜의 더 많은 값을 수용하여 Button 클래스에 대한 생성 생성자를 만들 수 있습니다. 너까지.

CCMenuItem.cpp 파일을 통해 추적하십시오. CCMenuItemImage 자체는 CCMenuItem의 서브 클래스이므로,이 모든 설정 방법에 대한 상당히 강력한 참조 점을 제공해야합니다. (CCMenuItem과 CCMenuItemImage는 모두 CCMenuItem.cpp/.h 파일에 정의되어 있습니다.)

희망이 있습니다!

+0

오랫동안 복용에 대해 사과드립니다. 나는 내 대학 결승에서 바빴다. 나는 그런 멍청 아. 그래서 당신이 내 Button.cpp에 말한 것처럼 create 메소드를 추가했습니다. 이제 그것은 cocos2d :: CCMenuItemImage에서 Button *으로의 무효 변환이라는 오류가 나타납니다. 내가 게시 한 이니셜 라이저로 어떤 일을하기를 원하는지 잘 모르겠습니다. 그래도 도와 ​​줘서 고마워! –

+0

다시 도움을 주셔서 감사합니다. Up-votes around around :) –

+0

나는 아직도 이해할 수 없다. 어떤 도움이 필요합니까? –