cocostudio是触控出品的UI编辑器,数据编辑器,动画编辑器以及场景编辑器的结合体。
使用cocostudio可以少写很多的代码,使游戏开发更加简单和快速。
这次我使用了cocostudio自带的Scrollview来做了一个界面,发现比以前单单使用代码的方式继承scrollview的方式确实是方便了不少,开发的速度也加快了不少。
首先,我是在cocostudio里面画了一个滚动层容器,注意的是滚动层的大小一定要比显示区域的大小要大,不然会出现不会滚动的情况。
至于在cocostudio怎样使用,可以去官网看看,很简单,这里就不讨论了。这里主要讨论实现scrollview里面某个item里面的button让点击的item排列到Scrollview的最后,并让
位于这个item后面的item项都能往前移动一位,直接贴代码:
#include "ScrollTest.h" using namespace cocos2d; using namespace cocos2d::extension; using namespace ui; ScrollTest::ScrollTest(int count) :m_count(count) { } ScrollTest::~ScrollTest() { } ScrollTest* ScrollTest::create(int count) { ScrollTest* pRet = new ScrollTest(count); if ( pRet && pRet->init()) { pRet->autorelease(); return pRet; } else { delete pRet; pRet = NULL; } } bool ScrollTest::init() { bool isRet = false; if ( !CCLayer::init()) { return isRet; } isRet = true; //创建cocostudio的层,并添加到游戏里面 this->m_uiLayer = UILayer::create(); this->addChild(this->m_uiLayer); //载入cocostudio创建的文件,并加入创建的cocostudio的层里面 this->m_uiWidget = GUIReader::shareReader()->widgetFromJsonFile("ActionUI_1.json"); this->m_uiLayer->addWidget(this->m_uiWidget);、 //得到cocostudio里面设置好的scrollview this->m_scrollview = (UIScrollView*)ui::UIHelper::seekWidgetByTag(this->m_uiWidget,14); setScrollview(); } void ScrollTest::setScrollview() { //设置Scrollview的滚动区域,数字可以自己改变 this->m_scrollview->setInnerContainerSize(CCSizeMake(1280,20*110)); for (int i = 0; i < 20; i++) {
//在cocostudio里面我画了一个item,并调用clone复制了多份,并把它加入scrollview的子节点,这样对于scrollview的item项的编辑的工作就轻松很多了 UIWidget* widget = ui::UIHelper::seekWidgetByTag(this->m_uiWidget,17); UIWidget* itemWidget = widget->clone(); itemWidget->setVisible(true); itemWidget->setZOrder(2); itemWidget->setAnchorPoint(ccp(0,0)); itemWidget->setPosition(ccp(0,2090-(i * 110)));
//为item项里面的button设置了Name这样的作用是方便记录我是点击了那个item的button Button* button = (Button*)ui::UIHelper::seekWidgetByTag(itemWidget,19); char userData[10]; sprintf(userData,"%d",i); itemWidget->setName(userData); button->setName(userData); button->addTouchEventListener(this,toucheventselector(ScrollTest::buttonCallback)); CCLabelTTF* label = CCLabelTTF::create(userData,"Arial",30); label->setPosition(ccp(353,67)); label->setAnchorPoint(ccp(0.5,0.5)); itemWidget->addNode(label); ImageView* iview = (ImageView*)ui::UIHelper::seekWidgetByTag(itemWidget,18); if ( i % 2 == 0 ) {
//为item项里面的imageview载入需要的纹理 iview->loadTexture("1002.png"); } else { iview->loadTexture("1001.png"); }
//把作为item的widget放入链表,目的是为了当点击了某个item的button后,可以把这个item放入scrollview的底部,并让这个item后面的都往前移动一位 this->m_scrollview->addChild(itemWidget); itemList.push_back(itemWidget); } } //按钮的回调 void ScrollTest::buttonCallback(CCObject* pSender,TouchEventType type) { //char* data = NULL; if ( type == TOUCH_EVENT_ENDED ) { Button* button = (Button*)pSender; const char* data = button->getName(); CCLog("data is %sn",data); int temp = atoi(data); int i = 0; list<Widget*>::iterator it = itemList.begin(); while ( it != itemList.end() ) { if ( i == temp ) {
//重置链表,把点击的item移到链表的最后,并让这个item后面的item项都往前移动一位 Widget* widget = *it; itemList.remove(widget); itemList.push_back(widget); updateScrollview(); return; } i++; it++; } } } void ScrollTest::updateScrollview() { //把item从Scrollview删除,并根据链表重新绘制scrollview list<Widget*>::iterator it = itemList.begin(); int i = 0; while( it != itemList.end()) { char data[10]; sprintf(data,i);
Widget* widget = *it;
widget->retain(); this->m_scrollview->removeChild(widget); widget->setVisible(true); widget->setZOrder(2); widget->setAnchorPoint(ccp(0,0)); 位置根据实际情况调整widget->setPosition(ccp(0,2090-(i * 110))); Button* button = (Button*)ui::UIHelper::seekWidgetByTag(widget,19); button->setName(data); this->m_scrollview->addChild(widget); widget->release(); it++; i++; } } (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|