zoukankan      html  css  js  c++  java
  • 修改button的可点击区域

    需求:在cocos2dx引擎中,button的点击区域和button图片的大小是一样的,但是我需要修改可点击区域的大小和位置,需要修改引擎源码;

    button提供的接口中并没有和touch相关,button继承至widge,在widget的接口中,找到hitTest(),ok,就是这个接口;

     1 bool Widget::hitTest(vec2 &pt) 
     2 {
     3     vec2 nsp = convertToNodeSpace(pt);
     4     Rect bb;
     5     bb.size = _contentSize;
     6     if (bb.containsPoint(nsp))
     7     {
     8        return true;
     9     }  
    10 }

    源码很简单,如果rect bb包含点击的点,那么就是hitTest成功。

    考虑到引擎的稳定性,尽量还是不要对源码做大的修改,我的思路是仅仅是在原来的结构上加一个rect,默认rect(0,0,0,0),当调用setClickArea()接口的时候用自己的rect进行判断,否则还是继续使用源码的判断方式;

    修改完源码还要把接口倒到lua中使用,libLua库已经很好的支持了如何把C++倒给lua,widget的接口在lua_cocos2dx_ui_auto.cpp

    1 int  lua_cocos2dx_ui_widget_setClickArea(lua_State * tolua_S)
    2 {
    3      cocos2d::ui::widget * obj = nullptr;
    4      obj = (cocos2d::ui::widget *) tolua_tousertype(tolua_S, 1, 0);
    5      cocos2d::Rect arg0;
    6      luaval_to_rect(tolua_S, 2, &arg0);
    7     obj->setClickArea(arg0);
    8     return 0;     
    9 }

    注册C++函数给lua的写法,从lua状态机中取第一个参数是对象,第二个参数是rect的值,尼玛今天太累,不想继续写了。

  • 相关阅读:
    【XilinxVDMA模块学习】00开始
    【USBHID在STM32上的实现】00开始
    【XilinxZYNQ ucosiii的移植与开发】00开始
    【XilinxLVDS读写功能实现】00开始
    算法与数据结构
    页面进度条
    前端SEO优化
    正则表达式(Regular Expression)
    对网页中层的固定
    c#排序算法
  • 原文地址:https://www.cnblogs.com/alex-zhou/p/4369203.html
Copyright © 2011-2022 走看看