cocos2dx 3.2键盘 *** 控的列表页的初步实现

cocos2dx 3.2键盘 *** 控的列表页的初步实现,第1张

概述一、实现后的目标效果 有图有真相,首先上实现了的效果。 二 、思路 由于要加载较多数据,那么为了使得界面更近流畅,我采用TableView,其中他的Cell是可以复用的。创建10000个也是秒秒钟的事情。 那么使用上下排列的TableView,每个cell自定义三个Item即可,当然也可以N个,可以自己写好接口。 由于我们想使得tableView可以滚动到指定的cell位置,也就是一格一格滚动,那 一、实现后的目标效果

有图有真相,首先上实现了的效果。


二 、思路

由于要加载较多数据,那么为了使得界面更近流畅,我采用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 init	bool initLayout();	voID update(float t);private:	cocos2d::Size _cellSize;  //the size of cell	unsigned 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",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 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 up	TYPE_1,//left,right,down and scroll up	TYPE_2,down and scroll up	TYPE_3,up,down	TYPE_4,down	TYPE_5,down	TYPE_6,and           scroll down	TYPE_7,and           scroll down	TYPE_8,and           scroll down	TYPE_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 _pageX	unsigned char IDx;	//cell IDx	unsigned int cellIDx;	// selected state	bool isSelected;	/*****************************************	*    pos in screen like a matrix,such as                                     			*		(0,0),(1,(2,0)			*		(0,1),1)			*		(0,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 function				bool 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 IDx		voID updateCellAtIDx(ssize_t IDx);		// update Item At IDx		voID 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 unselected		std::vector<itemState> _screenState;		//the cell of selected IDx		ssize_t _currentCellIDx;		//item IDx which in cell		unsigned 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,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相对父容器的pos	itemPos = 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 3.2键盘 *** 控的列表页的初步实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1007209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存