守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 749|回复: 0

[技术资料] 2dx给Widget添加CCNode

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51788
    钢镚
    1422

    开源英雄守望者

    发表于 2015-1-16 13:53:00 | 显示全部楼层 |阅读模式

    环境:cocos2d-x 2.2.3,Lua 5.1.

    在前几天给cocostudio增加了一个控件 – BigMap(大地图控件),用于承载游戏地图上的所有游戏实体,包括NPC,玩家,可能存在的宝箱,传送门等等.

    但是在把实体(基类是CCNode)addChild到控件的时候,只显示了图片的一半,也就是一个三角形,一开始以为是底层BUG,后面发现在UIWidget.cpp源码中有这一句:

    1. void Widget::addChild(CCNode* child, int zOrder, int tag)
    2. {
    3.     CCAssert(dynamic_cast(child) != NULL, "Widget only supports Widgets as children");
    4.     CCNode::addChild(child, zOrder, tag);
    5.     _widgetChildren->addObject(child);
    6. }
    复制代码
    原来addChild只能添加Widget类或者其派生类.仔细看代码发现Widget中把添加CCNode和Widget分开了不同的add函数,而由于我在Release模式下开发,所以cocos2d-x源码中所有的断言(CCAssert,CCLOG)都会忽略.所以踩了这个浅浅的坑.但是Widget的函数命名真的让人忍不住吐槽.一般人都会以为无论加什么进去都是使用addChild.总结一下,虽然能遇到这个问题的估计只有我了..

    • Widget中addChild只能添加Widget或者Widget的派生类.
    • Widget中addNode负责添加CCNode类或者其派生类.
    • Widget这样做的目的是由于Widget 触摸事件走的是GUI的TouchGroup,而普通Node一般不属于GUI范畴,只是函数命名让人容易用错.


    本文来自:http://shadowkong.com/archives/1812

    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-11-18 21:55 , Processed in 0.043270 second(s), 36 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表