2016.12.23
这两天做一个简单的demo,发现自己cocos2d基本控件方面运用的不熟练
http://blog.csdn.net/yongyu_it/article/details/44963371 cocos2dx基本控件库
https://zhidao.baidu.com/question/1669040522629664547.html cocos2dx 2.0VS3.0
一.TableView、scrollView
http://www.2cto.com/kf/201408/329311.html
http://blog.csdn.net/sharing_li/article/details/42298317
http://bbs.9ria.com/thread-212425-1-1.html
http://blog.csdn.net/sharing_li/article/details/42298317
(1)遇到一些问题,首先是重写父类的虚函数
区分三个概念:函数重定义,重载,重写 http://www.cnblogs.com/BeyondTechnology/archive/2010/09/20/1831441.html
重写:父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。
1) 被重写的函数不能是 static 的。必须是 virtual 的 ( 即函数在最原始的基类中被声明为 virtual ) 。
2) 重写函数必须有相同的类型,名称和参数列表 (即相同的函数原型)
3) 重写函数的访问修饰符可以不同。尽管 virtual 是 private 的,派生类中重写改写为 public,protected 也是可以的
解决Allocating an object of abstract class type“xxxxx”的问题,点击某个重写的虚函数发现没有父类作用域的此函数,说明重写的函数和父类的不是同一个函数(函数三要素:返回类型,函数名称,参数列表),检查发现参数列表里有一个参数类型和父类不同,修改过来,问题解决。(教训:网上拷贝的代码很可能版本不同,所以以后遇到问题注意这一点)
(2)tableView因为cell重用导致乱序问题
如上图ca列表的实现就是tableView,显示了三行cell,实际下拉还有三个。如果显示了六行即实际内容则不会出现乱序问题,但因为ui美观及节省内存需要通过下拉来完成整个tableview,这样就需要cell复用了。会出现乱序问题是因为原来cell中的数据没有清除,所以在
tableCellAtIndex(TableView *table, ssize_t idx)中生成cell时,清除原来cell中的数据,代码如下:
TableViewCell* MainScene::tableCellAtIndex(TableView *table,ssize_t idx)
{
CCLOG("tableCellAtIndex %zd",idx);
TableViewCell* cell=table->dequeueCell();
if(!cell)
{
cell = new TableViewCell();
cell->autorelease();
}
else
{
cell->removeAllChildrenWithCleanup(true);//清除原有数据
}
auto text_ca=Text::create(item.at(idx),"Arial",35);
text_ca->setAnchorPoint(Vec2(0.5,0.5));
text_ca->setPosition(Vec2(320,50));
text_ca->setColor(Color3B::BLACK);
//text_ca->setTag(idx);
DrawNode* drawNode = DrawNode::create();
drawNode->drawSegment(Vec2(0,0),Vec2(640,0),3,Color4F(Color3B(217,217,217)));
cell->addChild(drawNode);
cell->addChild(text_ca);
return cell;
}
关于cell怎样实现复用的暂时模糊,打印出的日志和想象中的有差距。有时间研究一下。(又是有时间。。。)之前在网上找的方法是改引擎的源码虽然暂时解决问题但是隐患很大,并且被师傅说了一顿,所以那个方法就不记录了。
http://blog.csdn.net/nynyvkhhiiii/article/details/12194633 比较完整的参考例子
二.TextField、text
http://www.myexception.cn/operating-system/1844680.html TextField的使用
三.drawNode
上面授权认证本来是仿照ios做的UI,因为很多素材是ios自带cocos2d没有,所以只能自力更生啦,比如上面tableView cell下的灰线。其中也涉及到颜色的调节。
cocos2d做界面遇到这个问题后,做Ios也遇到画线的情况了。如果可以的话一并总结吧,话说cocos2d不愧是从cocos2d-iphone发展起来的很多问题遇到类似情况,所以语言相通好好把握规律,希望越走越宽。
http://shahdza.blog.51cto.com/2410787/1560900
DrawNode* drawNode = DrawNode::create();
drawNode->drawSegment(Vec2(0,20),Vec2(640,20),3,Color4F(Color3B(217,217,217)));
然后将drawNode添加到所需要的节点上。相对ios的画线简单点。ios需要实现的如图:
实现代码:CAShapeLayer *solidShapeLayer = [CAShapeLayer layer];
CGMutablePathRef solidShapePath = CGPathCreateMutable();
[solidShapeLayer setFillColor:[[UIColor clearColor] CGColor]];
//[UIColor colorWithRed:240/255.0 green:240/255.0 blue:240/255.0 alpha:1];
[solidShapeLayer setStrokeColor:[[UIColor colorWithWhite:0.9 alpha:0.8] CGColor]];
solidShapeLayer.lineWidth = 2.0f ;
CGPathMoveToPoint(solidShapePath, NULL, 5, 130);
CGPathAddLineToPoint(solidShapePath, NULL, 295,130);
//CGPathAddLineToPoint(solidShapePath, NULL, 300,50);
[solidShapeLayer setPath:solidShapePath];
CGPathRelease(solidShapePath);
[_alertView.layer addSublayer:solidShapeLayer];
cocos2d和ios都涉及到颜色的设置。
1.色彩RGB对照表 http://blog.csdn.net/sqc3375177/article/details/9198765 http://www.917118.com/tool/color_3.html
2.http://blog.csdn.net/zx1162654788/article/details/48521495 4.iOS中的UIColor
3.在线颜色转换查询工具 http://www.atool.org/colorpicker.php
4.cocos2dx
Color3B 用三个 0-255 的整数描述颜色,不带透明度
Color4B 用四个 0-255 的整数描述颜色,带透明度
Color4F 用四个 0.0 - 1.0 的浮点数描述颜色,带透明度
这三种可以互相转换比如:Color4F ( Color3B ( 217 , 217 , 217 ))四、