手机2d横版游戏服务器位置同步,分析Cocos2d-x横版ACT手游源 2、server场景
仍然一样 直接在代码 资源 下一个 上传 你可以看到自己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);
//button回调:返回
void OnBtnCallBack(CCObject * pObj);
//button回调:向左滑动
void OnBtnLeftMove(CCObject * pObj);
//button回调:向右滑动
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);
/************************************************************************/
/*创建button */
/************************************************************************/
CCMenu * pMenu = CCMenu::create();
CC_BREAK_IF(pMenu==NULL);
pMenu->setPosition(CCPointZero);
addChild(pMenu,enZOrderFront);
//创建返回button
//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);
//创建当前服务器button
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);
//创建左側button
CCMenuItemSprite * pBtnLeft = CCMenuItemSprite::create(
CCSprite::create("ui/serverselect_btn_back_n.png"),
CCSprite::create("ui/serverselect_btn_back_p.png"),
this,
menu_selector(CNFServerChangeLayer::OnBtnLeftMove));
CC_BREAK_IF(pBtnLeft==NULL);
pBtnLeft->setPosition(ccp(50+_NF_SCREEN_WIDTH_DIS_,150));
pMenu->addChild(pBtnLeft,enZOrderFront);
//创建右側button
CCMenuItemSprite * pBtnRight = CCMenuItemSprite::create(
CCSprite::create("ui/serverselect_btn_back_n.png"),
CCSprite::create("ui/serverselect_btn_back_p.png"),
this,
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;
}
//button回调:返回
void CNFServerChangeLayer::OnBtnCallBack( CCObject * pObj )
{
//发消息:更改服务器
tagServerSelect Info;
Info.nServerID = m_nCurrentServerID;
SendMsg(enMsg_ServerSelect,&Info,sizeof(Info));
//移除自身
removeFromParentAndCleanup(true);
}
//button回调:向左滑动
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!");
}
//button回调:向右滑动
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,void* pInfo,int nSize )
{
switch (nMsgID)
{
case enMsg_ServerSelect:
{
tagServerSelect * pCmd = (tagServerSelect *)pInfo;
//发消息:更改服务器
tagServerSelect Info;
Info.nServerID = pCmd->nServerID;
SendMsg(enMsg_ServerSelect,&Info,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;//是否触摸到button
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);
//button回调
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,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;
/************************************************************************/
/*创建button */
/************************************************************************/
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,enZOrderFront,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;//竖排
//创建button
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,enZOrderFront,enTagBtn+k);
//服务器名称label
CCString *pStrServerName = dynamic_cast(pDicLang->objectForKey("server_name"));
char szName[NAME_LEN] = {0};
sprintf(szName,pStrServerName->m_sString.c_str(),k);
CCLabelTTF * pLabelServerName = CCLabelTTF::create(szName,"Arial",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;
//推断是否触摸到button
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;
//若触摸到button
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();
//若触摸到button
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();
}
//button回调
void CNFServerChangeScrollLayer::OnBtnCallBack( CCObject * pObj )
{
do
{
int nTag = (dynamic_cast(pObj))->getTag();
//发消息:更改服务器
tagServerSelect Info;
Info.nServerID = nTag-100;
//发消息,切换服务器
SendMsg(enMsg_ServerSelect,&Info,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、server场景相关推荐
- 手机2d横版游戏服务器位置同步,分析Cocos2d-x横版ACT手游源代码 2、服务器场景...
还是一样 直接上代码 源代码 下一篇 上传 大家可以自己看 NFServerChangeLayer.h /*********************************************** ...
- 分析Cocos2d-x横版ACT手游源码 1、公共
直接上代码 不说什么 这一款源码 凝视及多 PublicDef.h 公共头文件 #define NF_PLATFORM 1 //当前版本号(默觉得普通版)//版本号列表 #define NF_PLAT ...
- 分析Cocos2d-x横版ACT手游源 1、登录
我自己的游戏代码 因为 游戏源 盯着外面的 我们能够能够理解 /******************************************************************** ...
- cocos2d中getasynckeystate android,分析Cocos2d-x横版ACT手游源代码 4、场景
.h文件 #ifndef _CM_GAME_SCENE_H_ #define _CM_GAME_SCENE_H_ #include "../publicdef/PublicDef.h&quo ...
- 分析Cocos2d-x横版ACT手游源代码 4、场景
.h文件 #ifndef _CM_GAME_SCENE_H_ #define _CM_GAME_SCENE_H_#include "../publicdef/PublicDef.h" ...
- 游戏服务器 数据同步方案
游戏数据同步方案 首先我们介绍实时对战手游中最难解决的技术问题--弱网络下的数据同步问题. 通过对玩家的游戏数据进行观察,发现玩家的游戏环境存在很大差异,不同玩家会使用不同的2G/3G/4G/Wifi ...
- 如何查询游戏的服务器位置,怎么查看游戏服务器位置
怎么查看游戏服务器位置 内容精选 换一换 本章节介绍如何通过控制台查看云手机实例的详细信息.登录管理控制台.在管理控制台左上角,选择待查看云手机所在的区域.在服务列表页,选择"计算 > ...
- 游戏服务器框架概括分析
游戏服务器框架概括分析 关注公众号 风色年代(itfantasycc) 500G游戏开发资料随便拿! 这篇blog题目涉及的范围真大!以至于在这里需要先写一篇前言把范围缩小.选择写这样一个系列的文章, ...
- 正版鬼泣手游服务器,爆款频出!永劫无间+鬼泣正版手游,国内掀起硬核游戏风潮...
如果说,2020年<原神>成为炙手可热的现象级游戏,让二次元成为席卷全球的"财富密码"的话,那么2021年开始,各类硬核游戏的出色表现,则在国内掀起硬核风潮,猛男游戏登 ...
最新文章
- hdu2008——数值统计
- jq 切换功能toggle
- Swipe JS – 移动WEB页面内容触摸滑动类库
- chapter14 机器学习之利用SVD简化数据
- C语言对stm32f103程序,STM32F103WIFI程序C语言
- 这个顶级AI赛事总奖池100W+!CV 、NLP赛题等你来战!
- python numpy数组画图_python – Numpy和Pyplot的条件绘图
- mysql怎么同时输入多个值_mysql – 一个字段搜索多个值
- php cmd 命令行参数,php获取命令行参数
- 杜拉拉升职记摘录:早日实现退休理想--你需要眼光和资格
- WPF_在APP.xaml应用资源样式
- flashfxp3.41中文版注册码:(适合最新版本)
- Linux 下搭建web压力测试工具web polygraph
- python绘制正多边形_python : turtle 画正多边形
- iPad如何分屏?iPad分屏详细教程来啦!
- 小红书的大致运营思路是怎样的?
- 写出语句的四元式序列
- python编程读写文件内容_Python编程中对文件和存储器的读写示例
- python怎么写rpg游戏_python实现的简单RPG游戏流程实例
- 基于大数据的数据仓库
热门文章
- 创客小制作(含源代码)《RFID控制器》,用于智能门禁、物流追踪、控制开关等,基于Arduino
- 鼠标烟雾拖尾(含代码)
- FME对Autodesk AutoCAD Civil 3D的支持
- CVPR论文解读 | 弱监督的高保真服饰模特生成
- 【Fluent】接着上一次计算的结果继续计算,利用计算过程中得到的物理场(温度、速度、压力等)插值Interpolate文件初始化模型的方法
- vivo手机助手强势来袭!
- 打印机驱动无法安装故障一例
- 010 - 微信小程序开发之大转盘 仿天猫超市抽奖
- 西门子s7300各种存储区的作用区别
- 有限元FEM求解一维电磁场问题 Rits法 Galerkin法