创建游戏背包的实现方式

大家好,我使用cocostudio创建了一个背包的背景,然后使用coco2dx代码在背包背景上添加对应的背包项,另外为背包项添加点击时间,代码如下:
实现逻辑为:点击背包菜单后,动态创建背包项,但是无法创建触摸事件,请问如何实现,背包项的点击。还有就是想了解一下,大家都是如何创建游戏的背包的。
void HelloWorld::menuCallBack(Ref* pSender,TouchEventType type)
{
Size winSize = Director::getInstance()->getWinSize();
//Size visSize = Director::getInstance()->getVisibleSize();

bool flag = false;
Widget* bagPanel;
if(this->getChildByTag(100002) == NULL) {
bagPanel =static_castui::Widget*(GUIReader::getInstance()->widgetFromJsonFile(“LsBag/LsBag.ExportJson”));
bagPanel->setTag(100002);
Button* closeBtn = static_cast<Button*>(Helper::seekWidgetByTag(bagPanel,46));
closeBtn->addTouchEventListener(this,toucheventselector(HelloWorld::closeBagCall));
ScrollView* s = static_cast<ScrollView*>(Helper::seekWidgetByTag(bagPanel,47));
int height = 1014 + 1060;
s->setInnerContainerSize(Size(s->getSize().width,height));

Size innerSize = s->getInnerContainerSize();

for (int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++) {
Sprite* sp = Sprite::create(“LsRichBag/common_shading06.png”);
int x = ((i+1) * 14 + sp->getContentSize().width / 2) + (i * sp->getContentSize().width);
int y = innerSize.height - (((j+1) * 14 + sp->getContentSize().height / 2) + (j * sp->getContentSize().height));
sp->setPosition(Point(x,y));
s->addChild(sp);
char buf;
sprintf(buf, “%d”, i+1);
auto _target_file_name = std::string(“LsRichBag/”) + buf + std::string(".png");
Sprite* sp2 = Sprite::create(_target_file_name);
//sp2->setTouchEnabled(true);
sp2->setPosition(Point(sp2->getContentSize().width / 2, sp2->getContentSize().height / 2));
sp2->setScale(0.8f);
//sp2->addTouchEventListener(this,toucheventselector(HelloWorld::bagItemCall));
sp->addChild(sp2);
}
}
flag = true;
}
switch (type)
{
case TOUCH_EVENT_ENDED:
//test();
if(flag) {
bagPanel->setPosition(Point(winSize.width-bagPanel->getSize().width,winSize.height + bagPanel->getSize().height / 2));
this->addChild(bagPanel);
EaseBackOut* backOut = EaseBackOut::create(MoveTo::create(0.3f, Point(winSize.width-bagPanel->getSize().width, winSize.height / 2 - bagPanel->getSize().height / 2)));
bagPanel->runAction(backOut);
} else {
auto* bag = this->getChildByTag(100002);
EaseBackIn* backIn = EaseBackIn::create(MoveTo::create(0.3f, Point(winSize.width-bag->getContentSize().width, 0 - bag->getContentSize().height / 2)));
bag->runAction(Sequence::create(backIn,CallFuncN::create(CC_CALLBACK_1(HelloWorld::callback,this)),NULL));
}
break;
default:
break;
}
}

closeBtn->addTouchEventListener(this,toucheventselector(HelloWorld::closeBagCall)); 这个是注册一个回调,但是你的事件处理貌似是在void HelloWorld::menuCallBack(Ref* pSender,TouchEventType type) 。建议检查下代码逻辑。

版主您好,menuCallBack是点击背包菜单的回调,而closeBagCall是点击背包界面的关闭按钮回调。在menuCallBack回调函数中初始化了背包的界面,但是无法给精灵添加单击事件。如果加入下面一行代码就会报错。
sp2->setPosition(Point(sp2->getContentSize().width / 2, sp2->getContentSize().height / 2)); @qQ6{n[S}
sp2->setScale(0.8f); FW")1Qb2
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, sp2);