【问题标题】:Unable to get touches in COCOS 2dx?COCOS 2dx 无法触摸?
【发布时间】:2014-03-12 18:30:26
【问题描述】:

下面是我的HelloWorld.h类:

class HelloWorld : public cocos2d::CCLayer
{
public:
HelloWorld();

// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();

b2World* world;

// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::CCScene* scene();

// a selector callback
void menuCloseCallback(CCObject* pSender);

// implement the "static node()" method manually
CREATE_FUNC(HelloWorld);

virtual void draw();
virtual void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
virtual void ccTouchesMoved(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
virtual void ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
void update(float dt);


};

在我的HelloWorld.cpp 类中,我已经初始化了我的init 方法

bool HelloWorld::init(){
setTouchEnabled( true );
setAccelerometerEnabled( true );
scheduleUpdate();
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
return true;
}

这段代码现在对我有用! :)

【问题讨论】:

  • 嗯只是猜测,尝试从 ccTouches* 方法声明中删除“virtual”关键字。
  • 不。没用。 :(
  • cocos2d::CCLayer 已经派生自 cocos2d::CCTargetedTouchDelegate,请尝试将其从类定义中删除

标签: c++ sprite cocos2d-x ccsprite touchesbegan


【解决方案1】:

Targeted Delegate 用于单点触摸事件。将您的事件更改为以下内容:

virtual bool ccTouchBegan (CCTouch *pTouch, CCEvent *pEvent)

您可以在LinkLink 的 Cocos2D 文档的 iPhone 端阅读更多关于目标和标准触摸代理的信息

按照下面在我的初始化方法中编写委托解决了问题

    CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 1);

【讨论】:

  • 您是否尝试过将您的代码作为标准委托运行以查看是否可以收到任何触摸?
  • 不,我对这个编程很陌生!所以我不知道你到底是什么意思!
  • 去掉所有目标委托代码并添加这一行:CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 1);然后看看你是否进入了带有断点的 ccTouchesBegan。标准委托应该像普通应用一样处理触摸,所以你应该得到所有的触摸事件。
  • 使用这个委托我得到一个错误,从派生类 hello world 到 cctouchdelegate 的模糊转换
  • 您从标题中删除了 ,public cocos2d::CCTargetedTouchDelegate 对吗?你能发布你的整个初始化方法吗?
【解决方案2】:

如果您想禁用多点触控功能,您可以使用:

virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){}
virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){}

所以你需要:

bool init()
{
    ...
    setTouchEnabled(true);
    this->setTouchMode(ccTouchesMode::kCCTouchesOneByOne); // Important
}

如果您省略最后一行,则需要覆盖这些(多点触控模式):

void ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
void ccTouchesMoved(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多