cocos2dx 3.2键盘操控的列表页的初步实现
来源:互联网 发布:python编程实践 编辑:程序博客网 时间:2024/04/28 20:15
一、实现后的目标效果
有图有真相,首先上实现了的效果。
二 、思路
由于要加载较多数据,那么为了使得界面更近流畅,我采用TableView,其中他的Cell是可以复用的。创建10000个也是秒秒钟的事情。
那么使用上下排列的TableView,每个cell自定义三个Item即可,当然也可以N个,可以自己写好接口。
由于我们想使得tableView可以滚动到指定的cell位置,也就是一格一格滚动,那么我们最好自定义一个tableView继承于系统的tableView.
三 、实现步骤
如果你对于TableView不太熟悉,建议先看官方Testcpp例子.
如果你比较熟悉,那么我就不废话,继续往下讲了。
我们先来自定义一个TableViewcell。也就是自定义一行的内容。我相信这个非常简单。
四、准备工作
我们先来自定义一个TableViewcell。也就是自定义一行的内容。我相信这个非常简单。
cell头文件
class XTableViewCell : public cocos2d::extension::TableViewCell{public:XTableViewCell();virtual ~XTableViewCell();CREATE_FUNC(XTableViewCell);/************************************************************************//* update item by data *//************************************************************************/bool updateItemData(const unsigned int tag,const std::string icon,const std::string name,const std::string size,const std::string downnum,const std::string score);bool setItemSelected(const unsigned int tag,bool isSeleted);CC_CONSTRUCTOR_ACCESS:bool init();//bool initbool initLayout();void update(float t);private:cocos2d::Size _cellSize; //the size of cellunsigned char _itemNum; // the number of item};
cell .源文件
//////////////////////////////////////////////////////////////////////////////////////////////***************************CustomTableViewCell Class**************************************/////////////////////////////////////////////////////////////////////////////////////////////XTableViewCell::XTableViewCell():_itemNum(3),_cellSize(Size(1920,275)){}XTableViewCell::~XTableViewCell(){}bool XTableViewCell::init(){IF_NULL_RETURN_FALSE(Node::init());IF_NULL_RETURN_FALSE(initLayout());//scheduleUpdate();//resumeSchedulerAndActions();return true;}bool XTableViewCell::initLayout(){auto lout = ui::Layout::create();IF_NULL_RETURN_FALSE(lout);lout->setLayoutType(ui::Layout::Type::ABSOLUTE);lout->setTouchEnabled(true);lout->setLoopFocus(false);lout->setPassFocusToChild(true);lout->setContentSize(Size(_cellSize.width,200.0f));this->addChild(lout);lout->setTag(100);lout->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);lout->setPosition(Vec2(0,75));for(int j =0;j<_itemNum;j++){const std::string txt = StringUtils::format("%dt%d",0,j);//名称后面得重新修改GridItem* item = GridItem::create();IF_NULL_RETURN_FALSE(item);item->setPosition(Vec2(j*600+90,0));item->setName(txt);lout->addChild(item,1,j);}return true;}void XTableViewCell::update( float t ){log("XTableViewCell::update");}bool XTableViewCell::updateItemData( const unsigned int tag, const std::string icon, const std::string name, const std::string size, const std::string downnum, const std::string score ){auto lout = this->getChildByTag(100);IF_NULL_RETURN_FALSE(lout);auto item = (GridItem*)lout->getChildByTag(tag);IF_NULL_RETURN_FALSE(item);if(""!=icon){item->updateIcon(icon);}if(""!=name){item->updateName(name);}if(""!=size){item->updateSize(size);}if(""!=downnum){item->updateDownNum(downnum);}if(""!=score){item->updateScore(score);}return true;}bool XTableViewCell::setItemSelected( const unsigned int tag,bool isSeleted ){auto lout = this->getChildByTag(100);IF_NULL_RETURN_FALSE(lout);auto item = (GridItem*)lout->getChildByTag(tag);IF_NULL_RETURN_FALSE(item);item->setSelected(isSeleted);return true;}
里面都实现了什么,其实就是简单的添加了三个自定义Item.
然后,我们自定义一个TableView实现了两个方法。
一个是去实现滚动到指定cell的方法。
另外一个是我使用触摸的时候需要获得当前使用的cell去判断哪个Item位置位于触摸位置。
我们这里只讲键盘的。那么你可能就用不到这个函数了。
代码如下:
class XTableView : public cocos2d::extension::TableView{public:/*** @brief scroll to the Designated cell* @param index --- the idx of Designated cell**/void scrollToCellIndex(ssize_t index);/**************************************************** @decripition if you need Analyzing touch item ,* maby you will use this function to get used cell ****************************************************/cocos2d::Vector<cocos2d::extension::TableViewCell*> getCurrentCells() const;};
//////////////////////////////////////////////////////////////////////////////////////////////***************************XTableView Class**************************************/////////////////////////////////////////////////////////////////////////////////////////////void XTableView::scrollToCellIndex( ssize_t index ){this->getContainer()->stopAllActions();Vec2 offset = _offsetFromIndex(index)*-1;Vec2 maxOffSet = this->maxContainerOffset();Vec2 minOffSet = this->minContainerOffset();float offX = MIN(offset.x,maxOffSet.x);offX = MAX(offX,minOffSet.x);float offY = MIN(offset.y,maxOffSet.y);offY = MAX(offY,minOffSet.y);this->setContentOffset(Vec2(offX,offY),true);}cocos2d::Vector<cocos2d::extension::TableViewCell*> XTableView::getCurrentCells() const{log("used cell count is %d",_cellsUsed.size());return this->_cellsUsed;}
好了,那么接下来的重点是列表页的实现。
五、页面具体实现
由于篇幅受限,代码内容比较多,相信大家自己分析就能理解,那么先就不废话了,先上代码吧。不懂的或者有好的建议希望可以留言讨论。
头文件。(注:具体数据录入,我自己的已删除,需要的可以添加自己的数据,现在展示的基本只是一个界面)
enum class POS_TYPE{TYPE_0,// right, down and scroll upTYPE_1,//left,right, down and scroll upTYPE_2,//left, down and scroll upTYPE_3,// right,up,downTYPE_4,//left,right,up,downTYPE_5,//left, up,downTYPE_6,// right,up, and scroll downTYPE_7,//left,right,up, and scroll downTYPE_8,//left, up, and scroll downTYPE_9 // can do nothing};enum class CHANGE_TYPE{LEFT,RIGHT,UP,DOWN,UP_SCROLL,DOWN_SCROLL,NOTHING};typedef struct {//item idx ,and start from value 0 to _pageXunsigned char idx;//cell idxunsigned int cellIdx;// selected statebool isSelected;/****************************************** pos in screen like a matrix,such as *(0,0),(1,0),(2,0)*(0,1),(1,1),(2,1)*(0,2),(1,2),(2,2)*****************************************/unsigned char posX;unsigned char posY;POS_TYPE posType;}itemState;class XGridView :public cocos2d::Layer, public cocos2d::extension::TableViewDataSource, public cocos2d::extension::TableViewDelegate{public:CREATE_FUNC(XGridView);/****@brief create a GridView*@***/virtual void scrollViewDidScroll(cocos2d::extension::ScrollView* view);virtual void scrollViewDidZoom(cocos2d::extension::ScrollView* view);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);CC_CONSTRUCTOR_ACCESS:XGridView();virtual ~XGridView();virtual bool init();virtual bool initWithDatas(ssize_t cellTotalNum,const cocos2d::Size tableSize);virtual bool initMoveFoucus();virtual bool initTable();virtual bool initProgressBar();virtual bool initKeyListen();virtual void initStateMatrix();virtual void keyHandler(cocos2d::EventKeyboard::KeyCode key);virtual bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *unused_event); virtual void onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *unused_event); virtual void onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *unused_event); virtual void onTouchCancelled(cocos2d::Touch *touch, cocos2d::Event *unused_event);virtual void listenItemTouch(cocos2d::Touch *touch, cocos2d::Event *unused_event);void updateBySceenState();virtual void isItemTouched(cocos2d::Node* item,const cocos2d::Vec2 point);virtual void deCodeByJson();void update(float t);virtual void onEnterTransitionDidFinish();//some model functionbool isSelectedByIdx(ssize_t mIdx) const;void updateSceenStateByKey(cocos2d::EventKeyboard::KeyCode key);POS_TYPE getPosTypeByXY(unsigned int X_i,unsigned int Y_j);itemState* getSelectedItemState() const;CHANGE_TYPE getChangeType(POS_TYPE posType,cocos2d::EventKeyboard::KeyCode key);void updateMoveFoucs(cocos2d::EventKeyboard::KeyCode key,POS_TYPE pos);void loadPageNumData(unsigned int cellIndx);void keyListenDelay(float t); void updateDalay(float t);void onExit() override;// update cell at idxvoid updateCellAtIdx(ssize_t idx);// update Item At idxvoid updateItemAtIdx(ssize_t idx);private:XTableView* _mTable;cocos2d::Sprite* _progressBar;ssize_t _cellTotalNum;cocos2d::Size _tableSize;ssize_t _pageX;ssize_t _pageY;std::vector<std::string> _iconImg;std::vector<std::string> _appName;std::vector<std::string> _appSize;std::vector<std::string> _downNum;std::vector<std::string> _appScore;//the state of screen,true means selected and false means unselectedstd::vector<itemState> _screenState;//the cell of selected idxssize_t _currentCellIdx;//item idx which in cellunsigned char _selectedItmIdx;bool _isdecoded;unsigned int _itemTotalNum;std::atomic_bool _firstPageUpdate[9];cocos2d::Vec2 _pos[9];cocos2d::Sprite* _moveFoucus;bool _keyContrl;long _scrollTime;bool _updateCell;};源文件
USING_NS_CC;USING_NS_CC_EXT;char* dataIndex[]={"allnum","appico", //APP ICO Image"apptitle", //APP Name"downnum", //APP Down times"score" , //APP Score"appSize" //APP size};XGridView::XGridView():_mTable(nullptr),_progressBar(nullptr),_cellTotalNum(100),_tableSize(Size(1920.0f,960.0f)),_moveFoucus(nullptr),_pageX(3),_pageY(3),_gridId(0),_isdecoded(false),_keyContrl(true),_currentCellIdx(0),_selectedItmIdx(0),_itemTotalNum(300),_loadNum(0),_scrollTime(0L),_updateCell(true){}XGridView::~XGridView(){CC_SAFE_RELEASE(_mTable);CC_SAFE_RELEASE(_progressBar);}bool XGridView::init(){IF_RETURN_FALSE(!initWithDatas(_cellTotalNum,_tableSize));return true;}bool XGridView::initWithDatas(ssize_t cellTotalNum,const Size tableSize ){IF_NULL_RETURN_FALSE(Layer::init());setData(_json);_cellTotalNum = cellTotalNum;_tableSize = tableSize;IF_NULL_RETURN_FALSE(initKeyListen());IF_NULL_RETURN_FALSE(initMoveFoucus());IF_NULL_RETURN_FALSE(initTable());IF_NULL_RETURN_FALSE(initProgressBar());initStateMatrix();deCodeJsonById();return true;}void XGridView::tableCellTouched(TableView* table,TableViewCell* cell ){ log("cell touched at index: %ld", cell->getIdx()); auto lout = (ui::Layout*)cell->getChildByTag(100); IF_RETURN(!lout); for(auto &item : lout->getChildren()) { if(!item) continue; else { if(item==lout->getCurrentFocusedWidget(true)) { ((GridItem*)item)->setSelected(true); //_selectedIdx =cell->getIdx()*_pageX+item->getTag(); } else { ((GridItem*)item)->setSelected(false); } } }}Size XGridView::tableCellSizeForIndex(TableView *table, ssize_t idx ){return Size(_tableSize.width, _tableSize.height/_pageY);}TableViewCell* XGridView::tableCellAtIndex(TableView *table, ssize_t idx ){auto string = String::createWithFormat("%ld", idx);TableViewCell *cell = table->dequeueCell();if (!cell) {cell = XTableViewCell::create();IF_RETURN_P(!cell,nullptr);cell->autorelease();return cell;for(unsigned char i=0;i<_pageX;i++){IF_NULL_CONTINUE(_isdecoded);ssize_t itemIdx = idx*_pageX+i;IF_CONTINUE(itemIdx>_iconImg.size()-1||itemIdx>_appName.size()-1);((XTableViewCell*)cell)->updateItemData(i,_iconImg.at(itemIdx),_appName.at(itemIdx),"5.03M","","7.6");((XTableViewCell*)cell)->setItemSelected(i,idx==_currentCellIdx&&i==_selectedItmIdx);}auto label = Label::createWithSystemFont(string->getCString(), "Helvetica", 40.0);IF_NULL_RETURN_P(label,cell);label->setPosition(Vec2::ZERO);label->setAnchorPoint(Vec2::ZERO);label->setTag(123);cell->addChild(label);}else{auto _cellChild = cell->getChildByTag(100);for(unsigned char i=0;i<_pageX;i++){IF_NULL_CONTINUE(_isdecoded);ssize_t itemIdx = idx*_pageX+i;IF_CONTINUE(itemIdx>_iconImg.size()-1||itemIdx>_appName.size()-1);((XTableViewCell*)cell)->updateItemData(i,_iconImg.at(itemIdx),_appName.at(itemIdx),"5.03M","","7.6");((XTableViewCell*)cell)->setItemSelected(i,idx==_currentCellIdx&&i==_selectedItmIdx);}auto label = (Label*)cell->getChildByTag(123);IF_RETURN_P(!label,cell);label->setString(string->getCString());}return cell;}ssize_t XGridView::numberOfCellsInTableView(TableView *table ){ return _cellTotalNum;}bool XGridView::initTable(){_mTable = (XTableView*)TableView::create(this,_tableSize);IF_RETURN_FALSE(!_mTable);_mTable->setDirection(ScrollView::Direction::VERTICAL);_mTable->setDelegate(this);this->addChild(_mTable);_mTable->setVerticalFillOrder(TableView::VerticalFillOrder::TOP_DOWN);_mTable->reloadData();return true;}void XGridView::scrollViewDidScroll( cocos2d::extension::ScrollView* view ){Vec2 pos = view->getContentOffset();Vec2 _pos = view->getContentSize()-view->getViewSize();float percent = -(pos.y/_pos.y);// log("scroll percent is : %f", percent); IF_NULL_RETURN(_progressBar); _progressBar->setPositionY(960/2-600/2 +_progressBar->getScaleY()*_progressBar->getContentSize().height +600*percent*(1-_progressBar->getScaleY()));}void XGridView::scrollViewDidZoom( cocos2d::extension::ScrollView* view ){}bool XGridView::onTouchBegan( Touch *touch, Event *unused_event ){return true;}void XGridView::onTouchMoved( Touch *touch, Event *unused_event ){}void XGridView::onTouchEnded( Touch *touch, Event *unused_event ){listenItemTouch(touch,unused_event);}void XGridView::onTouchCancelled( Touch *touch, Event *unused_event ){}void XGridView::listenItemTouch( Touch *touch, Event *unused_event ){auto touchPoint = touch->getLocationInView();touchPoint = Director::getInstance()->convertToGL(touchPoint); for(auto &e:_mTable->getCurrentCells()){IF_NULL_CONTINUE(e);log("cell[%d]",e->getIdx());auto lout = e->getChildByTag(100);IF_NULL_CONTINUE(lout);if(dynamic_cast<ui::Layout*>(lout)){for (auto item:((ui::Layout*)lout)->getChildren()){isItemTouched(item,touchPoint);}}}}void XGridView::isItemTouched( cocos2d::Node* item,const cocos2d::Vec2 point ){IF_RETURN(!item);auto gItem = dynamic_cast<GridItem*>(item);IF_RETURN(!gItem);auto acP = gItem->getAnchorPoint();//item锚点auto itemPos = gItem->getPosition();//item相对父容器的positemPos = gItem->getParent()->convertToWorldSpaceAR(itemPos);//相对于世界的位置auto itemSize = gItem->getContentSize();auto itemRect = Rect(itemPos.x,itemPos.y,itemSize.width,itemSize.height);if(itemRect.containsPoint(point)){gItem->setSelected(true);//_selectedIdx = gItem->getIdx();//log("_selectedIdx=%d",_selectedIdx);}else{gItem->setSelected(false);}}bool XGridView::initProgressBar(){auto barBg = Sprite::create("grid/progress_bg.png");IF_NULL_RETURN_FALSE(barBg);barBg->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);barBg->setPosition(90+600+600+500+80,960/2-600/2);addChild(barBg);_progressBar = Sprite::create("grid/progress_pre.png");IF_NULL_RETURN_FALSE(_progressBar);_progressBar->setAnchorPoint(Vec2::ANCHOR_TOP_LEFT);addChild(_progressBar);float scaleY = 1;if(_cellTotalNum>_pageY){//float s = _pageY/_cellTotalNum;scaleY = MAX(_pageY/(_cellTotalNum*1.0f),0.02f);}_progressBar->setScaleY(scaleY);_progressBar->setPosition(90+600+600+500+80,960/2-600/2+_progressBar->getScaleY()*_progressBar->getContentSize().height+600*1*(1-_progressBar->getScaleY()));return true;}bool XGridView::initKeyListen(){auto listener = EventListenerKeyboard::create();IF_NULL_RETURN_FALSE(listener);listener->onKeyReleased = [=](EventKeyboard::KeyCode key,Event* event){keyHandler(key);};this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener,this);return true;}void XGridView::keyHandler(EventKeyboard::KeyCode key ){updateSceenStateByKey(key);updateBySceenState();}void XGridView::initStateMatrix(){IF_NOEMPTY_CLEAR(_screenState);for (unsigned int i = 0; i < _pageY; i++){for(unsigned int j = 0;j < _pageX; j++){itemState state;state.idx = j;state.cellIdx = i;state.isSelected = state.idx==_selectedItmIdx&&state.cellIdx == _currentCellIdx;state.posX = j;state.posY = i;state.posType = getPosTypeByXY(j,i);_screenState.push_back(state);}}}bool XGridView::isSelectedByIdx( ssize_t mIdx ) const{for(auto e:_screenState){if(mIdx==e.idx&&true==e.isSelected)return true;}return false;}void XGridView::updateSceenStateByKey( EventKeyboard::KeyCode key ){auto state = getSelectedItemState();if(!state){//do something init screenState//...return;}POS_TYPE p = state->posType; auto change_Type = getChangeType(p,key); updateMoveFoucs(key,p); auto maxIdx = _screenState.size(); switch (change_Type) { case CHANGE_TYPE::LEFT: log("left"); _selectedItmIdx--; for (unsigned int i = 0;i<maxIdx;i++) { _screenState[i].isSelected = _screenState[i].idx==_selectedItmIdx&& _screenState[i].cellIdx == _currentCellIdx; } _mTable->updateCellAtIndex(_currentCellIdx); break; case CHANGE_TYPE::RIGHT: log("right"); _selectedItmIdx++; for (unsigned int i = 0;i<maxIdx;i++) { _screenState[i].isSelected = _screenState[i].idx==_selectedItmIdx&& _screenState[i].cellIdx == _currentCellIdx; } _mTable->updateCellAtIndex(_currentCellIdx); break; case CHANGE_TYPE::UP: log("up"); _currentCellIdx --; for (unsigned int i = 0;i<maxIdx;i++) { _screenState[i].isSelected = _screenState[i].idx==_selectedItmIdx&& _screenState[i].cellIdx == _currentCellIdx; } _mTable->updateCellAtIndex(_currentCellIdx+1); _mTable->updateCellAtIndex(_currentCellIdx); break; case CHANGE_TYPE::DOWN: log("down"); _currentCellIdx++; for (unsigned int i = 0;i<maxIdx;i++) { _screenState[i].isSelected = _screenState[i].idx==_selectedItmIdx&& _screenState[i].cellIdx == _currentCellIdx; } _mTable->updateCellAtIndex(_currentCellIdx-1); _mTable->updateCellAtIndex(_currentCellIdx); break; case CHANGE_TYPE::UP_SCROLL: if (!_keyContrl) { return; } if(_keyContrl) { _keyContrl = false; scheduleOnce(schedule_selector(XGridView::keyListenDelay), 0.05f); } log("up_scroll"); _currentCellIdx--; for (unsigned int i = 0;i<maxIdx;i++) { _screenState[i].cellIdx--; _screenState[i].isSelected = _screenState[i].idx==_selectedItmIdx&& _screenState[i].cellIdx == _currentCellIdx; }_scrollTime = getCurrentMillionTime(); _mTable->scrollToCellIndex(_currentCellIdx+2); _mTable->updateCellAtIndex(_currentCellIdx+2); _mTable->updateCellAtIndex(_currentCellIdx+1);_mTable->updateCellAtIndex(_currentCellIdx); return; case CHANGE_TYPE::DOWN_SCROLL: if (!_keyContrl) { return; } if(_keyContrl) { _keyContrl = false; scheduleOnce(schedule_selector(XGridView::keyListenDelay), 0.05f); } log("down_scroll"); _currentCellIdx ++; for (unsigned int i = 0;i<maxIdx;i++) { _screenState[i].cellIdx++; _screenState[i].isSelected = _screenState[i].idx==_selectedItmIdx&& _screenState[i].cellIdx == _currentCellIdx; }_scrollTime = getCurrentMillionTime();_mTable->scrollToCellIndex(_currentCellIdx);_mTable->updateCellAtIndex(_currentCellIdx-2);_mTable->updateCellAtIndex(_currentCellIdx-1);_mTable->updateCellAtIndex(_currentCellIdx); return; case CHANGE_TYPE::NOTHING: log("nothing"); return; default: log("default"); return; } //_mTable->reloadData();}POS_TYPE XGridView::getPosTypeByXY( unsigned int X_i,unsigned int Y_j ){//if(0==X_i&&0==Y_j)return POS_TYPE::TYPE_0;if(0<X_i&&X_i<_pageX-1&&0==Y_j)return POS_TYPE::TYPE_1;if(_pageX-1==X_i&&0==Y_j)return POS_TYPE::TYPE_2;//if(0==X_i&&0<Y_j&&_pageY-1>Y_j)return POS_TYPE::TYPE_3;if(0<X_i&&X_i<_pageX-1&&0<Y_j&&_pageY-1>Y_j)return POS_TYPE::TYPE_4;if(_pageX-1==X_i&&0<Y_j&&_pageY-1>Y_j)return POS_TYPE::TYPE_5;//if(0==X_i&&_pageY-1==Y_j)return POS_TYPE::TYPE_6;if(0<X_i&&X_i<_pageX-1&&_pageY-1==Y_j)return POS_TYPE::TYPE_7;if(_pageX-1==X_i&&_pageY-1==Y_j)return POS_TYPE::TYPE_8;return POS_TYPE::TYPE_9;}itemState* XGridView::getSelectedItemState() const{for(auto e:_screenState){if(e.isSelected)return &e;}return nullptr;}CHANGE_TYPE XGridView::getChangeType( POS_TYPE posType ,EventKeyboard::KeyCode key){auto pos = (int)posType;switch(key){case EventKeyboard::KeyCode(KEY_LEFT):if (1==pos||2==pos||4==pos||5==pos||7==pos||8==pos){return CHANGE_TYPE::LEFT;}break;case EventKeyboard::KeyCode(KEY_RIGHT):if (0==pos||1==pos||3==pos||4==pos||6==pos||7==pos){return CHANGE_TYPE::RIGHT;}break;case EventKeyboard::KeyCode(KEY_UP):if (3==pos||4==pos||5==pos||6==pos||7==pos||8==pos){return CHANGE_TYPE::UP;}if(0==pos||1==pos||2==pos){if(_currentCellIdx == 0)break;return CHANGE_TYPE::UP_SCROLL;}break;case EventKeyboard::KeyCode(KEY_DOWN):if (0==pos||1==pos||2==pos||3==pos||4==pos||5==pos){return CHANGE_TYPE::DOWN;}if(6==pos||7==pos||8==pos){if(_currentCellIdx == _cellTotalNum-1)break;return CHANGE_TYPE::DOWN_SCROLL;}break;}return CHANGE_TYPE::NOTHING;}void XGridView::updateBySceenState(){//_mTable->reloadData();}void XGridView::deCodeJsonById(){ // do some thing to initialize data //..._isdecoded = true;}void XGridView::handlerValueChangge(float t){for (unsigned char i=0;i<ONCE_LOAD_NUM;i++){if (_firstPageUpdate[i]){_firstPageUpdate[i]= false;_mTable->updateCellAtIndex(i/_pageX);}}}void XGridView::update( float t ){Layer::update(t);}void XGridView::onEnterTransitionDidFinish(){Layer::onEnterTransitionDidFinish();scheduleUpdate();schedule(schedule_selector(XGridView::updateDalay),0.2f);}bool XGridView::initMoveFoucus(){_moveFoucus = Sprite::create("grid/focus.png");IF_NULL_RETURN_FALSE(_moveFoucus);addChild(_moveFoucus);_moveFoucus->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);//_moveFoucus->setPosition(500,500);for (unsigned char i=0;i<9;i++){_pos[i] = Vec2(90-10-5+i%3*600,1080-172-200-10-i/3*320);}_moveFoucus->setPosition(_pos[0]);return true;}void XGridView::updateMoveFoucs( EventKeyboard::KeyCode key,POS_TYPE pos ){int mPos = (int)pos;float time = 0.1f;int nextPos = -1;switch (key){case EventKeyboard::KeyCode(KEY_LEFT):if (mPos%_pageX){nextPos = mPos - 1;}break;case EventKeyboard::KeyCode(KEY_RIGHT):if ((mPos+1)%_pageX){nextPos = mPos + 1;}break;case EventKeyboard::KeyCode(KEY_UP):if (mPos>_pageX-1){nextPos = mPos - _pageX;}break;case EventKeyboard::KeyCode(KEY_DOWN):if (mPos<_pageX*(_pageY-1)){nextPos = mPos + _pageX;}break;default:break;}if(-1!=nextPos){_moveFoucus->stopAllActions();_moveFoucus->runAction(MoveTo::create(time,_pos[nextPos]));}}void XGridView::loadPageNumData(unsigned int cellIndx){ //load data of cell }void XGridView::keyListenDelay( float t ){_keyContrl = true;}void XGridView::updateDalay( float t ){if(getCurrentMillionTime()-_scrollTime>500){loadPageNumData(_currentCellIdx);}}void XGridView::onExit(){NotificationCenter::getInstance()->removeAllObservers(this);this->unscheduleAllSelectors();Layer::onExit();}void XGridView::updateCellAtIdx( ssize_t idx ){for (unsigned int i = idx*_pageX;i<(idx+1)*_pageX && i<_itemTotalNum;i++){updateItemAtIdx(i);}}void XGridView::updateItemAtIdx( ssize_t idx ){//update data of item }
本文原创,如转载请注明原文地址。
http://blog.csdn.net/q229827701/article/details/40619697
- cocos2dx 3.2键盘操控的列表页的初步实现
- 散列表的初步实现
- Cocos2dx中键盘响应的实现代码
- cocos2dx中CCString类实现原理的初步学习
- 远程操控系统中键盘和鼠标事件操控的小结
- 远程操控系统中键盘和鼠标事件操控的小结
- Cocos2dx 3.2键盘监听的打开方式以及点击两次返回退出的实现方法
- RecyclerView的初步使用(1)----代替ListView实现图片列表
- EXCEL的操控框架
- cocos2dx 弹出键盘无法响应键盘外的触摸事件
- 使用COM组件实现对Excel文件的操控
- 使用COM组件实现对Excel文件的操控
- 科学家实现快速操控光的量子状态
- 使用COM组件实现对Excel文件的操控
- cocos2dx 雷达的实现
- 初步实现的感悟
- 【cocos2dx-3.2】Tile Map 的六边形实现
- 通用的SqlServer操控类
- 引用和指针的使用
- NumberFormatException异常
- Nginx 在windows下配合iis搭建负载均衡过程
- Brackets - 强大免费的开源跨平台Web前端开发工具IDE (HTML/CSS/Javascript代码编辑器)
- Eclipse安装JD-Eclipse反编译插件
- cocos2dx 3.2键盘操控的列表页的初步实现
- 设计模式--单例模式
- java设计模式之代理
- js解析xml文件并实现省市的二级连动分析案例
- Android不同方式启动导致重复启动相同的Activity的问题解决办法
- 第十周血型统计
- oracle 表压缩技术
- 第十周项目一 思则运算
- 关于Android 权限管理的几点认识