① 如何基於cocos2dx3.x實現A星尋路演算法
在學習本篇教程之前,如果你有cocos2d-x的開發經驗,將會有所幫助。如果沒有也沒關系,因為你可以將這里講解的例子遷移到其他的語言或者框架中。找到到達你鍵盤的最短路徑,開始吧!Maze貓首先介紹下我們將要在本篇教程中開發的簡單游戲。前往下載本篇教程的工程代碼。編譯運行工程,你將看到以下畫面。在這款游戲中,你扮演著一隻小偷貓,在一個由危險的狗守護著的地牢里小心穿行。如果你試圖穿過一隻狗,他會把你吃掉–除非你可以用骨頭去賄賂它!所以在這款游戲中,你的任務是嘗試以正確的順序撿起骨頭,然後尋找路線穿過狗逃離。注意到貓只能水平或者垂直的移動(例如不能斜線移動),並且會從一個方塊的中心點移動到另一個中心點。每個方塊既可以是可通行的也可以是不可通行的。嘗試下這款游戲,看看你能否找到出路!建議你閱讀代碼以熟悉它的原理。這是一款相當普通的方塊-地圖式游戲,我們會在接下來的教程中修改它並使用上A星尋路演算法。Maze貓和A星概覽正如你所看到的,當你點擊地圖某處時,貓會沿著你點擊的方向跳到相鄰的方塊上。我們想對程序做修改,讓貓持續的往你點擊的方塊方向前進,就像許多RPGs或者point-and-click冒險類游戲。讓我們看下控制觸摸事件代碼的工作原理。如果你打開HelloWorldScene.cpp文件,你將看到像下面這樣去實現觸摸操作:autolistener=EventListenerTouchOneByOne::create();listener->setSwallowTouches(true);listener->onTouchBegan=[this](Touch*touch,Event*event){if(_gameOver){returnfalse;}PointtouchLocation=_tileMap->convertTouchToNodeSpace(touch);_cat->moveToward(touchLocation);returntrue;};_eventDispatcher->(listener,this);你可以看到這里只是對貓精靈調用了一個方法,讓貓在方塊地圖上往你點擊的地方移動。我們現在要做的是修改在CatSprite.m文件中的以下方法,尋找到達該點的最短路徑,並且開始前進:voidCatSprite::moveToward(constPoint&target){}創建ShortestPathStep類我們開始創建一個內部類,代表路徑上的一步操作。在這種情況下,它是一個方塊和由A星演算法計算出來的的F,G和Hscores。classShortestPathStep:publiccocos2d::Object{public:ShortestPathStep();~ShortestPathStep();staticShortestPathStep*createWithPosition(constcocos2d::Point&pos);boolinitWithPosition(constcocos2d::Point&pos);intgetFScore()const;boolisEqual(constShortestPathStep*other)const;std::stringgetDescription()const;CC_SYNTHESIZE(cocos2d::Point,_position,Position);CC_SYNTHESIZE(int,_gScore,GScore);CC_SYNTHESIZE(int,_hScore,HScore);CC_SYNTHESIZE(ShortestPathStep*,_parent,Parent);};現在添加以下代碼到CatSprite.cpp文件的頂部。CatSprite::ShortestPathStep::ShortestPathStep():_position(Point::ZERO),_gScore(0),_hScore(0),_parent(nullptr){}CatSprite::ShortestPathStep::~ShortestPathStep(){}CatSprite::ShortestPathStep*CatSprite::ShortestPathStep::createWithPosition(constPoint&pos){ShortestPathStep*pRet=newShortestPathStep();if(pRet&&pRet->initWithPosition(pos)){pRet->autorelease();returnpRet;}else{CC_SAFE_DELETE(pRet);returnnullptr;}}boolCatSprite::ShortestPathStep::initWithPosition(constPoint&pos){boolbRet=false;do{this->setPosition(pos);bRet=true;}while(0);returnbRet;}intCatSprite::ShortestPathStep::getFScore()const{returnthis->getGScore()+this->getHScore();}boolCatSprite::ShortestPathStep::isEqual(constCatSprite::ShortestPathStep*other)const{returnthis->getPosition()==other->getPosition();}std::stringCatSprite::ShortestPathStep::getDescription()const{returnStringUtils::format("pos=[%.0f;%.0f]g=%dh=%df=%d",this->getPosition().x,this->getPosition().y,this->getGScore(),this->getHScore(),this->getFScore());}正如所見,這是一個很簡單的類,記錄了以下內容:-方塊的坐標-G值(記住,這是開始點到當前點的方塊數量)-H值(記住,這是當前點到目標點的方塊估算數量)-Parent是它的上一步操作-F值,這是方塊的和值(它是G+H的值)這里定義了getDescription方法,以方便調試。創建了isEquals方法,當且僅當兩個ShortestPathSteps的方塊坐標相同時,它們相等(例如它們代表著相同的方塊)。創建Open和Closed列表打開CatSprite.h文件,添加如下代碼:cocos2d::Vector_spOpenSteps;cocos2d::Vector_spClosedSteps;檢查開始和結束點重新實現moveToward方法,獲取當前方塊坐標和目標方塊坐標,然後檢查是否需要計算一條路徑,最後測試目標方塊坐標是否可行走的(在這里只有牆壁是不可行走的)。打開CatSprite.cpp文件,修改moveToward方法,為如下:voidCatSprite::moveToward(constPoint&target){PointfromTileCoord=_layer->tileCoordForPosition(this->getPosition());PointtoTileCoord=_layer->tileCoordForPosition(target);if(fromTileCoord==toTileCoord){CCLOG("You'realreadythere!:P");return;}if(!_layer->isValidTileCoord(toTileCoord)||_layer->isWallAtTileCoord(toTileCoord)){SimpleAudioEngine::getInstance()->playEffect("hitWall.wav");return;}CCLOG("From:%f,%f",fromTileCoord.x,fromTileCoord.y);CCLOG("To:%f,%f",toTileCoord.x,toTileCoord.y);}編譯運行,在地圖上進行點擊,如果不是點擊到牆壁的話,可以在控制台看到如下信息:From:24.000000,0.000000To:20.000000,0.000000其中**From**就是貓的方塊坐標,**To**就是所點擊的方塊坐標。實現A星演算法根據演算法,第一步是添加當前坐標到open列表。還需要三個輔助方法:-一個方法用來插入一個ShortestPathStep對象到適當的位置(有序的F值)-一個方法用來計算從一個方塊到相鄰方塊的移動數值-一個方法是根據"曼哈頓距離"演算法,計算方塊的H值打開CatSprite.cpp文件,添加如下方法:voidCatSprite::insertInOpenSteps(CatSprite::ShortestPathStep*step){intstepFScore=step->getFScore();ssize_tcount=_spOpenSteps.size();ssize_ti=0;for(;igetFScore()){break;}}_spOpenSteps.insert(i,step);}intCatSprite::computeHScoreFromCoordToCoord(constPoint&fromCoord,constPoint&toCoord){//忽略了可能在路上的各種障礙returnabs(toCoord.x-fromCoord.x)+abs(toCoord.y-fromCoord.y);}intCatSprite::(constShortestPathStep*fromStep,constShortestPathStep*toStep){//因為不能斜著走,而且由於地形就是可行走和不可行走的成本都是一樣的//如果能夠對角移動,或者有沼澤、山丘等等,那麼它必須是不同的return1;}接下來,需要一個方法去獲取給定方塊的所有相鄰可行走方塊。因為在這個游戲中,HelloWorld管理著地圖,所以在那裡添加方法。打開HelloWorldScene.cpp文件,添加如下方法:PointArray*HelloWorld::(constPoint&tileCoord)const{PointArray*tmp=PointArray::create(4);//上Pointp(tileCoord.x,tileCoord.y-1);if(this->isValidTileCoord(p)&&!this->isWallAtTileCoord(p)){tmp->addControlPoint(p);}//左p.setPoint(tileCoord.x-1,tileCoord.y);if(this->isValidTileCoord(p)&&!this->isWallAtTileCoord(p)){tmp->addControlPoint(p);}//下p.setPoint(tileCoord.x,tileCoord.y+1);if(this->isValidTileCoord(p)&&!this->isWallAtTileCoord(p)){tmp->addControlPoint(p);}//右p.setPoint(tileCoord.x+1,tileCoord.y);if(this->isValidTileCoord(p)&&!this->isWallAtTileCoord(p)){tmp->addControlPoint(p);}returntmp;}可以繼續CatSprite.cpp中的moveToward方法了,在moveToward方法的後面,添加如下代碼:boolpathFound=false;_spOpenSteps.clear();_spClosedSteps.clear();//首先,添加貓的方塊坐標到open列表this->insertInOpenSteps(ShortestPathStep::createWithPosition(fromTileCoord));do{//得到最小的F值步驟//因為是有序列表,第一個步驟總是最小的F值ShortestPathStep*currentStep=_spOpenSteps.at(0);//添加當前步驟到closed列表_spClosedSteps.pushBack(currentStep);//將它從open列表裡面移除//需要注意的是,如果想要先從open列表裡面移除,應小心對象的內存_spOpenSteps.erase(0);//如果當前步驟是目標方塊坐標,那麼就完成了if(currentStep->getPosition()==toTileCoord){pathFound=true;ShortestPathStep*tmpStep=currentStep;CCLOG("PATHFOUND:");do{CCLOG("%s",tmpStep->getDescription().c_str());tmpStep=tmpStep->getParent();//倒退}while(tmpStep);//直到沒有上一步_spOpenSteps.clear();_spClosedSteps.clear();break;}//得到當前步驟的相鄰方塊坐標PointArray*adjSteps=_layer->(currentStep->getPosition());for(ssize_ti=0;icount();++i){ShortestPathStep*step=ShortestPathStep::createWithPosition(adjSteps->getControlPointAtIndex(i));//檢查步驟是不是已經在closed列表if(this->getStepIndex(_spClosedSteps,step)!=-1){continue;}//計算從當前步驟到此步驟的成本intmoveCost=this->(currentStep,step);//檢查此步驟是否已經在open列表ssize_tindex=this->getStepIndex(_spOpenSteps,step);//不在open列表,添加它if(index==-1){//設置當前步驟作為上一步操作step->setParent(currentStep);//G值等同於上一步的G值+從上一步到這里的成本step->setGScore(currentStep->getGScore()+moveCost);//H值即是從此步驟到目標方塊坐標的移動量估算值step->setHScore(this->computeHScoreFromCoordToCoord(step->getPosition(),toTileCoord));//按序添加到open列表this->insertInOpenSteps(step);}else{//獲取舊的步驟,其值已經計算過step=_spOpenSteps.at(index);//檢查G值是否低於當前步驟到此步驟的值if((currentStep->getGScore()+moveCost)getGScore()){//G值等同於上一步的G值+從上一步到這里的成本step->setGScore(currentStep->getGScore()+moveCost);//因為G值改變了,F值也會跟著改變//所以為了保持open列表有序,需要將此步驟移除,再重新按序插入//在移除之前,需要先保持引用step->retain();//現在可以放心移除,不用擔心被釋放_spOpenSteps.erase(index);//重新按序插入this->insertInOpenSteps(step);//現在可以釋放它了,因為open列表應該持有它step->release();}}}}while(_spOpenSteps.size()>0);if(!pathFound){SimpleAudioEngine::getInstance()->playEffect("hitWall.wav");}添加以下方法:ssize_tCatSprite::getStepIndex(constcocos2d::Vector&steps,constCatSprite::ShortestPathStep*step){for(ssize_ti=0;iisEqual(step)){returni;}}return-1;}編譯運行,在地圖上進行點擊,如下圖所示:From:24.000000,0.000000To:23.000000,3.000000PATHFOUND:pos=[23;3]g=10h=0f=10pos=[22;3]g=9h=1f=10pos=[21;3]g=8h=2f=10pos=[20;3]g=7h=3f=10pos=[20;2]g=6h=4f=10pos=[20;1]g=5h=5f=10pos=[21;1]g=4h=4f=8pos=[22;1]g=3h=3f=6pos=[23;1]g=2h=2f=4pos=[24;1]g=1h=3f=4pos=[24;0]g=0h=0f=0注意該路徑是從後面建立的,所以必須從下往上看貓選擇了哪條路徑。跟隨路徑前進現在已經找到了路徑,只需讓貓跟隨前進即可。需要創建一個數組去存儲路徑,打開CatSprite.h文件,添加如下代碼:cocos2d::Vector_shortestPath;打開CatSprite.cpp文件,更改moveToward方法,注釋掉語句**boolpathFound=false**;,如下://boolpathFound=false;替換語句**pathFound=true;**為如下://pathFound=true;this->(currentStep);並且注釋掉下方的調試語句://ShortestPathStep*tmpStep=currentStep;//CCLOG("PATHFOUND:");//do//{//CCLOG("%s",tmpStep->getDescription().c_str());//tmpStep=tmpStep->getParent();//倒退/
② 老師說cocos2dx過兩年就會被淘汰,unity3D才是正道,各位怎麼看
引擎這些工具,我們是永遠跟不上別人的腳步的。
你現在需要學習的是什麼?
1、精通一門語言(從語法,到多線程,到數據操作,到網路等等方面)。
2、掌握數據結構與演算法。
3、熟悉設計模式。
4、多看他人的游戲源碼,學習下來。
學習一些以一變應萬變的,會讓你在以後面對所以問題不會感到無力。
以後你也不會問選擇哪個引擎的問題。
COCO,unity等等是標,不是本,是加分項而不是基礎分。
我見過不少沒有語言基礎的直接上手學習UNITY的,恩,是學過一段時間,但是,當我看見問他們「事件」,「委託」,「四元素」,"線程池"「計數器」等等名詞時的表情,我知道沒有基礎給他們帶來的苦果。這樣的程序員,也只是從一個地方換到另一個地方的碼農。
當你自信滿滿的以為學好了UNITY就能找到工作時候,人家筆試提上一堆的數據結構與演算法,指針,設計模式,網路,資料庫,少年,你怎麼辦?
切記,把UNITY,COCO當做工具,把任何語言當做工具。
unity,COCO只是加分項,如果你基礎分沒修滿,這個時候是考慮多修基礎分的時候,而不是考慮多修加分項的時候。-FOR A GAME PROGRAMMER
③ 如何在使用Cocos2D中實現A星(A*)尋路演算法
實現A星演算法
根據演算法,第一步是添加當前坐標到open列表。還需要三個輔助方法:
- 一個方法用來插入一個ShortestPathStep對象到適當的位置(有序的F值)
- 一個方法用來計算從一個方塊到相鄰方塊的移動數值
- 一個方法是根據"曼哈頓距離"演算法,計算方塊的H值。
ssize_t CatSprite::getStepIndex(const cocos2d::Vector<CatSprite::ShortestPathStep *> &steps, const CatSprite::ShortestPathStep *step)
{
for (ssize_t i = 0; i < steps.size(); ++i)
{
if (steps.at(i)->isEqual(step))
{
return i;
}
}
return -1;
}
④ 如何基於Cocos2d-x v3.x實現A星尋路演算法
實現A星演算法
根據演算法,第一步是添加當前坐標到open列表。還需要三個輔助方法:
- 一個方法用來插入一個ShortestPathStep對象到適當的位置(有序的F值)
- 一個方法用來計算從一個方塊到相鄰方塊的移動數值
- 一個方法是根據"曼哈頓距離"演算法,計算方塊的H值
打開CatSprite.cpp文件,添加如下方法:
void CatSprite::insertInOpenSteps(CatSprite::ShortestPathStep *step)
{
int stepFScore = step->getFScore();
ssize_t count = _spOpenSteps.size();
ssize_t i = 0;
for (; i < count; ++i)
{
if (stepFScore <= _spOpenSteps.at(i)->getFScore())
{
break;
}
}
_spOpenSteps.insert(i, step);
}
int CatSprite::computeHScoreFromCoordToCoord(const Point &fromCoord, const Point &toCoord)
{
// 這里使用曼哈頓方法,計算從當前步驟到達目標步驟,在水平和垂直方向總的步數
// 忽略了可能在路上的各種障礙
return abs(toCoord.x - fromCoord.x) + abs(toCoord.y - fromCoord.y);
}
int CatSprite::(const ShortestPathStep *fromStep, const ShortestPathStep *toStep)
{
// 因為不能斜著走,而且由於地形就是可行走和不可行走的成本都是一樣的
// 如果能夠對角移動,或者有沼澤、山丘等等,那麼它必須是不同的
return 1;
}
接下來,需要一個方法去獲取給定方塊的所有相鄰可行走方塊。因為在這個游戲中,HelloWorld管理著地圖,所以在那裡添加方法。打開HelloWorldScene.cpp文件,添加如下方法:
PointArray *HelloWorld::(const Point &tileCoord) const
{
PointArray *tmp = PointArray::create(4);
// 上
Point p(tileCoord.x, tileCoord.y - 1);
if (this->isValidTileCoord(p) && !this->isWallAtTileCoord(p))
{
tmp->addControlPoint(p);
}
// 左
p.setPoint(tileCoord.x - 1, tileCoord.y);
if (this->isValidTileCoord(p) && !this->isWallAtTileCoord(p))
{
tmp->addControlPoint(p);
}
// 下
p.setPoint(tileCoord.x, tileCoord.y + 1);
if (this->isValidTileCoord(p) && !this->isWallAtTileCoord(p))
{
tmp->addControlPoint(p);
}
// 右
p.setPoint(tileCoord.x + 1, tileCoord.y);
if (this->isValidTileCoord(p) && !this->isWallAtTileCoord(p))
{
tmp->addControlPoint(p);
}
return tmp;
}
可以繼續CatSprite.cpp中的moveToward方法了,在moveToward方法的後面,添加如下代碼:
bool pathFound = false;
_spOpenSteps.clear();
_spClosedSteps.clear();
// 首先,添加貓的方塊坐標到open列表
this->insertInOpenSteps(ShortestPathStep::createWithPosition(fromTileCoord));
do
{
// 得到最小的F值步驟
// 因為是有序列表,第一個步驟總是最小的F值
ShortestPathStep *currentStep = _spOpenSteps.at(0);
// 添加當前步驟到closed列表
_spClosedSteps.pushBack(currentStep);
// 將它從open列表裡面移除
// 需要注意的是,如果想要先從open列表裡面移除,應小心對象的內存
_spOpenSteps.erase(0);
// 如果當前步驟是目標方塊坐標,那麼就完成了
if (currentStep->getPosition() == toTileCoord)
{
pathFound = true;
ShortestPathStep *tmpStep = currentStep;
CCLOG("PATH FOUND :");
do
{
CCLOG("%s", tmpStep->getDescription().c_str());
tmpStep = tmpStep->getParent(); // 倒退
} while (tmpStep); // 直到沒有上一步
_spOpenSteps.clear();
_spClosedSteps.clear();
break;
}
// 得到當前步驟的相鄰方塊坐標
PointArray *adjSteps = _layer->(currentStep->getPosition());
for (ssize_t i = 0; i < adjSteps->count(); ++i)
{
ShortestPathStep *step = ShortestPathStep::createWithPosition(adjSteps->getControlPointAtIndex(i));
// 檢查步驟是不是已經在closed列表
if (this->getStepIndex(_spClosedSteps, step) != -1)
{
continue;
}
// 計算從當前步驟到此步驟的成本
int moveCost = this->(currentStep, step);
// 檢查此步驟是否已經在open列表
ssize_t index = this->getStepIndex(_spOpenSteps, step);
// 不在open列表,添加它
if (index == -1)
{
// 設置當前步驟作為上一步操作
step->setParent(currentStep);
// G值等同於上一步的G值 + 從上一步到這里的成本
step->setGScore(currentStep->getGScore() + moveCost);
// H值即是從此步驟到目標方塊坐標的移動量估算值
step->setHScore(this->computeHScoreFromCoordToCoord(step->getPosition(), toTileCoord));
// 按序添加到open列表
this->insertInOpenSteps(step);
}
else
{
// 獲取舊的步驟,其值已經計算過
step = _spOpenSteps.at(index);
// 檢查G值是否低於當前步驟到此步驟的值
if ((currentStep->getGScore() + moveCost) < step->getGScore())
{
// G值等同於上一步的G值 + 從上一步到這里的成本
step->setGScore(currentStep->getGScore() + moveCost);
// 因為G值改變了,F值也會跟著改變
// 所以為了保持open列表有序,需要將此步驟移除,再重新按序插入
// 在移除之前,需要先保持引用
step->retain();
// 現在可以放心移除,不用擔心被釋放
_spOpenSteps.erase(index);
// 重新按序插入
this->insertInOpenSteps(step);
// 現在可以釋放它了,因為open列表應該持有它
step->release();
}
}
}
} while (_spOpenSteps.size() > 0);
if (!pathFound)
{
SimpleAudioEngine::getInstance()->playEffect("hitWall.wav");
}
添加以下方法:
ssize_t CatSprite::getStepIndex(const cocos2d::Vector<CatSprite::ShortestPathStep *> &steps, const CatSprite::ShortestPathStep *step)
{
for (ssize_t i = 0; i < steps.size(); ++i)
{
if (steps.at(i)->isEqual(step))
{
return i;
}
}
return -1;
}
⑤ cocos2dx 什麼是a星演算法
您好,我來為您解答:
A*搜尋演算法俗稱A星演算法。這是一種在圖形平面上,有多個節點的路徑,求出最低通過成本的演算法。常用於游戲中的NPC的移動計算,或線上游戲的BOT的移動計算上。
如果我的回答沒能幫助您,請繼續追問。
⑥ cocos2dx函數
場景切換是通過導演類Director實現的,其中的相關函數如下:
runWithScene(Scene* scene)。該函數可以運行場景。只能在啟動第一個場景時候調用該函數。如果已經有一個場景運行情況下則不能調用該函數。
replaceScene(Scene* scene)。切換到下一個場景。用一個新的場景替換當前場景,當前場景被終端釋放。
pushScene(Scene* scene)。切換到下一個場景。將當前場景掛起放入到場景堆棧中,然後再切換到下一個場景中。
void popScene()。與pushScene配合使用,可以回到上一個場景。
void popToRootScene()。與pushScene配合使用,可以回到根場景。
我們需要注意replaceScene和pushScene使用的區別。replaceScene會釋放和銷毀場景,如果需要保持原來場景的狀態,replaceScene函數不適合。pushScene並不會釋放和銷毀場景,原來場景的狀態可以保持,但是場景不能放太多的場景對象。
使用replaceScene代碼如下:
auto sc = Setting::createScene();
Director::getInstance()->replaceScene(sc);
其中的Setting是下一個要切換的場景。使用pushScene代碼如下:
auto sc = Setting::createScene();
Director::getInstance()->pushScene(sc);
從Setting場景回到上一個場景使用代碼如下:
Director::getInstance()->popScene();
下面我們通過一個實例場景切換相關函數,如下圖所示有兩個場景:HelloWorld和Setting(設置)。在HelloWorld場景點擊「游戲設置」菜單可以切換到Setting場景,在Setting場景中點擊「OK」菜單可以返回到HelloWorld場景。
⑦ 做游戲開發需要學什麼
如果是打算學習2D手游開發,那麼首先需要學習C++,然後,還要了解Cocos2dx的使用。3D游戲用的比較多的開發工具是unity3d引擎。unity3d開發用的是C#(javascript也用,但用的比較少),所以先要學會C#。
游戲開發主要分為2D游戲和3D游戲,2D游戲通常是為手機開發的,一般使用的開發工具是Cocos2dx,使用的開發語言是C++。
3D游戲一般使用的游戲開發工具是Unity3d,使用的開發語言是c#或者javascript。所以,想要開發哪種游戲,就必須知道需要用到哪些開發知識。
游戲製作一般主要分為兩大塊,即程序開發、美術設計。程序開發主要包括伺服器端開發、客戶端開發。而美術設計包括場景、角色、次時代、特效、動畫等部分,要完成一個優秀的游戲作品,每一部分都需有專業人才負責。
對於大型的游戲,一般需要幾十個人的團隊製作幾年,而小游戲則可能只需一個人製作幾天。
一般的大型游戲製作都會由游戲開發公司來完成,小型的游戲則有可能由業余團隊或者個人完成,如RPG製作大師此類軟體就可以讓不懂技術的人做出電腦游戲。
⑧ cocos2dx 怎麼使用openssl的rsa演算法
為一個基於密碼學的安全開發包,OpenSSL提供的功能相當強大和全面,囊括了主要的密碼演算法、常用的密鑰和證書封裝管理功能以及SSL協議,並提供了豐富的應用程序供測試或其它目的使用。
1.對稱加密演算法
OpenSSL一共提供了8種對稱加密演算法,其中7種是分組加密演算法,僅有的一種流加密演算法是RC4。這7種分組加密演算法分別是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持電子密碼本模式(ECB)、加密分組鏈接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種常用的分組密碼加密模式。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長度是128位,其它演算法使用的則是64位。事實上,DES演算法裡面不僅僅是常用的DES演算法,還支持三個密鑰和兩個密鑰3DES演算法。
2.非對稱加密演算法
OpenSSL一共實現了4種非對稱加密演算法,包括DH演算法、RSA演算法、DSA演算法和橢圓曲線演算法(EC)。DH演算法一般用戶密鑰交換。RSA演算法既可以用於密鑰交換,也可以用於數字簽名,當然,如果你能夠忍受其緩慢的速度,那麼也可以用於數據加密。DSA演算法則一般只用於數字簽名。
⑨ cocos2dx 怎麼加密xml
把整個文件按位元組讀取加密,也可以直接讀取字元加密。使用的過程與加密過程相反就ok了。
當然你也可以對xml中的數據加密,不加密中間的標簽。
加密的演算法也有很多,比如AES,MD5,DES,3DES.............
⑩ cocos2dx中sclaeto和sclaeby的區別
cocos2dx是VB中的餘弦函數,屬於VB內置的函數,sclaeto與sclaeby的區別在於:sclaeto表示餘弦函數圖像中的波峰,sclaeby表示餘弦函數圖像中的波谷。
餘弦(餘弦函數),三角函數的一種。在Rt△ABC(直角三角形)中,∠C=90°(如圖所示),∠A的餘弦是它的鄰邊比三角形的斜邊,即cosA=b/c,也可寫為cosa=AC/AB。餘弦函數:f(x)=cosx(x∈R)。當∠A為90°時,其臨邊的長度為零,所以cosπ/2=0.
角A的鄰邊比斜邊 叫做∠A的餘弦,記作cosA(由餘弦英文cosine簡寫得來),即cosA=角A的鄰邊/斜邊(直角三角形)。記作cos=x/r。
餘弦函數的定義域是整個實數集,值域是[-1,1]。它是周期函數,其最小正周期為2π,圖像呈波浪形,在自變數為2kπ(k為整數)時,該函數有極大值1;在自變數為(2k+1)π時,該函數有極小值-1。餘弦函數是偶函數,其圖像關於y軸對稱。
三角形任何一邊的平方等於其他兩邊平方的和減去這兩邊與它們夾角的餘弦的積的兩倍。
對於任意三角形,任何一邊的平方等於其他兩邊平方的和減去這兩邊與它們夾角的餘弦的兩倍積。
在交流電場中,正弦波表示發電機轉子線圈從與磁感線平行處啟動,餘弦波表示發電機轉子線圈從與磁感線垂直處啟動。