还是一样 直接上代码 源代码 下一篇 上传 大家可以自己看

NFServerChangeLayer.h

/************************************************************************/

/*服务器切换层 */

/************************************************************************/

class CNFServerChangeLayer : public CCLayer,public CMsgReceiver,public CMsgSender

{

protected:

//标签

enum

{

enTagScrollLayer = 1,};

int m_nCurrentServerID;

public:

static CNFServerChangeLayer * CreateLayer(int nCurrentServerID,int nServerTotalNum);//当前服务器ID,服务器总数量

//消息接收

virtual void RecMsg(int nMsgID,void* pInfo,int nSize);

protected:

virtual bool InitLayer(int nCurrentServerID,int nServerTotalNum);

//按钮回调:返回

void OnBtnCallBack(CCObject * pObj);

//按钮回调:向左滑动

void OnBtnLeftMove(CCObject * pObj);

//按钮回调:向右滑动

void OnBtnRightMove(CCObject * pObj);

};

#endif

.cpp文件

#include "NFServerChangeLayer.h"

#include "NFServerChangeScrollLayer.h"

CNFServerChangeLayer * CNFServerChangeLayer::CreateLayer(int nCurrentServerID,int nServerTotalNum)

{

CNFServerChangeLayer *pRet = new CNFServerChangeLayer();

if (pRet && pRet->InitLayer(nCurrentServerID,nServerTotalNum))

{

pRet->autorelease();

return pRet;

}

CCLog("Fun CNFServerChangeLayer::CreateLayer Error!");

delete pRet;

pRet = NULL;

return NULL;

}

bool CNFServerChangeLayer::InitLayer(int nCurrentServerID,int nServerTotalNum)

{

do

{

//初始化父类

CC_BREAK_IF(CCLayer::init()==false);

m_nCurrentServerID = nCurrentServerID;

/************************************************************************/

/*背景图片 */

/************************************************************************/

//创建背景

CCSprite * pBg = CCSprite::create("ui/serverselect_bg.png");

CC_BREAK_IF(pBg==NULL);

pBg->setPosition(SCREEN_CENTER);

pBg->setScaleX( (float)CCDirector::sharedDirector()->getWinSize().width/(float)pBg->getContentSize().width );

addChild(pBg,enZOrderBack);

//创建上次登录图片

CCSprite * pBg1 = CCSprite::create("ui/serverselect_title_1.png");

CC_BREAK_IF(pBg1==NULL);

pBg1->setPosition(ccp(150+_NF_SCREEN_WIDTH_DIS_,420));

addChild(pBg1,enZOrderBack);

//创建全服务器图片

CCSprite * pBg2 = CCSprite::create("ui/serverselect_title_2.png");

CC_BREAK_IF(pBg2==NULL);

pBg2->setPosition(ccp(160+_NF_SCREEN_WIDTH_DIS_,300));

addChild(pBg2,enZOrderBack);

/************************************************************************/

/*创建按钮 */

/************************************************************************/

CCMenu * pMenu = CCMenu::create();

CC_BREAK_IF(pMenu==NULL);

pMenu->setPosition(CCPointZero);

addChild(pMenu,enZOrderFront);

//创建返回按钮

//CCMenuItemSprite * pBtnBack = CCMenuItemSprite::create(

//CCSprite::create("ui/serverselect_btn_back_n.png"),//CCSprite::create("ui/serverselect_btn_back_p.png"),//this,//menu_selector(CNFServerChangeLayer::OnBtnCallBack));

//CC_BREAK_IF(pBtnBack==NULL);

//pBtnBack->setPosition(ccp(SCREEN_WIDTH - 30,SCREEN_HEIGHT-30));

//pMenu->addChild(pBtnBack,enZOrderFront);

//创建当前服务器按钮

CCMenuItemSprite * pBtnCurrentServer = CCMenuItemSprite::create(

CCSprite::create("ui/btn_enter_n.png"),CCSprite::create("ui/btn_enter_p.png"),this,menu_selector(CNFServerChangeLayer::OnBtnCallBack));

CC_BREAK_IF(pBtnCurrentServer==NULL);

pBtnCurrentServer->setPosition(ccp(190+_NF_SCREEN_WIDTH_DIS_,380));

pMenu->addChild(pBtnCurrentServer,enZOrderFront);

//创建左侧按钮

CCMenuItemSprite * pBtnLeft = CCMenuItemSprite::create(

CCSprite::create("ui/serverselect_btn_back_n.png"),CCSprite::create("ui/serverselect_btn_back_p.png"),menu_selector(CNFServerChangeLayer::OnBtnLeftMove));

CC_BREAK_IF(pBtnLeft==NULL);

pBtnLeft->setPosition(ccp(50+_NF_SCREEN_WIDTH_DIS_,150));

pMenu->addChild(pBtnLeft,enZOrderFront);

//创建右侧按钮

CCMenuItemSprite * pBtnRight = CCMenuItemSprite::create(

CCSprite::create("ui/serverselect_btn_back_n.png"),menu_selector(CNFServerChangeLayer::OnBtnRightMove));

CC_BREAK_IF(pBtnRight==NULL);

pBtnRight->setPosition(ccp(SCREEN_WIDTH-_NF_SCREEN_WIDTH_DIS_-50,150));

pMenu->addChild(pBtnRight,enZOrderFront);

/************************************************************************/

/*创建label */

/************************************************************************/

CCDictionary *pDicLang = CCDictionary::createWithContentsOfFile("ui_xml/serverselect_xml.xml");

CC_BREAK_IF(pDicLang==NULL);

//服务器名称label

CCString *pStrServerName = dynamic_cast(pDicLang->objectForKey("server_name"));

char szName[NAME_LEN] = {0};

sprintf(szName,pStrServerName->m_sString.c_str(),nCurrentServerID);

CCLabelTTF * pLabelServerName = CCLabelTTF::create(szName,"Arial",20);

CC_BREAK_IF(pLabelServerName==NULL);

pLabelServerName->setPosition(pBtnCurrentServer->getPosition());

addChild(pLabelServerName,enZOrderFront);

/************************************************************************/

/*创建滑动层 */

/************************************************************************/

//创建滑动层

CNFServerChangeScrollLayer * pLayer = CNFServerChangeScrollLayer::CreateLayer(nServerTotalNum);//Item数组,x轴起始位置

CC_BREAK_IF(pLayer==NULL);

pLayer->SetMsg(this);

addChild(pLayer,enZOrderFront,enTagScrollLayer);

return true;

} while (false);

CCLog("Fun CNFServerChangeLayer::init Error!");

return false;

}

//按钮回调:返回

void CNFServerChangeLayer::OnBtnCallBack( CCObject * pObj )

{

//发消息:更改服务器

tagServerSelect Info;

Info.nServerID = m_nCurrentServerID;

SendMsg(enMsg_ServerSelect,&Info,sizeof(Info));

//移除自身

removeFromParentAndCleanup(true);

}

//按钮回调:向左滑动

void CNFServerChangeLayer::OnBtnLeftMove( CCObject * pObj )

{

do

{

//滑动层

CNFServerChangeScrollLayer * pLayer = dynamic_cast(getChildByTag(enTagScrollLayer));

CC_BREAK_IF(pLayer==NULL);

pLayer->SetRightMove();

return ;

} while (false);

CCLog("Fun CNFServerChangeLayer::OnBtnLeftMove Error!");

}

//按钮回调:向右滑动

void CNFServerChangeLayer::OnBtnRightMove( CCObject * pObj )

{

do

{

//滑动层

CNFServerChangeScrollLayer * pLayer = dynamic_cast(getChildByTag(enTagScrollLayer));

CC_BREAK_IF(pLayer==NULL);

pLayer->SetLeftMove();

return ;

} while (false);

CCLog("Fun CNFServerChangeLayer::OnBtnRightMove Error!");

}

//消息接收

void CNFServerChangeLayer::RecMsg( int nMsgID,int nSize )

{

switch (nMsgID)

{

case enMsg_ServerSelect:

{

tagServerSelect * pCmd = (tagServerSelect *)pInfo;

//发消息:更改服务器

tagServerSelect Info;

Info.nServerID = pCmd->nServerID;

SendMsg(enMsg_ServerSelect,sizeof(Info));

//移除自身

removeFromParentAndCleanup(true);

}break;

}

}

NFServerChangeScrollLayer.h 文件

/************************************************************************/

/*服务器选择界面,滑动层 */

/************************************************************************/

class CNFServerChangeScrollLayer : public CCLayerColor,public CMsgSender

{

protected:

// 标签

enum

{

enTagMenu = 1,enTagBtn = 100,};

floatm_fTouchPassPosX;//上一次计算触摸时,手指滑过的位置

floatm_fTouchBeginPosX;//用户触摸最初始的位置

boolm_bTouching;//是否取消了触摸(保证不会重复调用TouchEnd)

boolm_bIsTouchBtn;//是否触摸到按钮

floatm_fPageWidth;//每一页的宽度

floatm_fEndLayerPos;//结束边界的位置

floatm_fStartNodePosX;//初始节点x轴位置

CCRectm_DisPlayRect;//显示区域

public:

static CNFServerChangeScrollLayer* CreateLayer(int nItemNum);

//向左滑

void SetLeftMove();

//向右滑

void SetRightMove();

protected:

bool InitLayer(int nItemNum);

//设置裁剪区域

void visit();

//触摸函数

virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent);

virtual void ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent);

virtual void ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent);

virtual void ccTouchCancelled(CCTouch *pTouch,CCEvent *pEvent);

//按钮回调

void OnBtnCallBack(CCObject * pObj);

virtual void onExit();

};

#endif

#include "NFServerChangeScrollLayer.h"

#define _ONE_PAGE_SERVER_NUM_12//每一页所拥有的服务器的个数

#define _X_START_POS_78//x轴初始坐标

#define _PAGE_WIDTH_564//页面宽度

#define _PAGE_HEIGHT_285//页面高度

/************************************************************************/

/*滑动层 */

/************************************************************************/

CNFServerChangeScrollLayer* CNFServerChangeScrollLayer::CreateLayer(int nItemNum)

{

CNFServerChangeScrollLayer *pRet = new CNFServerChangeScrollLayer();

if (pRet && pRet->InitLayer(nItemNum))

{

pRet->autorelease();

return pRet;

}

CC_SAFE_DELETE(pRet);

return NULL;

}

bool CNFServerChangeScrollLayer::InitLayer(int nItemNum)

{

do

{

//初始化父类

CC_BREAK_IF(CCLayerColor::initWithColor(ccc4(0,0))==false);

//独占触屏注册值小于-128才能屏蔽Menu(Menu默认是-128)

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-129,true);

//初始x轴坐标

m_fStartNodePosX = _X_START_POS_ + _NF_SCREEN_WIDTH_DIS_;

;//页面数量

int nPageNum = nItemNum%_ONE_PAGE_SERVER_NUM_ > 0 ? nItemNum/_ONE_PAGE_SERVER_NUM_+1 : nItemNum/_ONE_PAGE_SERVER_NUM_;

//每一页宽度

m_fPageWidth = _PAGE_WIDTH_;

//页面高度

floatfPageHeight = _PAGE_HEIGHT_;

//x轴最小坐标

m_fEndLayerPos = m_fPageWidth*(1-nPageNum);

//x,y轴之间的间隔

float fItemDisX = 11;

float fItemDisY = 20;

/************************************************************************/

/*创建按钮 */

/************************************************************************/

CCDictionary *pDicLang = CCDictionary::createWithContentsOfFile("ui_xml/serverselect_xml.xml");

CC_BREAK_IF(pDicLang==NULL);

CCMenu * pMenu = CCMenu::create();

CC_BREAK_IF(pMenu==NULL);

pMenu->setPosition(CCPointZero);

addChild(pMenu,enTagMenu);

//创建数组

CCObject *pObj = NULL;

for (int k=1;k<=nItemNum;k++)

{

int i = k%_ONE_PAGE_SERVER_NUM_ > 0 ? k%_ONE_PAGE_SERVER_NUM_ : _ONE_PAGE_SERVER_NUM_;//页面内ITem的ID:1~12

int j = k%_ONE_PAGE_SERVER_NUM_ > 0 ? k/_ONE_PAGE_SERVER_NUM_+1 : k/_ONE_PAGE_SERVER_NUM_;//当前页面ID

int nCrossNum = i%3 == 0 ? 3 : i%3;//横排

int nVerticalNum = i%3 > 0 ? i/3+1 : i/3;//竖排

//创建按钮

CCMenuItemSprite * pBtn = CCMenuItemSprite::create(

CCSprite::create("ui/btn_enter_n.png"),CCSprite::create("ui/btn_enter_p.png"),this,menu_selector(CNFServerChangeScrollLayer::OnBtnCallBack));

CC_BREAK_IF(pBtn==NULL);

pBtn->setPosition(ccp( fItemDisX+ (nCrossNum-1)*(pBtn->getContentSize().width+fItemDisX) + m_fStartNodePosX + pBtn->getContentSize().width*0.5f + (j-1)*m_fPageWidth,fPageHeight-nVerticalNum*(pBtn->getContentSize().height+fItemDisY) + fItemDisY ));

pMenu->addChild(pBtn,enTagBtn+k);

//服务器名称label

CCString *pStrServerName = dynamic_cast(pDicLang->objectForKey("server_name"));

char szName[NAME_LEN] = {0};

sprintf(szName,k);

CCLabelTTF * pLabelServerName = CCLabelTTF::create(szName,20);

CC_BREAK_IF(pLabelServerName==NULL);

pLabelServerName->setPosition(pBtn->getPosition());

addChild(pLabelServerName,enZOrderFront);

}

//显示区域

m_DisPlayRect = CCRectMake(m_fStartNodePosX,10,m_fPageWidth,fPageHeight);

m_bTouching = false;

m_bIsTouchBtn = false;

return true;

} while (false);

CCLog("Fun CQXPVEItemScrollLayer::initWithNodes Error!");

return false;

}

//触摸:开始

bool CNFServerChangeScrollLayer::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent)

{

CCPoint ptTouchPoint =pTouch->getLocation();

//设置初始触摸点

m_fTouchPassPosX = ptTouchPoint.x;

m_fTouchBeginPosX = ptTouchPoint.x;

//判断是否触摸到裁切区域内

if(m_DisPlayRect.containsPoint(ptTouchPoint))

{

m_bTouching = true;

//判断是否触摸到按钮

CCMenu *pMenu = dynamic_cast(getChildByTag(enTagMenu));

if(pMenu!=NULL)

{

CCArray *pChildren = pMenu->getChildren();

if(pChildren!=NULL)

{

CCObject *pItem=NULL;

CCARRAY_FOREACH(pChildren,pItem)

{

CCMenuItemSprite *pBtn= dynamic_cast(pItem);

if(pBtn!=NULL)

{

CCPoint local = pBtn->convertToNodeSpace(pTouch->getLocation());

CCRect r = pBtn->rect();

r.origin = CCPointZero;

if (r.containsPoint(local))

{

pMenu->ccTouchBegan(pTouch,pEvent);

m_bIsTouchBtn=true;

}

}

}

}

}

return true;

}

return false;

}

//触摸:移动

void CNFServerChangeScrollLayer::ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent)

{

if(m_bTouching==false)return;

CCPoint ptTouchPoint =pTouch->getLocation();

CCPoint pNewPos=getPosition();

//移动层

pNewPos.x+=ptTouchPoint.x-m_fTouchPassPosX;

this->setPosition(pNewPos);

//重置初始点

m_fTouchPassPosX=ptTouchPoint.x;

//若触摸到按钮

if (m_bIsTouchBtn==true)

{

CCMenu *pMenu = dynamic_cast(getChildByTag(enTagMenu));

if (pMenu!=NULL)

{

pMenu->ccTouchCancelled(pTouch,pEvent);

m_bIsTouchBtn = false;

}

}

}

//触摸:结束

void CNFServerChangeScrollLayer::ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent)

{

if(m_bTouching==false)return;

m_bTouching = false;

CCPoint ptTouchPoint =pTouch->getLocation();

CCPoint ptMyPos = getPosition();

//判断移到哪一页

float fDisX = ptTouchPoint.x - m_fTouchBeginPosX;

//判定滑动

if ( _NF_ABS(fDisX)>= 20)

{

//向左滑动

if (fDisX < 0)

{

//若未过界

if (getPositionX() > m_fEndLayerPos)

{

int fLen = (int)getPositionX()%(int)m_fPageWidth;

ptMyPos.x = (int)( getPositionX() - fLen - m_fPageWidth);

CCAction *pMoveTo=CCMoveTo::create(0.3f,ptMyPos);

runAction(pMoveTo);

}

}

//向右滑

if (fDisX > 0)

{

//若未过界

if (getPositionX() < 0)

{

int fLen = (int)getPositionX()%(int)m_fPageWidth;

ptMyPos.x = (int)( getPositionX() - fLen);

CCAction *pMoveTo=CCMoveTo::create(0.3f,ptMyPos);

runAction(pMoveTo);

}

}

}

//判断是否越界

if (getPositionX()>0)

{

ptMyPos.x = 0;

CCAction *pMoveTo=CCMoveTo::create(0.3f,ptMyPos);

runAction(pMoveTo);

}

else if (getPositionX()

{

ptMyPos.x = m_fEndLayerPos<0?m_fEndLayerPos:0;

CCAction *pMoveTo=CCMoveTo::create(0.3f,ptMyPos);

runAction(pMoveTo);

}

//滑动层,当前坐标

CCPoint LayerPos;

LayerPos.x = getPositionX();

LayerPos.y = getPositionY();

//若触摸到按钮

if (m_bIsTouchBtn==true)

{

CCMenu *pMenu = dynamic_cast(getChildByTag(enTagMenu));

if (pMenu!=NULL)

{

pMenu->ccTouchEnded(pTouch,pEvent);

}

m_bIsTouchBtn = false;

}

}

void CNFServerChangeScrollLayer::ccTouchCancelled( CCTouch *pTouch,CCEvent *pEvent )

{

m_bTouching = false;

}

//裁切

void CNFServerChangeScrollLayer::visit()

{

kmGLPushMatrix();

if (m_pGrid && m_pGrid->isActive())

{

m_pGrid->beforeDraw();

this->transformAncestors();

}

this->transform();

glEnable(GL_SCISSOR_TEST);

CCSize size=CCEGLView::sharedOpenGLView()->getFrameSize();

float fScaleX=size.width/SCREEN_WIDTH;

float fScaleY=size.height/SCREEN_HEIGHT;

glScissor(m_DisPlayRect.origin.x*fScaleX,m_DisPlayRect.origin.y*fScaleY,m_DisPlayRect.size.width*fScaleX,m_DisPlayRect.size.height*fScaleY);

if (m_pChildren)

{

for (unsigned int i=0;idata->num;i++)

{

CCNode* pNode=(CCNode*)m_pChildren->data->arr[i];

if (pNode->getZOrder()<0)

{

pNode->visit();

}

else

{

break;

}

}

draw();

for (unsigned int i=0;idata->num;i++)

{

CCNode* pNode=(CCNode*)m_pChildren->data->arr[i];

pNode->visit();

}

}

else

{

draw();

}

glDisable(GL_SCISSOR_TEST);

if (m_pGrid &&m_pGrid->isActive())

{

m_pGrid->afterDraw(this);

}

kmGLPopMatrix();

}

//按钮回调

void CNFServerChangeScrollLayer::OnBtnCallBack( CCObject * pObj )

{

do

{

int nTag = (dynamic_cast(pObj))->getTag();

//发消息:更改服务器

tagServerSelect Info;

Info.nServerID = nTag-100;

//发消息,切换服务器

SendMsg(enMsg_ServerSelect,sizeof(Info));

//移除自身

removeFromParentAndCleanup(true);

return ;

} while (false);

CCLog("Fun CNFServerSelectScrollLayer::OnBtnCallBack Error!");

}

void CNFServerChangeScrollLayer::onExit()

{

//取消独占

CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

CCLayer::onExit();

}

void CNFServerChangeScrollLayer::SetLeftMove()

{

//若当前未触摸

if (m_bTouching==false)

{

//若未过界

if (getPositionX() > m_fEndLayerPos)

{

CCPoint ptMyPos;

ptMyPos.x = (int)( getPositionX() - m_fPageWidth);

CCAction *pMoveTo=CCMoveTo::create(0.3f,ptMyPos);

runAction(pMoveTo);

}

}

}

void CNFServerChangeScrollLayer::SetRightMove()

{

//若当前未触摸

if (m_bTouching==false)

{

//若未过界

if (getPositionX() < 0)

{

CCPoint ptMyPos;

ptMyPos.x = (int)( getPositionX() + m_fPageWidth);

CCAction *pMoveTo=CCMoveTo::create(0.3f,ptMyPos);

runAction(pMoveTo);

}

}

}

总结

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

手机2d横版游戏服务器位置同步,分析Cocos2d-x横版ACT手游源代码 2、服务器场景...相关推荐

  1. cocos2d中getasynckeystate android,分析Cocos2d-x横版ACT手游源代码 4、场景

    .h文件 #ifndef _CM_GAME_SCENE_H_ #define _CM_GAME_SCENE_H_ #include "../publicdef/PublicDef.h&quo ...

  2. 分析Cocos2d-x横版ACT手游源代码 4、场景

    .h文件 #ifndef _CM_GAME_SCENE_H_ #define _CM_GAME_SCENE_H_#include "../publicdef/PublicDef.h" ...

  3. 银河掠夺者服务器维护,银河掠夺者-大型3D星战RTS手游无法连接服务器是什么原因...

    银河掠夺者-大型3D星战RTS手游无法连接服务器是什么原因,相信大家在玩银河掠夺者-大型3D星战RTS手游的过程中,经常会遇到这样的问题,下面ourplay小编就简单为大家介绍几种常见的解决方案. 银 ...

  4. 手机2d横版游戏服务器位置同步,分析Cocos2d-x横版ACT手游源 2、server场景

    仍然一样 直接在代码 资源 下一个 上传 你可以看到自己NFServerChangeLayer.h /************************************************* ...

  5. 分析Cocos2d-x横版ACT手游源代码 2、服务器场景

    还是一样 直接上代码 源代码 下一篇 上传 大家可以自己看 NFServerChangeLayer.h </pre><pre name="code" class= ...

  6. 分析Cocos2d-x横版ACT手游源代码 1、公共

    直接上代码 不说什么 这一款源代码 注释及多 PublicDef.h 公共头文件 #define NF_PLATFORM 1 //当前版本(默认为普通版)//版本列表 #define NF_PLATF ...

  7. 分析Cocos2d-x横版ACT手游源代码 1、登录

    我就自己上游戏代码来 因为 这个游戏源代码 注释十分的 都可以看得懂 /**************************************************************** ...

  8. 分析Cocos2d-x横版ACT手游源代码 5、3D世界

    .h文件 #ifndef _NF_3D_WORLD_LAYER_HEAD_ #define _NF_3D_WORLD_LAYER_HEAD_#include "../publicdef/Pu ...

  9. 分析Cocos2d-x横版ACT手游源代码 3、人物选择界面

    .h文件 #ifndef _NF_ROLE_SELECT_SCENE_HEAD_ #define _NF_ROLE_SELECT_SCENE_HEAD_#include "../public ...

最新文章

  1. 人工智能,“抛弃”真实数据集?
  2. RabbitMQ之与Spring集成
  3. eclipse报错:Failed to load the JNI shared library
  4. nyoj--1007 GCD
  5. 学学python(4):面向对象及类,模块
  6. linux桌面服务器系统下载,Ubuntu 14.10 中文桌面版/服务器正式版下载
  7. Ajax updatepanel用法
  8. 今天动手熟悉了一下css和php
  9. 微信公众号——永久素材的上传
  10. eclipse lombok 标红_无法使Lombok项目在Eclipse上运行
  11. 引用计数器法 可达性分析算法_面试官:你说你熟悉jvm?那你讲一下并发的可达性分析...
  12. 解释汇编中的AUGW LABEL WORD、ADDW LABEL WORD
  13. 基准对象object中的基础类型----元组 (五)
  14. 锐捷交换机配置保存到计算机,锐捷交换机常用配置命令汇总
  15. MVVM模式基于开源VLC解码器WPF万能视频播放器
  16. 软件工程:数据流图和结构图怎么画?
  17. Mac的开机启动项如何关闭?
  18. 信息规范和信息安全素养计算机,技师学院计算机专业学生信息安全意识培养的教学研究...
  19. FPGA入门-腾讯云布道师团队-专题视频课程
  20. 用python画一个动态樱花

热门文章

  1. asp毕业设计——基于asp+access的精品课程教学网站设计与实现(毕业论文+程序源码)——精品课程教学网站
  2. [Rhino]犀牛建立模型学习笔记
  3. JS比较常用的隔行换色和获取焦点以及失去焦点效果
  4. 芯片行业都难在哪儿?这篇说得最详细!
  5. bt30与bt40哪个好_小型加工中心BT30,BT40,NT30有什么区别?
  6. 计算统一社会信用代码的校验码(Lua)
  7. 简历造假_深造假的技术对策
  8. ubuntu 安装bin 文件不能执行的问题
  9. 安川工业机器人实训心得_工业机器人心得体会范文
  10. python爬虫开发引言