游戏商城:主要提供装备以及道具的购买。

一、本博客主要实现的功能:

1.商品列表显示

2.购买商品(可按数量购买)

二、Cocostudio的UI设计

三、代码

CocosGUIExamplesWeaponScene.h

#ifndef __TestCpp__CocosGUIExamplesWeaponScene__
#define __TestCpp__CocosGUIExamplesWeaponScene__#include "cocos2d.h"
#include "cocos-ext.h"
//#include "../../testBasic.h"USING_NS_CC;
USING_NS_CC_EXT;
using namespace gui;#define WEAPON_ITEM_LAYOUT_TAG  1#define SHOP_ITEM_LAYOUT_TAG        100
#define RANKING_ITEM_LAYOUT_TAG     200#define COUPON_MAX                  300
#define BINDING_MAX                 400
#define MEDAL_MAX                   500class CocosGUIExamplesWeaponScene : public CCScene
{
public:CocosGUIExamplesWeaponScene();~CocosGUIExamplesWeaponScene();virtual void onEnter();virtual void onExit();protected:// a selector callbackvoid menuCloseCallback(CCObject* pSender, TouchEventType type);// shopvoid ShopInit();                 //商品初始化// popupvoid popupInit();                                                //商品弹出框void popupClose(CCObject* pSender, TouchEventType type);     //关闭商品弹出框void popupLogic(CCObject* pSender, TouchEventType type);       //购买商品void popupCalculate(CCObject* pSender, TouchEventType type);    //购买商品数量protected:UILayer* m_pUILayer;int m_nIndex;int m_nCount;int m_nCoupon;int m_nBinding;int m_nMedal;
};#endif /* defined(__TestCpp__CocosGUIExamplesWeaponScene__) */

CocosGUIExamplesWeaponScene.cpp

#include "CocosGUIExamplesWeaponScene.h"const char* shop_textures[8] =
{"cocosgui/gui_examples/DemoShop/armour.png","cocosgui/gui_examples/DemoShop/helmet.png","cocosgui/gui_examples/DemoShop/shield.png","cocosgui/gui_examples/DemoShop/sword.png","cocosgui/gui_examples/DemoShop/gloves.png","cocosgui/gui_examples/DemoShop/dimensity.png","cocosgui/gui_examples/DemoShop/dart.png","cocosgui/gui_examples/DemoShop/backpack.png",
};const char* shop_names[8] =
{"Armour","Helmet","Shield","Sword","Gloves","Dimensity","Dart","Backpack",
};const char* shop_price_units[8] =
{"Counpon","Binding","Medal","Counpon","Binding","Medal","Counpon","Binding",
};const int shop_prices[8] =
{19,10,22,20,8,17,5,4,
};CocosGUIExamplesWeaponScene::CocosGUIExamplesWeaponScene()
: m_nIndex(-1)
, m_nCount(0)
, m_nCoupon(COUPON_MAX)
, m_nBinding(BINDING_MAX)
, m_nMedal(MEDAL_MAX)
{CCScene::init();
}CocosGUIExamplesWeaponScene::~CocosGUIExamplesWeaponScene()
{}void CocosGUIExamplesWeaponScene::onEnter()
{CCScene::onEnter();m_pUILayer = UILayer::create();m_pUILayer->scheduleUpdate();addChild(m_pUILayer);ShopInit();popupInit();
//    BuyInit();
}void CocosGUIExamplesWeaponScene::onExit()
{m_pUILayer->removeFromParent();//   SceneReader::sharedSceneReader()->purgeSceneReader();//   GUIReader::shareReader()->purgeGUIReader();//cocos2d::extension::ActionManager::shareManager()->purgeActionManager();CCScene::onExit();
}void CocosGUIExamplesWeaponScene::menuCloseCallback(CCObject* pSender, TouchEventType type)
{if (type == TOUCH_EVENT_ENDED){CCDirector::sharedDirector()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)exit(0);
#endif}
}// shop
void CocosGUIExamplesWeaponScene::ShopInit()
{// shop Layout from jsonLayout* shop_root = static_cast<Layout*>(GUIReader::shareReader()->widgetFromJsonFile("cocosgui/gui_examples/DemoShop/DemoShop.json"));m_pUILayer->addWidget(shop_root);    // shop scrollviewUIScrollView* shop_scrollview = static_cast<UIScrollView*>(shop_root->getChildByName("shop_ScrollView"));// shop scrollview childrenfor (int i = 0; i < shop_scrollview->getChildren()->count(); ++i){Layout* shop_layout = static_cast<Layout*>(shop_scrollview->getChildren()->objectAtIndex(i));shop_layout->setTag(SHOP_ITEM_LAYOUT_TAG + i);// buy buttonUIButton* buy_button = static_cast<UIButton*>(shop_layout->getChildByName("buy_Button"));buy_button->addTouchEventListener(this, toucheventselector(CocosGUIExamplesWeaponScene::popupLogic));}// ranking scrollviewUIScrollView* ranking_scrollview = static_cast<UIScrollView*>(shop_root->getChildByName("ranking_ScrollView"));// ranking scrollview childrenfor (int i = 0; i < ranking_scrollview->getChildren()->count(); ++i){Layout* ranking_layout = static_cast<Layout*>(ranking_scrollview->getChildren()->objectAtIndex(i));for (int j = 0; j < shop_scrollview->getChildren()->count(); ++j){Layout* shop_layout = static_cast<Layout*>(shop_scrollview->getChildren()->objectAtIndex(j));if (strcmp(ranking_layout->getName(), shop_layout->getName()) == 0){ranking_layout->setTag(RANKING_ITEM_LAYOUT_TAG + (shop_layout->getTag() - SHOP_ITEM_LAYOUT_TAG));}}}for (int i = 0; i < ranking_scrollview->getChildren()->count(); ++i){Layout* ranking_layout = static_cast<Layout*>(ranking_scrollview->getChildren()->objectAtIndex(i));// buy buttonUIButton* buy_button = static_cast<UIButton*>(ranking_layout->getChildByName("buy_Button"));buy_button->addTouchEventListener(this, toucheventselector(CocosGUIExamplesWeaponScene::popupLogic));}// back buttonUIButton* back_button = static_cast<UIButton*>(shop_root->getChildByName("back_Button"));back_button->addTouchEventListener(this, toucheventselector(CocosGUIExamplesWeaponScene::menuCloseCallback));
}// popup
void CocosGUIExamplesWeaponScene::popupInit()
{// buy layoutLayout* buy_layout = static_cast<Layout*>(m_pUILayer->getWidgetByName("buy_Panel"));// add buttonUIButton* add_button = static_cast<UIButton*>(buy_layout->getChildByName("add_Button"));add_button->addTouchEventListener(this, toucheventselector(CocosGUIExamplesWeaponScene::popupCalculate));// sub buttonUIButton* sub_button = static_cast<UIButton*>(buy_layout->getChildByName("sub_Button"));sub_button->addTouchEventListener(this, toucheventselector(CocosGUIExamplesWeaponScene::popupCalculate));// number labelatlasUILabelAtlas* number_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("number_LabelAtlas"));number_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nCount)->getCString());// coupon number labelatlasUILabelAtlas* couponNumber_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("coupon_number_LabelAtlas"));couponNumber_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nCoupon)->getCString());// binding number labelatlasUILabelAtlas* bindingNumber_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("binding_number_LabelAtlas"));bindingNumber_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nBinding)->getCString());// medal number labelatlasUILabelAtlas* medalNumber_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("medal_number_LabelAtlas"));medalNumber_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nMedal)->getCString());// buy buttonUIButton* buy_button = static_cast<UIButton*>(buy_layout->getChildByName("buy_Button"));buy_button->addTouchEventListener(this, toucheventselector(CocosGUIExamplesWeaponScene::popupClose));buy_button->setTouchEnabled(true);// close buttonUIButton* close_button = static_cast<UIButton*>(buy_layout->getChildByName("close_Button"));close_button->addTouchEventListener(this, toucheventselector(CocosGUIExamplesWeaponScene::popupClose));
}void CocosGUIExamplesWeaponScene::popupClose(CCObject *pSender, TouchEventType type)
{if (type == TOUCH_EVENT_ENDED){Layout* buy_layout = static_cast<Layout*>(m_pUILayer->getWidgetByName("buy_Panel"));buy_layout->setVisible(false);// process shop ranking touchEnabledCCObject* obj = NULL;// shop scrollviewUIScrollView* shop_scrollview = static_cast<UIScrollView*>(m_pUILayer->getWidgetByName("shop_ScrollView"));// shop scrollview childrenCCARRAY_FOREACH(shop_scrollview->getChildren(), obj){Layout* shop_layout = static_cast<Layout*>(obj);// buy buttonUIButton* buy_button = static_cast<UIButton*>(shop_layout->getChildByName("buy_Button"));buy_button->setTouchEnabled(true);}// ranking scrollviewUIScrollView* ranking_scrollview = static_cast<UIScrollView*>(m_pUILayer->getWidgetByName("ranking_ScrollView"));// ranking scrollview childrenCCARRAY_FOREACH(ranking_scrollview->getChildren(), obj){Layout* ranking_layout = static_cast<Layout*>(obj);// buy buttonUIButton* buy_button = static_cast<UIButton*>(ranking_layout->getChildByName("buy_Button"));buy_button->setTouchEnabled(true);}}
}void CocosGUIExamplesWeaponScene::popupLogic(CCObject *pSender, TouchEventType type)
{if (type == TOUCH_EVENT_ENDED){        UIWidget* widget = static_cast<UIWidget*>(pSender);UIWidget* parent = static_cast<UIWidget*>(widget->getParent());// buy layoutLayout* buy_layout = static_cast<Layout*>(m_pUILayer->getWidgetByName("buy_Panel"));buy_layout->setVisible(true);// icon imageviewUIImageView* icon_imageview = static_cast<UIImageView*>(buy_layout->getChildByName("icon_ImageView"));// name labelBMFontUILabelBMFont* name_labelBMFont = static_cast<UILabelBMFont*>(buy_layout->getChildByName("name_LabelBMFont"));// price unit labelBMFontUILabelBMFont* priceUnit_labelBMFont = static_cast<UILabelBMFont*>(buy_layout->getChildByName("price_unit_LabelBMFont"));// price labelBMFontUILabelBMFont* price_labelBMFont = static_cast<UILabelBMFont*>(buy_layout->getChildByName("price_LabelBMFont"));UIScrollView* shop_scrollview = static_cast<UIScrollView*>(m_pUILayer->getWidgetByName("shop_ScrollView"));UIScrollView* ranking_scrollview = static_cast<UIScrollView*>(m_pUILayer->getWidgetByName("ranking_ScrollView"));int tag = parent->getTag();int index = 0;if (tag >= SHOP_ITEM_LAYOUT_TAG && tag <= shop_scrollview->getChildren()->count() + SHOP_ITEM_LAYOUT_TAG){index = tag - SHOP_ITEM_LAYOUT_TAG;}else if (tag >= RANKING_ITEM_LAYOUT_TAG && tag <= ranking_scrollview->getChildren()->count() + RANKING_ITEM_LAYOUT_TAG){index = tag - RANKING_ITEM_LAYOUT_TAG;}m_nIndex = index;icon_imageview->loadTexture(shop_textures[index]);name_labelBMFont->setText(shop_names[index]);priceUnit_labelBMFont->setText(shop_price_units[index]);price_labelBMFont->setText(CCString::createWithFormat("%d", shop_prices[index])->getCString());// reset buy propertym_nCount = 0;// number labelatlasUILabelAtlas* number_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("number_LabelAtlas"));number_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nCount)->getCString());m_nCoupon = COUPON_MAX;m_nBinding = BINDING_MAX;m_nMedal = MEDAL_MAX;// coupon number labelatlasUILabelAtlas* couponNumber_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("coupon_number_LabelAtlas"));couponNumber_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nCoupon)->getCString());// binding number labelatlasUILabelAtlas* bindingNumber_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("binding_number_LabelAtlas"));bindingNumber_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nBinding)->getCString());// medal number labelatlasUILabelAtlas* medalNumber_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("medal_number_LabelAtlas"));medalNumber_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nMedal)->getCString());// process shop ranking touchEnabledCCObject* obj = NULL;// shop scrollview childrenCCARRAY_FOREACH(shop_scrollview->getChildren(), obj){Layout* shop_layout = static_cast<Layout*>(obj);// buy buttonUIButton* buy_button = static_cast<UIButton*>(shop_layout->getChildByName("buy_Button"));buy_button->setTouchEnabled(false);}// ranking scrollview childrenCCARRAY_FOREACH(ranking_scrollview->getChildren(), obj){Layout* ranking_layout = static_cast<Layout*>(obj);// buy buttonUIButton* buy_button = static_cast<UIButton*>(ranking_layout->getChildByName("buy_Button"));buy_button->setTouchEnabled(false);}}
}void CocosGUIExamplesWeaponScene::popupCalculate(CCObject *pSender, TouchEventType type)
{if (type == TOUCH_EVENT_ENDED){UIButton* button = static_cast<UIButton*>(pSender);UIWidget* buy_layout = static_cast<UIWidget*>(button->getParent());int price = shop_prices[m_nIndex];if (strcmp(button->getName(), "add_Button") == 0)   // add{if (strcmp(shop_price_units[m_nIndex], "Counpon") == 0){if (m_nCoupon >= price){m_nCount++;m_nCoupon -= price;}                }else if (strcmp(shop_price_units[m_nIndex], "Binding") == 0){if (m_nBinding >= price){m_nCount++;m_nBinding -= price;}}if (strcmp(shop_price_units[m_nIndex], "Medal") == 0){if (m_nMedal >= price){m_nCount++;m_nMedal -= price;}}}else if (strcmp(button->getName(), "sub_Button") == 0)  // sub{if (m_nCount > 0){m_nCount--;if (strcmp(shop_price_units[m_nIndex], "Counpon") == 0){m_nCoupon += price;}else if (strcmp(shop_price_units[m_nIndex], "Binding") == 0){m_nBinding += price;}if (strcmp(shop_price_units[m_nIndex], "Medal") == 0){m_nMedal += price;}}}// number labelatlasUILabelAtlas* number_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("number_LabelAtlas"));number_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nCount)->getCString());// coupon number labelatlasUILabelAtlas* couponNumber_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("coupon_number_LabelAtlas"));couponNumber_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nCoupon)->getCString());// binding number labelatlasUILabelAtlas* bindingNumber_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("binding_number_LabelAtlas"));bindingNumber_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nBinding)->getCString());// medal number labelatlasUILabelAtlas* medalNumber_labelAtlas = static_cast<UILabelAtlas*>(buy_layout->getChildByName("medal_number_LabelAtlas"));medalNumber_labelAtlas->setStringValue(CCString::createWithFormat("%d", m_nMedal)->getCString());}
}

本博文的缺陷:商品列表项,都是静态的,最好更改成动态,把每一项,做多一个画布。

相关资源及代码:http://download.csdn.net/detail/my183100521/6982331

从零开始学习cocoStudio(8)--商城相关推荐

  1. 从零开始学习cocoStudio(5)--骨骼动画使用方法

    骨骼动画 当前有两种模型动画的方式:顶点动画和骨骼动画.顶点动画中,每帧动画其实就是模型特定姿态的一个"快照".通过在帧之间插值的方法,引擎可以得到平滑的动画效果.在骨骼动画中,模 ...

  2. 从零开始学习cocoStudio(1)--cocoStudio是什么?

    一.cocoStudio是什么? CocoStudio是一套专业的永久免费的游戏开发工具集,帮助开发者快速创建游戏资源,将大部分繁琐的游戏开发工作使用编辑器来快速制作,CocoStudio包含了游戏开 ...

  3. 从零开始学习 webservice第一集,java webservice简单实例入门教程

    现在从零开始学习webservice 概念自己百度搜,总之,webservice就相当于一个接口,就像你走进了一家售货店,你不需要知道这家店怎么卖给你东西,你拿着钱去,说我要一包玉溪,人家就会给你返回 ...

  4. python新手教程 从零开始-Python零基础从零开始学习Python十分钟快速入门

    原标题:Python零基础从零开始学习Python十分钟快速入门 学习Python的,都知道Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python是一种动态解释型的 ...

  5. python零基础难学吗-如何从零开始学习Python,零基础学python难吗

    Python并不难学,它诞生至今已经过25个年头,但相对于其他语言,它更加易学.易读,非常适合快速开发,Python编程简单直接,更适合初学编程者. 那么,如何从零开始学习python呢? 可以分为这 ...

  6. python自学多久可以找到工作-25岁从零开始学习python还能找到工作吗?

    相信近期大家经常可以看到培训机构推出python相关的课程,随着人工智能技术逐渐进入大众的生活,这种编程语言以简单.应用广泛的优势,成为了进入人工智能领域的条件之一.对于精通python开发的人,在职 ...

  7. python语言怎么学-如何从零开始学习Python,python语言编程入门

    Python并不难学,它诞生至今已经过25个年头,但相对于其他语言,它更加易学.易读,非常适合快速开发,Python编程简单直接,更适合初学编程者. 那么,如何从零开始学习python呢? 可以分为这 ...

  8. 从零开始学习hadoop之发行版选择

    从零开始学习hadoop之发行版选择 经常会看到这样的问题:零基础学习hadoop难不难?有的人回答说:零基础学习hadoop,没有想象的那么难,也没有想象的那么容易.看到这样的答案不免觉得有些尴尬, ...

  9. 从零开始学习OpenGL ES之五 – 材质

    从零开始学习OpenGL ES之五 – 材质 作者: iPhoneGeek 爱疯极客 09-Jan-10 iPhone Development 浏览次数: 411 |  评论 ↓ Tweet Shar ...

最新文章

  1. Hlg 1750 【树的最长路径】.cpp
  2. zigbee zcl规范及其协议栈实现3 读取服务器端属性值
  3. EntityFramework Core 5.0 VS SQLBulkCopy
  4. JavaScript--小白入门篇1
  5. 加密芯片在汽车无钥匙启动行业的应用
  6. 微信自动回复 html 点击文字,【微信开发】公众号自动回复文字和图文链接(示例代码)...
  7. Angularjs的http请求
  8. 【解决方法】域名指向本地(127.0.0.1, 0.0.0.0)
  9. 苹果7p最佳系统版本_告别虚拟机和双系统,移动硬盘+Win To Go,苹果笔记本的最佳选择...
  10. 中国电子学会2022年12月份青少年软件编程Python等级考试试卷四级真题(含答案)
  11. 【翻译】Chromium 网络栈 disk cache 设计原理
  12. 什么是五险一金,你懂吗?
  13. atsha204a加密ic01
  14. HDU 4114 Disney's FastPass
  15. 网页webp转非webp的jpg gif png 图片
  16. 【Unity编程】Unity中的欧拉旋转
  17. 机械硬盘速度测试软件用哪个,硬盘测评,脱颖而出的果然是它!
  18. 《乔布斯传》经典摘录(一)
  19. WiFi应用冷门变热点 WiFi共享精灵获投千万美金
  20. 高效学习真的有秘籍吗?

热门文章

  1. 全国中学生天文学竞赛简介
  2. 课程设计之音乐播放器
  3. PyInstaller天坑终极攻略(PyInstaller莫名报错?面对错误信息无从下手?全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目)
  4. docker使用遇到的坑 Addtion property mysql is not allowed
  5. 解决java.util.LinkedHashMap cannot be cast to 的问题
  6. 荷月工业互联网产融平台荣获2020“双链奖”优秀应用案例奖
  7. 探讨:网银数字证书加密解密原理
  8. 光模块的传输距离受哪些方面的因素影响?
  9. 通过例子学习Rust
  10. Javascript 计算中英文字符串长度