
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 %s\n",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++; } }
总结以上是内存溢出为你收集整理的cocostudio Scrollview的使用全部内容,希望文章能够帮你解决cocostudio Scrollview的使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)