经过数周的调试,我很难弄清楚cocos2d :: Menu发生了什么。当我点击按钮时,我的MenuItemImage没有收到回调,这让我感到惊讶。因此,当我点击左下角时,我点击其他任何地方的沮丧和繁荣,回调注册!
它有点偏向左下角并想知道是什么原因引起的?我已经使用原样提供的糟糕的示例项目重现了该问题,并且无法使用默认窗口大小重现此问题。但是,当我更改为自定义大小时,问题现在可以重现。我还注意到检测边界似乎不是给定MenuItemImage的实际形状。它有点方形。
我在这里遇到困境。这真令人沮丧。文档和社区就像地狱一样无益。
我正在使用cocos2d-x v3.6;
这是我的代码:
mRetryButton = cocos2d::MenuItemImage::create("asset_button_up.png", "asset_button_down.png", CC_CALLBACK_1(MainGameScene::onRetryButtonClicked, this));
mRetryButton->setPosition(cocos2d::Vec2(screenSize.width / 2.0f, screenSize.height / 2.0f));
auto menu = cocos2d::Menu::create(mRetryButton, NULL);
menu->setPosition(cocos2d::Vec2::ZERO);
this->addChild(menu, 1);
你知道解决这个问题吗?还是我只是可怕地错过了什么?我只需要一个简单的屏幕按钮。没有什么花哨。只是普通的沉闷按钮。
谢谢!
答案 0 :(得分:0)
我修好了!
我尝试了很多方法来创建一个按钮。所有这些都表现出类似的行为。
更改screenSize一定有问题。我犯了一个可怕的错误。
在AppDelegate::applicationDidFinishLaunching
首次初始化glview
时,有人告诉我,为了更改屏幕尺寸,我需要调用它:cocos2d::Director::getInstance()->getOpenGLView()->setFrameSize(width , height)
。我在这个特定的行之后设置它,使它看起来像这样:
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLViewImpl::create("My Game");
director->setOpenGLView(glview);
}
director->getOpenGLView()->setFrameSize(width , height);
这是错的。在导演设置OpenGL视图后执行此操作会注册原始的960,640屏幕大小,该大小会在场景,图层,节点之间产生混响。每次检查调试器时,有问题的节点的内容大小(我所拥有的按钮的大小为(140,40)),它默认为原始屏幕大小。这个不对。那里有些不对劲。如果您自己手动设置内容大小,则无法修复此问题。我认为通过错误地设置屏幕大小一些节点'在导演设置GL视图时,内容大小未对齐或未正确计算。改变屏幕的正确方法是:
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLViewImpl::create("My Game");
glview->setFrameSize(370, 480);
director->setOpenGLView(glview);
}
现在,点击检测边界,位置和大小完全适合精灵图像,现在可以接收回调!对于*(#$ *两周。我明白了。
我希望这有助于将来的某个人!