Я использую CCTouchTargetedDelegate с классом, подклассом которого является CCSprite.
при определении методов делегата я не могу использовать «это» внутри функций.
как ответили на ранее заданные вопросы
Я не мог использовать имя класса с функцией, использующей разрешение области видимости, потому что это дало мне ошибку
«Внешнее определение« ccTouchBegan »не соответствует ни одному объявлению в« mygames :: DragSprite »»
Я также пытался объявить функцию в файле .h, но, похоже, ничего не работает.
Мой код, как показано ниже: —
.ч файл
#pragma once
#include "cocos2d.h"namespace mygames
{
class DragSprite: public cocos2d::CCSprite, public cocos2d::CCTargetedTouchDelegate
{
public:
DragSprite* createWithFile(const char *pszFileName);
bool isTouchingOnSprite(cocos2d::CCPoint touch);
virtual bool init();
bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
static inline cocos2d::CCPoint ccpSub(const cocos2d::CCPoint v1, const cocos2d::CCPoint v2);
private:
bool isDrag;
cocos2d::CCPoint whereTouch;
};
}
.файл cpp
#include "DragSprite.h"
using namespace mygames;bool DragSprite::init()
{
if (!CCSprite::init()) {
return false;
}
whereTouch = cocos2d::CCPointZero;
isDrag = false;
return true;
}
DragSprite* DragSprite::createWithFile(const char *pszFileName)
{
DragSprite *pSprite = new DragSprite();
if (pSprite&&pSprite->initWithFile(pszFileName))
{
cocos2d::CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(pSprite, 0, true);
pSprite->autorelease();
return pSprite;
}
CC_SAFE_DELETE(pSprite);
return NULL;
}
bool DragSprite::isTouchingOnSprite(cocos2d::CCPoint touch)
{
if (this->boundingBox().containsPoint(touch)) {
return true;
}else
{
return false;
}
}
static inline cocos2d::CCPoint ccpSub(const cocos2d::CCPoint v1, const cocos2d::CCPoint v2)
{
return ccp(v1.x-v2.x, v1.y-v2.y);
}
//CCTargetedTouchDelegate
bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
cocos2d::CCPoint touchPoint = pTouch->getLocation();
if (this->isTouchingOnSprite(touchPoint)) {
this->whereTouch = ccpSub(this->position, touchPoint);
return true;
}
return false;
}
Снимок экрана ошибки: —
Что мне здесь не хватает?
ПРОСТО ИЗ ЛЮБОПЫТСТВА
Как предложено в ответах, если я использую
bool DragSprite::ccTouchBegan
Итак, будет ли он вызывать функцию delete? или просто функция из моего класса DragSprite. Я имею в виду, будет ли функция все еще переопределена?
Что ж…
его метод объявлен в CCTargetedTouchDelegete. и я думаю, это абстрактная функция.
bool ccTouchBegan(
должно быть
bool DragSprite::ccTouchBegan(
Вам не нужно this
на первом месте.
Почему бы не определить свою функцию как
bool DragSprite::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
именно так вы определили это в классе DragSprite в вашем .h файле.
это
bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
определяет отдельную функцию. это можно использовать только внутри функции-члена класса. Чтобы сделать его членом класса в том виде, как вы его определили, вам нужно указать имя:
bool DragSprite::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
-= — = — = — =
Я вижу, что все вскочили сразу. Синтаксис цели C отличается. Оно использует
@implementation DragSprite
. . . .
@end
указать класс и требует — указать нестатическую функцию-член.
Другое отличие состоит в том, что для выполнения задачи Objective C требуются ссылки на себя.
[self DragSprite] ;
C ++ не
DragSprite () ;