【Cocos2d-x 3.0】触发事件没反应

我是马甲1号 2015-01-28 02:09:10
代码如下,怎么触摸事件总是没反应呢?是写的不对吗?cocos2d-x 3.0 + VS2013



bool levelSelector::init() {

if (!Layer::init()) {
return false;
}
else {

auto VisualSize = Director::getInstance()->getVisibleSize();
auto OriginPoint = Director::getInstance()->getVisibleOrigin();

auto selector_bg_sprite = Sprite::create("LevelSelector.png");
auto goNextSprite = Sprite::create("goNextIcon.png");
auto goPreviousSprite = Sprite::create("goPreviousIcon.png");

selector_bg_sprite->setPosition(Point(VisualSize.width / 2 + OriginPoint.x, VisualSize.height / 2 + OriginPoint.y));

goPreviousSprite->setPosition(Point(goPreviousSprite->getContentSize().width, VisualSize.height / 2 ));

goNextSprite->setPosition(Point(VisualSize.width - goNextSprite->getContentSize().width,
VisualSize.height / 2));

selector_bg_sprite->setScale(1.5f);

this->addChild(selector_bg_sprite, 0);
this->addChild(goNextSprite, 0);
this->addChild(goPreviousSprite, 2);

String* pString;

for (int i = 0; i < 20; i++) {


pString = String::createWithFormat("%d", i + 1);

auto imagPath = "level_bg.png";

auto levelSprite = Sprite::create(imagPath);

auto levelLabel = LabelBMFont::create();
levelLabel->setString(pString->getCString());


levelLabel->setColor(ccRED);

//printf_s("%d", pString);

auto x = VisualSize.width / 5 + i % 8 * 80;
auto y = VisualSize.height - (VisualSize.height / 5) - i / 8 * 100;

levelSprite->setPosition(Point(x , y));
levelSprite->setScale(1.0f);
levelSprite->setTag(i + 1);

levelLabel->setPosition(Point(x , y));

this->addChild(levelSprite,0,i+1);
this->addChild(levelLabel, 0);
}

this->setTouchEnabled(true);

auto levelSpriteListener = EventListenerTouchOneByOne::create();

levelSpriteListener->setSwallowTouches(true);

levelSpriteListener->onTouchBegan = [=](Touch* touch, Event* event) {

log("onTouchBegan");
MessageBox("Hellow! onTouchBegan!", "Alert");
return true;
};

levelSpriteListener->onTouchMoved = [=](Touch* touch, Event* event) {

log("onTouchMoved");
MessageBox("Hellow! onTouchMoved!", "Alert");
};

levelSpriteListener->onTouchEnded = [=](Touch* touch, Event* event) {

log("onTouchEnded");
MessageBox("Hellow! onTouchEnded!", "Alert");
};

levelSpriteListener->onTouchBegan = CC_CALLBACK_2(levelSelector::onTouchBegan, this);
levelSpriteListener->onTouchMoved = CC_CALLBACK_2(levelSelector::onTouchMoved, this);
levelSpriteListener->onTouchEnded = CC_CALLBACK_2(levelSelector::onTouchEnded, this);

_eventDispatcher->addEventListenerWithSceneGraphPriority(levelSpriteListener, this);


return true;

} //end else


}

...全文
1600 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
haloujj 2015-11-05
  • 打赏
  • 举报
回复
引用 8 楼 WoshiMJ001 的回复:
终于搞定了 原来在onEnter里面还要加上这玩意

Layer::onEnter();
是的,重写父类onEnter要记得调用父类的onEnter方法,否则触摸和定时器均无效,应为这些在父类的onEnter有处理
笨木头 2015-01-29
  • 打赏
  • 举报
回复
引用 4 楼 WoshiMJ001 的回复:
[quote=引用 3 楼 musicvs 的回复:] 你试过在空项目里试不?我测试的也是3.0,一个HelloWorld项目,msg能出来的~
在空项目里测试可以,这是怎么回事呢 我这个场景是用来做选关的,是从前一个场景跳到这个场景,难道和这个有关系?[/quote] 果断有关系了...至于什么关系...解铃还须系铃人吖
我是马甲1号 2015-01-29
  • 打赏
  • 举报
回复
引用 3 楼 musicvs 的回复:
你试过在空项目里试不?我测试的也是3.0,一个HelloWorld项目,msg能出来的~
在空项目里测试可以,这是怎么回事呢 我这个场景是用来做选关的,是从前一个场景跳到这个场景,难道和这个有关系?
笨木头 2015-01-29
  • 打赏
  • 举报
回复
你试过在空项目里试不?我测试的也是3.0,一个HelloWorld项目,msg能出来的~
我是马甲1号 2015-01-29
  • 打赏
  • 举报
回复
终于搞定了 原来在onEnter里面还要加上这玩意

Layer::onEnter();
我是马甲1号 2015-01-29
  • 打赏
  • 举报
回复
引用 5 楼 musicvs 的回复:
[quote=引用 4 楼 WoshiMJ001 的回复:] [quote=引用 3 楼 musicvs 的回复:] 你试过在空项目里试不?我测试的也是3.0,一个HelloWorld项目,msg能出来的~
在空项目里测试可以,这是怎么回事呢 我这个场景是用来做选关的,是从前一个场景跳到这个场景,难道和这个有关系?[/quote] 果断有关系了...至于什么关系...解铃还须系铃人吖[/quote] 好吧,我找到原因了,我重写了onEnter(),里面没有代码,我把它灭了,就有效果了。

void levelSelector::onEnter() {
	//MessageBox("Hellow! Entering the layer now!", "Alert");
	
}
但是onEnter不是进入Layer的时候调用的么,怎么会影响到init()里面的代码?求解释……
我是马甲1号 2015-01-29
  • 打赏
  • 举报
回复
引用 5 楼 musicvs 的回复:
[quote=引用 4 楼 WoshiMJ001 的回复:] [quote=引用 3 楼 musicvs 的回复:] 你试过在空项目里试不?我测试的也是3.0,一个HelloWorld项目,msg能出来的~
在空项目里测试可以,这是怎么回事呢 我这个场景是用来做选关的,是从前一个场景跳到这个场景,难道和这个有关系?[/quote] 果断有关系了...至于什么关系...解铃还须系铃人吖[/quote] 我新建了一个项目,把两个场景的代码都搬过去了,结果是起作用……代码一点没改,为毛呢?难道是前面那个项目打开的方式不对?
我是马甲1号 2015-01-28
  • 打赏
  • 举报
回复
引用 1 楼 musicvs 的回复:
测试没问题吖。。。 你后面的三条CC_CALLBACK_2不需要了吧,前面已经设置过回调函数了
你测试没问题吗?怎么我这一点反应都没有呢……,log和MessageBox的东西都没出来 后面的三条CC_CALLBACK_2是因为我用前面的回调函数没起作用,又改用CC_CALLBACK_2试了试,也没起作用,没注释掉
笨木头 2015-01-28
  • 打赏
  • 举报
回复
测试没问题吖。。。 你后面的三条CC_CALLBACK_2不需要了吧,前面已经设置过回调函数了

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧