cocos2dx 控件学习EditBox TableView ControlSlider ScrollView
来源:互联网 发布:张杰用什么软件直播 编辑:程序博客网 时间:2024/05/05 08:41
EditBox 输入框
TableView 滑动格子控件
ControlSlider 进度条
ScrollView 滑动
ControlStepper 加减
ControlSwitch 开关
ControlColourPicker 提取颜色
ControlButton 按键
ControlPotentiometer 旋钮 (旋转开关)
}
本人用这些类,有遇到问题的,本人下面都有注释,不对的地方,可以指出,有任何疑问,也可以留言。
{//EditBox 输入框
#include "extensions/cocos-ext.h" //头文件
using namespace cocos2d::extension;//空间
cocos2d::extension::EditBoxDelegate //代理 类
virtual void editBoxReturn(EditBox* editBox) = 0; //实现这个虚函数
EditBox * _editName = EditBox::create(editBoxSize, Scale9Sprite::create("extensions/green_edit.png"));
_editName->setPosition(Vec2(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height*3/4));
_editName->setFontName("Paint Boy");
_editName->setFontSize(25);
_editName->setFontColor(Color3B::RED);
_editName->setPlaceHolder("Name:");//默认显示的文字
_editName->setPlaceholderFontColor(Color3B::WHITE); //字体颜色
_editName->setMaxLength(8);// 设置字符串长度
_editName->setInputFlag(EditBox::InputFlag::PASSWORD);//输入文字的标记 例 密码类型
_editName->setReturnType(EditBox::KeyboardReturnType::DONE);//键盘右下角显示什么键值
_editName->setInputMode(EditBox::InputMode::EMAIL_ADDRESS);//输入的类型 例 邮箱 url 任何文本 数字
_editName->setDelegate(this);//设置代理
addChild(_editName);
第一个是键盘问题
//横竖屏键盘 问题 在 ios 上有这样的问题 android 上没有这样的问题
//屏幕什么方向输入的键盘就什么方向,这是正确的认识,ios 设置了方向但是不管用 ,
//必须在Info.plist 文件中修改 Supported interface orientations ->Landscape (right home button),Landscape (left home button) 把这个配置文件修改一下就可以了
//在ios中你不修改这个文件,即使你设置了屏幕的方向,但在ios中这个还是你配置Info.plist文件的方向,你可以在销毁这个应用时看这个是什么方向,横的就是横的,竖的就是竖的
第二个是显示问题
//在ios 中这个输入框 能看的下去,可在android 上那就是 独立出一个额外的框,用得时考虑一下在说吧
第三个是显示问题
不能换货,一行输入到底。字符,符号,多文本,返回键,都可以设置。
}
{// TableView 滑动格子控件
#include "extensions/cocos-ext.h" //头文件
using namespace cocos2d::extension;//空间
public cocos2d::extension::TableViewDataSource, public cocos2d::extension::TableViewDelegate //代理 类
//添加虚函数
virtual void tableCellTouched(cocos2d::extension::TableView* table, cocos2d::extension::TableViewCell* cell); //必须实现 点击表格后回调这个函数
virtual cocos2d::Size tableCellSizeForIndex(cocos2d::extension::TableView *table, ssize_t idx);//设置表格的大小
virtual cocos2d::extension::TableViewCell* tableCellAtIndex(cocos2d::extension::TableView *table, ssize_t idx);//必须实现 加载表格
virtual ssize_t numberOfCellsInTableView(cocos2d::extension::TableView *table);//必须实现 滑动最大有几个表格,不是当前显示的最大数。
TableView* tableView = TableView::create(this, Size(250, 60));//实现代理的类,显示框大小
tableView->setDirection(ScrollView::Direction::HORIZONTAL);//方向
tableView->setPosition(Vec2(20,winSize.height/2-30));//位置
tableView->setDelegate(this);//设置代理
this->addChild(tableView);
tableView->reloadData();//重新装数据 类似于刷新数据
//虚函数实现
//点击表格后回调这个函数
void TableViewTestLayer::tableCellTouched(TableView* table, TableViewCell* cell)
{
CCLOG("cell touched at index: %ld", cell->getIdx());
}
//设置表格的大小
Size TableViewTestLayer::tableCellSizeForIndex(TableView *table, ssize_t idx)
{
if (idx == 2) {//也可以单设置
return Size(100, 100);
}
return Size(60, 60);
}
//加载表格
TableViewCell* TableViewTestLayer::tableCellAtIndex(TableView *table, ssize_t idx)
{
TableViewCell *cell = table->dequeueCell();//获取的表格是无须的 3.2版本还是这样,没有修改这问题,你自己修改,下面有注释
if (!cell) {
cell = new TableViewCell();
cell->autorelease();
auto sprite = Sprite::create("Icon-50.png");
sprite->setAnchorPoint(Vec2::ZERO);
sprite->setPosition(Vec2(0, 0));
cell->addChild(sprite);
auto string = String::createWithFormat("%ld", idx);
auto label = Label::createWithSystemFont(string->getCString(), "Helvetica", 20.0);
label->setPosition(Vec2::ZERO);
label->setAnchorPoint(Vec2::ZERO);
label->setTag(123);
cell->addChild(label);
}
return cell;
}
//必须实现 滑动最大有几个表格,不是当前显示的最大数。
ssize_t TableViewTestLayer::numberOfCellsInTableView(TableView *table)
{
return 20;
}
// 数据对不上的事,dequeueCell()函数中 修改 if (/*_cellsFreed.empty()*/ true) 就可以了。
}
{// ControlSlider 进度条
#include "extensions/cocos-ext.h"
using namespace cocos2d::extension;
// A进度条背景图片 B滑动图片 C显示滑动在什么位置
ControlSlider *slider = ControlSlider::create("extensions/sliderTrack.png","extensions/sliderProgress.png" ,"extensions/sliderThumb.png");
slider->setAnchorPoint(Vec2(0.5f, 1.0f));
slider->setMinimumValue(0.0f); // 最小值
slider->setMaximumValue(5.0f); // 最大值
slider->setEnabled(true);//是否可触摸 默认是可以触摸
slider->setPosition(Vec2(screenSize.width / 2.0f, screenSize.height / 2.0f + 16));
slider->setTag(1);
// When the value of the slider will change, the given selector will be call
slider->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlSliderTest::valueChanged), Control::EventType::VALUE_CHANGED);//滑动回调 最后的个类型 我也不知道
addChild(slider);
void valueChanged(cocos2d::Ref *sender, cocos2d::extension::Control::EventType controlEvent);
void ControlSliderTest::valueChanged(Ref *sender, Control::EventType controlEvent)
{
ControlSlider* pSlider = (ControlSlider*)sender;
float vf= pSlider->getValue();
CCLOG("-->%f",vf);
}
}
{// ScrollView 滑动
#include "extensions/cocos-ext.h"
using namespace cocos2d::extension;
,public cocos2d::extension::ScrollViewDelegate
virtual void scrollViewDidScroll(cocos2d::extension::ScrollView* view);
virtual void scrollViewDidZoom(cocos2d::extension::ScrollView* view);
ScrollView *pScroll=ScrollView::create();
pScroll->setViewSize(Size(600,200));//设置滚动试图的试图大小
pScroll->setPosition(visibleSize.width / 2.0f, visibleSize.height / 2.0f);//设置位置 新的层默认左下角为原点
pScroll->setDirection(ScrollView::Direction::HORIZONTAL);//设置滑动方向
pScroll->setDelegate(this);//注册
pScroll->setContainer(continerLayer);
addChild(pScroll);
void HelloWorld::scrollViewDidScroll(cocos2d::extension::ScrollView* view) {}
void HelloWorld::scrollViewDidZoom(cocos2d::extension::ScrollView* view){}
}
{ //ControlStepper 加减
#include "extensions/cocos-ext.h"
using namespace cocos2d::extension;
void valueChanged(cocos2d::Ref *sender, cocos2d::extension::Control::EventType controlEvent);
auto minusSprite = Sprite::create("stepper-minus.png");
auto plusSprite = Sprite::create("stepper-plus.png");
ControlStepper *stepper =ControlStepper::create(minusSprite, plusSprite);
stepper->setPosition(Vec2(visibleSize.width / 2.0f, visibleSize.height / 2.0f));
stepper->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::valueChanged), Control::EventType::VALUE_CHANGED);
addChild(stepper);
void HelloWorld::valueChanged(cocos2d::Ref *sender, cocos2d::extension::Control::EventType controlEvent)
{
ControlStepper* pControl = (ControlStepper*)sender;
// Change value of label.
float vf= pControl->getValue();
CCLOG("-->%f",vf);
}
}
{// ControlSwitch 开关
#include "extensions/cocos-ext.h"
using namespace cocos2d::extension;
void valueChanged(cocos2d::Ref *sender, cocos2d::extension::Control::EventType controlEvent);
/**
* create
* maskSprite, 开关背景
* onSprite 开背景
* offSprite 关背景
* thumbSprite 开关按钮图片
* onLabel 开文字
* offLabel 关文字
*/
static ControlSwitch* create(Sprite *maskSprite, Sprite * onSprite, Sprite * offSprite, Sprite * thumbSprite, Label* onLabel, Label* offLabel);
/**
* create
* maskSprite, 开关背景
* onSprite 开背景
* offSprite 关背景
* thumbSprite 开关按钮图片
*/
static ControlSwitch* create(Sprite *maskSprite, Sprite * onSprite, Sprite * offSprite, Sprite * thumbSprite);
ControlSwitch *switchControl = ControlSwitch::create
(
Sprite::create("switch-mask.png"),//开关背景
Sprite::create("switch-on.png"),//开背景
Sprite::create("switch-off.png"),//关背景
Sprite::create("switch-thumb.png"),//开关按钮图片
Label::createWithSystemFont("On", "Arial-BoldMT", 16),//开文字
Label::createWithSystemFont("Off", "Arial-BoldMT", 16)//关文字
);
switchControl->setPosition(Vec2(visibleSize.width / 2.0f, visibleSize.height / 2.0f));
switchControl->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::valueChanged), Control::EventType::VALUE_CHANGED);
addChild(switchControl);
void HelloWorld::valueChanged(cocos2d::Ref *sender, cocos2d::extension::Control::EventType controlEvent)
{
ControlSwitch* pSwitch = (ControlSwitch*)sender;
if (pSwitch->isOn())
{
CCLOG("-->%s","On");
}
else
{
CCLOG("-->%s","Off");
}
}
}
{// ControlColourPicker 提取颜色
#include "extensions/cocos-ext.h"
using namespace cocos2d::extension;
void valueChanged(cocos2d::Ref *sender, cocos2d::extension::Control::EventType controlEvent);
ControlColourPicker *colourPicker = ControlColourPicker::create();
colourPicker->setColor(Color3B(37, 46, 252));
colourPicker->setPosition(Vec2 (visibleSize.width / 2.0f, visibleSize.height / 2.0f));
colourPicker->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::valueChanged), Control::EventType::VALUE_CHANGED);
addChild(colourPicker);
void HelloWorld::valueChanged(cocos2d::Ref *sender, cocos2d::extension::Control::EventType controlEvent)
{
static int Number=0;
ControlColourPicker* pPicker = (ControlColourPicker*)sender;
++Number;
CCLOG("%d",Number);
CCLOG("-r->%02X",pPicker->getColor().r); //打印出来的是16精制数据
CCLOG("-g->%02X",pPicker->getColor().g);
CCLOG("-b->%02X",pPicker->getColor().b);
}
//注意 用这个时 把 extensions->CCControlColourPickerSpriteSheet.plist,CCControlColourPickerSpriteSheet.png 复制上 否则 会报错 他这个控件就帮你添加了那几张图片。
}
{//ControlButton 按键
#include "extensions/cocos-ext.h"
using namespace cocos2d::extension;
void touchDownAction(cocos2d::Ref *sender, cocos2d::extension::Control::EventType controlEvent);
auto backgroundButton = Scale9Sprite::create("button.png");
auto backgroundHighlightedButton = Scale9Sprite::create("buttonHighlighted.png");
auto titleButton = Label::createWithTTF("ABC", "Marker Felt.ttf", 30);
titleButton->setColor(Color3B(159, 168, 176));
ControlButton *button = ControlButton::create(titleButton, backgroundButton);
button->setBackgroundSpriteForState(backgroundHighlightedButton, Control::State::HIGH_LIGHTED);
button->setTitleColorForState(Color3B::WHITE, Control::State::HIGH_LIGHTED);
button->setPosition(Vec2(visibleSize.width / 2.0f, visibleSize.height / 2.0f));
button->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDownAction), Control::EventType::TOUCH_DOWN);
addChild(button);
void HelloWorld::touchDownAction(Ref *senderz, Control::EventType controlEvent)
{
CCLOG("%s",String::createWithFormat("Touch Down (%d)", controlEvent)->getCString());
}
}
{//ControlPotentiometer 旋钮 (旋转开关)
#include "extensions/cocos-ext.h"
using namespace cocos2d::extension;
void valueChanged(cocos2d::Ref *sender, cocos2d::extension::Control::EventType controlEvent);
ControlPotentiometer *potentiometer = ControlPotentiometer::create("potentiometerTrack.png" //旋钮 背景
,"potentiometerProgress.png"//进度条 背景
,"potentiometerButton.png");//按下去 旋转的钮
potentiometer->setPosition(Vec2(visibleSize.width / 2.0f, visibleSize.height / 2.0f));
// When the value of the slider will change, the given selector will be call
potentiometer->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::valueChanged), Control::EventType::VALUE_CHANGED);
addChild(potentiometer);
void HelloWorld::valueChanged(Ref *sender, Control::EventType controlEvent)
{
ControlPotentiometer* pControl = (ControlPotentiometer*)sender;
// Change value of label.
CCLOG("%s",String::createWithFormat("%.02f", pControl->getValue())->getCString());
}
}
- cocos2dx 控件学习EditBox TableView ControlSlider ScrollView
- [Cocos2d-x v3.x]EditBox和ControlSlider控件应用
- Cocos2dx 3.0 过渡篇(七)EditBox和ControlSlider不得不说的故事
- Cocos2dx 3.0 过渡篇(七)EditBox和ControlSlider不得不说的故事
- Cocos2dx 3.0 过渡篇(七)EditBox和ControlSlider不得不说的故事
- cocos2dx ScrollView,TableView,ListView区别
- cocos2dx之EditBox
- cocos2dx editbox优化
- cocos2dx 2.x editbox
- 自定义控件-TableView,ScrollView嵌套Listview
- cocos2d-x 菜鸟学习笔记七(界面控件之scrollView与tableView)
- cocos2dx之TableView和ScrollView的混合使用
- COCOS2DX 3.X 解决TABLEVIEW 、SCROLLVIEW上的MENU问题
- cocos2dx 3.8中ScrollView记载TableView(代码详解)
- EditBox 控件的用法
- Cocos2dx学习之---TableView实现二级菜单
- 基本控件使用(二)(ScrollView,TableView)
- 关于COCOS2DX里面TableView控件使用的问题
- 归并排序和逆序数
- cgi 编程的get和post
- 实体
- php开发手机网站注意事项
- getRequestDispatcher()与sendRedirect()的区别
- cocos2dx 控件学习EditBox TableView ControlSlider ScrollView
- mysql 时间转换 长整型时间 时间戳类型时间
- 程序员技术练级攻略
- poj 2318 TOYS(叉积+二分)
- POJ 3356 AGTC (编辑距离 DP)
- Android NDK 中C/C++ 代码java.lang.UnsatisfiedLinkError , Native method not found 问题
- 怎么找回Eclipse 项目(工程)中丢失的R包(文件)
- Java程序员常见的10道XML面试题
- 手尚美手机壳DIY教程