此记录使用两个控制流:ImageView 和 Slide。

----------------------------------------------------------------------------------------------------------------------------

ImageView

---------------------------------------------------------------------------------------------------------------------------

此时已经十一点多了,尽管有点晚,但我还是毅然而然的研究下cocostudio版“Sprite类”(谁让LOL玩得太晚了)。

1、首先,在Cocostudio创建一个名为"SpriteTest"的项目。然后将须要的资源导入到项目中,我导入三张图片,也就是我们最熟悉的boy,girl,girl_3。

(都说三角形是最稳固的,那么三角恋呢?)。最后将创建好的项目导出到cocos2dx项目的Resources文件夹下。

2、打开cocos2dxproject,加入上面导过来的.json文件。代码例如以下:

cocos2d::ui::Widget* image_sp = GUIReader::getInstance()->widgetFromJsonFile("SpriteTest_1.json");//读取json配置文件
this->addChild(image_sp,2);

之后执行下程序。恩,三个主角都显示出来,没多大问题。
这里要点名的一点是:在cocos2dx中我的模拟器窗体大小为960x640,而cocostudio项目中我设置的窗体大小为480x320(请原谅我 的懒惰)。这样程序跑起来后会发现image_sp显示的位置处于左下方原点的位置。

3、我认为image_sp放在左下角太委屈它了,所以我要将它往右上角移动下。代码例如以下:

image_sp->setPosition(Point(300,200));

恩,执行后果然移动过去了,这样看来Widget也没什么了不起的嘛。我进它源代码里看看还有些啥玩意。呵呵,一大堆东西...吓尿了。

4、接下来我要单独取出boy来玩玩。但是,怎么取呢?难道也是用Sprite吗?要知道这但是cocostudio啊。

灵机一动:Menu是用Button取代,那么Sprite应该是用Image取代吧。赶紧写程序试下,还没敲完我最终反应过来。坑爹啊!
最后还是到Test里看下代码才知道是用ImageView这货。

ImageView* boy = static_cast<ImageView*>(Helper::seekWidgetByName(image_sp,"boy"));
boy->setPosition(Point(240,200));

恩。跑一下没有问题。

5、以下进ImageView的源代码里看看。ImageView的老子Widget我惹不起。难道它这小屁孩我还惹不起?看完源代码。果然,才这么几行,没难度啊!挑几个重点的API看吧。

static ImageView* create();//相似Sprite的create()
static ImageView* create(const std::string& imageFileName, TextureResType texType = UI_TEX_TYPE_LOCAL);//同上
void loadTexture(const std::string& fileName,TextureResType texType = UI_TEX_TYPE_LOCAL);//相似Sprite的initWithFile()。

没啥好说的。换汤不换药。唯一不同的地方就是TextureRestType这货,它应该是值读取纹理的类型。有以下两种:

typedef enum
{
UI_TEX_TYPE_LOCAL = 0,
UI_TEX_TYPE_UI_TEX_TYPE_LOCALPLIST = 1
}TextureResType; //UI_TEX_TYPE_LOCAL是直接读取资源文件夹下的图片,这也是创建初始化ImageView的默认方式。
//UI_TEX_TYPE_UI_TEX_TYPE_LOCALPLIST 应该是读取plist文件。

6、最后就是跳过cocostudio,直接用ImageView创建个对象来试试,这里我先用Sprite创建一个对象,看能否够载入到image_sp上,事实证明是能够的。最后看代码(有三个boy)

ImageView* boy = static_cast<ImageView*>(Helper::seekWidgetByName(image_sp,"boy"));	//用image_sp中提取
boy->setPosition(Point(240,200)); auto boy_cx = Sprite::create("boy.png");//用Sprite创建
boy_cx->setPosition(Point(200,100));
image_sp->addChild(boy_cx,2); auto boy_cc = ImageView::create("boy.png");//用boy_cc创建
boy_cc->setPosition(Point(300,100));
image_sp->addChild(boy_cc,2);

执行起来效果杠杠的,睡觉去。

----------------------------------------------------------------------------------------------------------------------------

Slider

---------------------------------------------------------------------------------------------------------------------------

接下来開始搞下slider,也就是cocos2dx中是ControlSlider这货啦。

1、在cocostuido中创建一个project。然后将slider拖到场景中。在属性设置里我就改了个name。其它都默认。由于用的都是系统自带的那些资源图片,所以在cocos2dx中显示的效果很的不友好。

2、在cocos2dx中导入slider的.json文件。然后载入到场景中来。

代码例如以下:

cocos2d::ui::Widget* slideUI = GUIReader::getInstance()->widgetFromJsonFile("SlideUI/SlideUI_1.json");
this->addChild(slideUI,2);

3、单独提取出slide这个控件,然后对它做一些简单的操作,如setPosition。

Slider* slide = static_cast<Slider*>(Helper::seekWidgetByName(slideUI,"slide"));
slide->setPosition(Point(500,200));

事实上每篇都有这一步的原因是由于我想了解slider这个控件在cocos2dx中的类名叫什么。比如ProgressBar在cocos2dx中的类名就叫:
LoadingBar。

4、以下看下Slide的源代码

//创建Slide的方式比較特别,由于它没有一个API是直接在create中载入资源的
static Slider* create(); //有以下几个载入资源的方式:
//a 载入背景条,背景条知道不?就是进度为0时。整个进度条显示的背景图片
void loadBarTexture(const std::string& fileName,TextureResType texType = UI_TEX_TYPE_LOCAL);
//b 载入拖杆,也就是在滑动条上滚来滚去的那个杆子
void loadSlidBallTextures(const std::string& normal,//未被触摸显示的图片
const std::string& pressed,//触摸后显示的图片
const std::string& disabled,//禁止触摸显示的图片
TextureResType texType = UI_TEX_TYPE_LOCAL); //上面这个API是能够一次性的载入三张图片,以下这三个是单独载入的:
void loadSlidBallTextureNormal(const std::string& normal,TextureResType texType = UI_TEX_TYPE_LOCAL);
void loadSlidBallTexturePressed(const std::string& pressed,TextureResType texType = UI_TEX_TYPE_LOCAL);
void loadSlidBallTextureDisabled(const std::string& disabled,TextureResType texType = UI_TEX_TYPE_LOCAL); //TextureResType这货在之前的笔记里有提到过,UI_TEX_TYPE_LOCAL 就表示载入的纹理图片是直接从Resources文件夹下载入,而
//UI_TEX_TYPE_PLIST表示载入的纹理是通过plist来载入。 //c 载入进度条
void loadProgressBarTexture(const std::string& fileName, TextureResType texType = UI_TEX_TYPE_LOCAL); void setPercent(int percent);//设置进度
int getPercent();//读取进度 void addEventListenerSlider(Ref* target,SEL_SlidPercentChangedEvent selector);//加入事件回调

5、以下简单的创建一个Slider

auto m_slide = Slider::create();
m_slide->loadBarTexture("SlideUI/sliderTrack.png");
m_slide->loadSlidBallTextures("SlideUI/sliderThumb.png","SlideUI/sliderThumb.png","");
m_slide->loadProgressBarTexture("SlideUI/sliderProgress.png"); m_slide->setPosition(Point(200,200));
m_slide->setPercent(50);
m_slide->addEventListenerSlider(this,sliderpercentchangedselector(HelloWorld::sliderCallback));//加入回调函数
this->addChild(m_slide,3); //以下看下回调函数的声明:
void sliderCallback(Ref* sender,SliderEventType type); //进入SliderEventType看下它都有哪些參数:
typedef enum
{
SLIDER_PERCENTCHANGED
}SliderEventType; //好吧,就一个,那就是每当slide的进度发生变化时都会跳入到回调函数中。
//以下看下回调函数的实现:
void HelloWorld::sliderCallback(Ref* sender,SliderEventType type)
{
switch (type)
{
case SLIDER_PERCENTCHANGED:
CCLOG("slide percent change");
break;
}
}

恩。也就这样吧。

6、小结。

Slider个人感觉还是没有cocos2dx原装的ControlSlider好用,API也没多少。毕竟ControlSlider还有设置Slider的最大值。最小值,同意滑动的最大值等。

尊重原创。转载请注明来源:http://blog.csdn.net/star530/article/details/37365053

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Cocostudio学习笔记(3) ImageView + Slider的更多相关文章

  1. Cocostudio学习笔记(1) 扯扯蛋 + 环境搭建

    转眼七月份就到了,2014已经过了一半,而我也最终算是有"一年工作经验"了,开心ing. 回想这一年Cocos2dx的游戏开发经历,去年下半年重心主要在游戏的逻辑上,而今年上半年重 ...

  2. Cocostudio学习笔记(2) Button + CheckBox

    这篇记录了两个控件的使用流程:Button 和 CheckBox. ------------------------------------------------------------------ ...

  3. Cocostudio学习笔记(5) Text + TextAtlas + TextBMFont

    下午一群大学生到我们公司參观学习,搞得我好紧张.于是滔滔不绝的给他们介绍了怎样开发一款游戏... 今晚研究的控件就是三个label:Text,TextAtlas,TextBMFont 我先在cocos ...

  4. android学习笔记之ImageView的scaleType属性

    我们知道,ImageView有一个属性叫做scaleType,它的取值一共有八种,分别是:matrix,fitXY,fitStart,fitCenter,fitEnd,center,centerCro ...

  5. Cocostudio学习笔记(4) LoadingBar+ TextField

    这同时录制两个控件的使用方法:LoadingBar和 TextField. -------------------------------------------------------------- ...

  6. Android(java)学习笔记204:自定义SmartImageView(继承自ImageView,扩展功能为自动获取网络路径图片)

    1.有时候Android系统配置的UI控件,不能满足我们的需求,Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高. ...

  7. Android(java)学习笔记147:自定义SmartImageView(继承自ImageView,扩展功能为自动获取网络路径图片)

    1. 有时候Android系统配置的UI控件,不能满足我们的需求,Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高 ...

  8. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  9. Android学习笔记(十一)——ListView的使用(下)

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! ListView 这个控件比较复杂, 就是因为它有很多的细节可以优化,下面我们在试试提高它的运行效率:一.提高 ...

随机推荐

  1. ios开发runtime学习四:动态添加属性

    #import "ViewController.h" #import "Person.h" #import "NSObject+Property.h& ...

  2. Android 节日短信送祝福(UI篇:3-选择短信与发送短信的Activity的实现)

    一.ChooseMsgActivity的实现 1.布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/ ...

  3. android,安卓get请求的提交以及我遇到的异常

    首先说明 我是安卓4.0以上的版本,这个时候直接用网上的代码会报错的,先赋上网上的普遍代码 String uri = "http://url"; HttpGet httpGet = ...

  4. 【32.89%】【codeforces 719A】Vitya in the Countryside

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  5. UTC时间与当地时间的转换关系?

    UTC时间与当地时间转换关系? 一.总结 1.UTC +时区差=本地时间 2.UTC是世界统一时间 二.UTC时间是什么 1.UTC时间 协调世界时,又称世界统一时间.世界标准时间.国际协调时间.由于 ...

  6. [React] Use React.cloneElement to Extend Functionality of Children Components

    We can utilize React.cloneElement in order to create new components with extended data or functional ...

  7. UItableview正在滚动的时候进行操作容易出问题

    tableview正在滚动的时候进行其它点击事件操作容易出问题,有时候会出现莫名其妙的数组越界的bug, 解决方法:1.对objectatindex方法进行异常判断 2. [_tableview se ...

  8. virtualenv对python

    使用virtualenv对python进行多版本隔离 最近在用python做一个文本的情感分析的项目,用到tensorflow,需要用python3的版本,之前因为<机器学习实战>那本书的 ...

  9. 自动化部署脚本,给每一台主机装上JDK,且配好环境变量

    centos6.7 当我们有很多台主机,想在每台机器上都安装一样的某些软件,当然,一台机器一台机器安装也是可以的,但是如果有一键安装所有机器上的软件那是不是很激动人心呢! 首先我们需要制作一台服务器, ...

  10. Docker for Windows 安装

    原文:Docker for Windows 安装 前言: 环境:windows10专业版 64位 正文: 官方下载地址:https://hub.docker.com/editions/communit ...