显示玩家手上的牌(如斗地主),我使用的TableView进行显示,要求可以点击出牌,但不能让它滚动,如何做?
是要求tableview显示的牌不能滚动?
注:
setBounceable这个函数我已经测试过了,这个只是没有滚动时的效果而已,但他仍把tableview的内容移动了移位
我使用的是cocos2d-x3.4,这个什么版本不重要,重要的是我需要知道方法?!请帮助,谢谢!
setDirection()的值设为cc.SCROLLVIEW_DIRECTION_NONE?
setTouchEnabled(false);
setTouchEnabled(false)这个函数是让tableview失去touch事件,这样子也就不能点击了!!
tableView->setDirection(ScrollView::Direction::NONE);
测试结果:这样子可以向任何方向意动了!!
额,可能这里引擎的源码也有问题。
从字面上理解的话,cc.SCROLLVIEW_DIRECTION_BOTH才应该是任意方向移动
cocos有两个ScrollView,一个是cc.ScrollView,另一个是ccui.ScrollView(TableView是继承自cc.ScrollView的,它自己本身貌似没有setDirection方法).我没用过cc的,但是ccui的ScrollView源码中setDirection方法对NONE这块写的是有问题的,需要修改一下。
目前看来cc中的scrollView应该也是有点问题,但是我不知道它的源码怎么改,因为它的源码中对direction的设置跟ccui的不一样(当然也有可能是我找的地方不对,毕竟我不会C++……)如果你对C++比较熟悉的话可以自己看一下
感谢了,你能提供个思路就已经够了,我空了去看一看底层!
恩,个人初步无责任猜测UIScrollView.cpp中的ScrollView::interceptTouchEvent中的
case TouchEventType::MOVED: { _touchMovePosition = touch->getLocation(); // calculates move offset in points float offsetInInch = 0; switch (_direction) { case Direction::HORIZONTAL: offsetInInch = convertDistanceFromPointToInch(Vec2(fabs(sender->getTouchBeganPosition().x - touchPoint.x), 0)); break; case Direction::VERTICAL: offsetInInch = convertDistanceFromPointToInch(Vec2(0, fabs(sender->getTouchBeganPosition().y - touchPoint.y))); break; case Direction::BOTH: offsetInInch = convertDistanceFromPointToInch(sender->getTouchBeganPosition() - touchPoint); break; default:
//----------这里是不是应该直接return出去?
break; } if (offsetInInch > _childFocusCancelOffsetInInch) { sender->setHighlighted(false); handleMoveLogic(touch); } }
PS:我是用-js的,貌似不仅cpp有问题,js层特喵的也只if了垂直和水平,另外两种情况就直接else了……
我还是自己来公布答案吧:
程序中没有现成的函数来实现此功能!自己在底层写一个简单的条件判断函数即可!
我的方法是在CCTableView.h中TableView类中,自己加入一个函数
void setMoved(bool flag){ _isMoved = flag; }
然后在
void TableView::onTouchMoved(Touch *pTouch, Event *pEvent)
{
if (!_isMoved)
{
return;
}
…………
}
中做判断!
程序中实现tableview的时候,把setMoved()设置为false即可!
那你为什么要用tableview啊?