从零开始学习cocoStudio(8)--商城
游戏商城:主要提供装备以及道具的购买。
一、本博客主要实现的功能:
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)--商城相关推荐
- 从零开始学习cocoStudio(5)--骨骼动画使用方法
骨骼动画 当前有两种模型动画的方式:顶点动画和骨骼动画.顶点动画中,每帧动画其实就是模型特定姿态的一个"快照".通过在帧之间插值的方法,引擎可以得到平滑的动画效果.在骨骼动画中,模 ...
- 从零开始学习cocoStudio(1)--cocoStudio是什么?
一.cocoStudio是什么? CocoStudio是一套专业的永久免费的游戏开发工具集,帮助开发者快速创建游戏资源,将大部分繁琐的游戏开发工作使用编辑器来快速制作,CocoStudio包含了游戏开 ...
- 从零开始学习 webservice第一集,java webservice简单实例入门教程
现在从零开始学习webservice 概念自己百度搜,总之,webservice就相当于一个接口,就像你走进了一家售货店,你不需要知道这家店怎么卖给你东西,你拿着钱去,说我要一包玉溪,人家就会给你返回 ...
- python新手教程 从零开始-Python零基础从零开始学习Python十分钟快速入门
原标题:Python零基础从零开始学习Python十分钟快速入门 学习Python的,都知道Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python是一种动态解释型的 ...
- python零基础难学吗-如何从零开始学习Python,零基础学python难吗
Python并不难学,它诞生至今已经过25个年头,但相对于其他语言,它更加易学.易读,非常适合快速开发,Python编程简单直接,更适合初学编程者. 那么,如何从零开始学习python呢? 可以分为这 ...
- python自学多久可以找到工作-25岁从零开始学习python还能找到工作吗?
相信近期大家经常可以看到培训机构推出python相关的课程,随着人工智能技术逐渐进入大众的生活,这种编程语言以简单.应用广泛的优势,成为了进入人工智能领域的条件之一.对于精通python开发的人,在职 ...
- python语言怎么学-如何从零开始学习Python,python语言编程入门
Python并不难学,它诞生至今已经过25个年头,但相对于其他语言,它更加易学.易读,非常适合快速开发,Python编程简单直接,更适合初学编程者. 那么,如何从零开始学习python呢? 可以分为这 ...
- 从零开始学习hadoop之发行版选择
从零开始学习hadoop之发行版选择 经常会看到这样的问题:零基础学习hadoop难不难?有的人回答说:零基础学习hadoop,没有想象的那么难,也没有想象的那么容易.看到这样的答案不免觉得有些尴尬, ...
- 从零开始学习OpenGL ES之五 – 材质
从零开始学习OpenGL ES之五 – 材质 作者: iPhoneGeek 爱疯极客 09-Jan-10 iPhone Development 浏览次数: 411 | 评论 ↓ Tweet Shar ...
最新文章
- Hlg 1750 【树的最长路径】.cpp
- zigbee zcl规范及其协议栈实现3 读取服务器端属性值
- EntityFramework Core 5.0 VS SQLBulkCopy
- JavaScript--小白入门篇1
- 加密芯片在汽车无钥匙启动行业的应用
- 微信自动回复 html 点击文字,【微信开发】公众号自动回复文字和图文链接(示例代码)...
- Angularjs的http请求
- 【解决方法】域名指向本地(127.0.0.1, 0.0.0.0)
- 苹果7p最佳系统版本_告别虚拟机和双系统,移动硬盘+Win To Go,苹果笔记本的最佳选择...
- 中国电子学会2022年12月份青少年软件编程Python等级考试试卷四级真题(含答案)
- 【翻译】Chromium 网络栈 disk cache 设计原理
- 什么是五险一金,你懂吗?
- atsha204a加密ic01
- HDU 4114 Disney's FastPass
- 网页webp转非webp的jpg gif png 图片
- 【Unity编程】Unity中的欧拉旋转
- 机械硬盘速度测试软件用哪个,硬盘测评,脱颖而出的果然是它!
- 《乔布斯传》经典摘录(一)
- WiFi应用冷门变热点 WiFi共享精灵获投千万美金
- 高效学习真的有秘籍吗?
热门文章
- 全国中学生天文学竞赛简介
- 课程设计之音乐播放器
- PyInstaller天坑终极攻略(PyInstaller莫名报错?面对错误信息无从下手?全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目)
- docker使用遇到的坑 Addtion property mysql is not allowed
- 解决java.util.LinkedHashMap cannot be cast to 的问题
- 荷月工业互联网产融平台荣获2020“双链奖”优秀应用案例奖
- 探讨:网银数字证书加密解密原理
- 光模块的传输距离受哪些方面的因素影响?
- 通过例子学习Rust
- Javascript 计算中英文字符串长度