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的使用的更多相关文章

  1. HTML5 input新增type属性color颜色拾取器的实例代码

    type 属性规定 input 元素的类型。本文较详细的给大家介绍了HTML5 input新增type属性color颜色拾取器的实例代码,感兴趣的朋友跟随脚本之家小编一起看看吧

  2. amazeui模态框弹出后立马消失并刷新页面

    这篇文章主要介绍了amazeui模态框弹出后立马消失并刷新页面,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. 移动HTML5前端框架—MUI的使用

    这篇文章主要介绍了移动HTML5前端框架—MUI的使用的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. AmazeUI 模态窗口的实现代码

    这篇文章主要介绍了AmazeUI 模态窗口的实现代码,代码简单易懂,非常不错,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. ios – UIPopoverController出现在错误的位置

    所以我花了一些时间寻找答案,但到目前为止还没有找到任何答案.我正在尝试从UIInputAccessoryView上的按钮呈现弹出窗口.UIBarButtonItem我想显示popover来自定制视图,所以我可以使用图像.我创建这样的按钮:当需要显示popover时,我这样做:但我得到的是:弹出窗口看起来很好,但它应该出现在第一个按钮上时出现在第二个按钮上.然后我发现了这个问题:UIBarButto

  6. ios – 关闭UIBarButtonItem上的突出显示

    我正在尝试使用UIBarButtonItem在我的UIToolbar上添加标题.我使用简单的风格,看起来很好,但我似乎无法让它停止突出显示触摸.“突出显示时触摸”选项不适用于条形按钮项目.有没有快速简便的方法来做到这一点?

  7. 以编程方式调整iOS中的按钮大小

    我正在使用XCode4.6.1并开发iOS6.我在故事板上添加了一个按钮.我在我的实现文件ViewController.m中创建了一个插座:我尝试按如下所示更改按钮b1的属性(在同一个文件中:ViewController.m):当我在模拟器中运行应用程序时,按钮的alpha成功设置为0.5.但是,按钮的位置和大小不会改变.我尝试了各种方法来实现它.然而似乎没有任何作用.我想知道我做错了什么.我对O

  8. 如何在iOS / Swift的顶部导航栏中添加“继续”按钮

    我想在导航栏的右侧添加一个“继续”按钮.如何实现这一目标?我一直在尝试使用UIBarButtonItem上的一些方法,但无法使其正常工作.我迄今为止的最大努力是:但我在第一行遇到错误.它不喜欢“style”参数.我也试过了但没有运气.仍然停留在样式参数上.有任何想法吗?

  9. ios – 将图像添加到界面构建器中的按钮

    我想在我的按钮而不是文本中添加图像.我可以在界面构建器中这样做吗?我可以看一下这个例子吗?

  10. ios – 自定义BackBarButtonItem

    主要原因是您丢失了标准后退按钮滑动动画以更改视图.此外,这意味着我不需要使用自定义按钮或编写自定义方法返回.它只是起作用.希望这也能解决别人的问题,我知道我已经坚持了3个小时!

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部