【游戏引擎Easy2D】三分钟学会游戏的控制移动,键盘识别详解
?【游戲引擎Easy2D】三分鐘學會游戲的控制移動,鍵盤識別詳細
?
- 🧛?♂?iecne個人主頁:點贊關注收藏評論支持哦~
- 💡每天關注iecne的作品,一起進步
- ?一起學習內容專欄:C++保姆級入門教程??C++每日一題??C++游戲設計教程
- 👉本文收錄專欄:C++游戲引擎教程與實戰
- 🐳希望大家多多支持🥰一起進步呀!
目錄
?【游戲引擎Easy2D】三分鐘學會游戲的控制移動,鍵盤識別詳細
?前言
任務描述
Easy2D導讀
一.準備?
1.準備圖片
2.設置窗口
二.創建 Man 類
1.man類
2.與Sprite聯通
3.添加場景
4.居中顯示
三.實現移動?
1.onUpdate
2.KeyCode::up 、Input::isDown
3.提取坐標
四.完整代碼
1.不可同時移動CODE
2.可同時移動CODE
精靈圖片這里不提供,各位自己找找哈
?關于命名
總結
?
往后看免費提供安裝包
?前言
哈嘍大家好,我是iecne,本期為大家帶來的是CPP/C++?【游戲引擎Easy2D】三分鐘學會游戲的控制移動,鍵盤識別詳細,包教包會,快來看看吧!
引擎支持 Visual Studio 2013 及以上版本,如果你使用的是較低版本的 VS,那么你需要考慮一下更新你的編譯器了
??
任務描述
如何根據據Easy2D引擎中的提取鍵盤信息來控制精靈,也是圖像移動,來傳給 Sprite
本實踐旨在通過一個小程序的案列,讓大家理解和掌握如何使用Easy2D引擎來寫一個游戲(程序)代碼的詳解
Easy2D導讀
對于編程而言,初學者最需要的不是技能,而是成就感。
如果你喜歡用 C/C++ 編寫自己的小游戲,那么 Easy2D 將是個不錯的選擇,它大大簡化了游戲制作過程,可以幫助你快速開發 Windows 上的 2D 小游戲。
它的特點和它的名字一樣,Everything is Easy!
?安裝 Easy2D
使用簡易安裝器
運行里面的 install.bat 文件進行安裝。
?點擊此鏈接進行下載(純免費)?
下載點擊這里,記得四連哦
安裝程序會檢測您已經安裝的?Visual Studio?版本,并根據您的選擇將對應庫文件解壓至 VS 庫目錄下。
Easy2D 不支持 VS2012 及以下的版本(包括 VC6.0),如果你使用的是低版本的 VS,那你需要嘗試一下新版的?Visual Studio?了。
安裝環境:
操作系統:Windows 7 及以上操作系統。
編譯環境:Visual Studio 2013 (x86 & x64) 及以上版本。
一.準備?
關注點贊收藏評論支持,現在開始我們的旅途
1.準備圖片
學會了 Easy2D 的基本操作之后,我們來制作一個簡單的小程序,按上下左右鍵移動畫面中的小人。
先準備一張人物的圖片,將它拷貝到工程目錄下,重命名為 man.png。
2.設置窗口
?在 VS 中寫好我們新手入門里學習的基本代碼,運行后顯示一個 640*480 大小的窗口。
?
這基本上就是一個固定的框架,基本不需要改變?
#include <easy2d/easy2d.h>using namespace easy2d;int main() {if (Game::init()){// 設置窗口標題和窗口大小Window::setTitle(L"Moving Man");Window::setSize(640, 480);/* 設計游戲內容 */Game::start();}Game::destroy();return 0; }加上我們萬語言之王之一的——Cpp 基本頭文件以及命名
上代碼:
#include <easy2d/easy2d.h> #include <iostream>using namespace std; using namespace easy2d;int main() {if (Game::init()){// 設置窗口標題和窗口大小Window::setTitle(L"Moving Man");Window::setSize(640, 480);/* 設計游戲內容 */Game::start();}Game::destroy();return 0; }二.創建 Man 類
1.man類
在代碼第 2 行插入一個新的類,取名為 Man,繼承 Sprite 類。
class Man : public Sprite { public:Man() {} };2.與Sprite聯通
在 Man 的構造函數中調用父類的構造函數,將圖片的文件名 “man.png” 傳給 Sprite。
class Man : public Sprite { public:Man(){// 加載圖片this->open(L"man.png");} };3.添加場景
在設計游戲內容的部分,創建一個場景和一個 Man 對象,然后將 Man 的對象添加到場景中。
添加后的完整代碼如下所示
#include <easy2d/easy2d.h> #include <iostream>using namespace std; using namespace easy2d;class Man : public Sprite { public:Man(){// 加載圖片this->open(L"man.png");} };int main() {if (Game::init()){// 設置窗口標題和窗口大小Window::setTitle(L"Moving Man");Window::setSize(640, 480);// 創建場景auto scene = gcnew Scene;// 進入該場景SceneManager::enter(scene);// 創建一個 Man 對象auto hero = gcnew Man;// 將 Man 添加到場景中scene->addChild(hero);Game::start();}Game::destroy();return 0; }運行后,程序將顯示一個人物圖片。
4.居中顯示
我們用新手入門學過的方法,把居中的代碼寫在 Man 的構造函數中,讓 Man 在屏幕上居中顯示。
class Man : public Sprite { public:Man(){// 加載圖片this->open(L"man.png");// 居中顯示在屏幕上this->setAnchor(0.5f, 0.5f);this->setPos(Window::getWidth() / 2, Window::getHeight() / 2);} };運行后的效果如下圖所示
三.實現移動?
接下來又新的知識
1.onUpdate
給 Man 類添加一個名稱為?onUpdate?的函數,返回值類型為 void,參數為空
class Man : public Sprite { public:Man(){// 加載圖片this->open(L"man.png");// 居中顯示在屏幕上this->setAnchor(0.5f, 0.5f);this->setPos(Window::getWidth() / 2, Window::getHeight() / 2);}void onUpdate(){// onUpdate 函數} };2.KeyCode::up 、Input::isDown
onUpdate 是一個特殊的函數,它在每一幀畫面刷新前被 Easy2D 自動調用,所以這個函數在一秒鐘里會被調用 60 次左右。我們可以在這個函數里判斷有沒有按鍵按下。
Input?類用來獲取用戶的輸入,Input::isDown?函數用來判斷一個鍵是否正被按下,這個函數需要一個 int 類型的參數,這個參數代表鍵盤上的一個鍵。
KeyCode?類枚舉了常用按鍵的鍵值,例如?KeyCode::Up?代表上鍵。你可以用下面的代碼判斷上鍵是否被按下:
void onUpdate() {if (Input::isDown(KeyCode::Up)){// 上鍵被按下}else{// 上鍵沒被按下} }3.提取坐標
上鍵被按下時,我們先獲取 Man 當前的 Y 坐標,然后重新設置它的 Y 坐標為當前值減 2,這樣就實現了按上鍵向上移動的功能。
void onUpdate() {if (Input::isDown(KeyCode::Up)){// 獲取當前 Y 坐標float y = this->getPosY();// 重新設置它的坐標this->setPosY(y - 2);} }Node 類的?Node::movePos?函數可以直接移動節點,所以上面的代碼可以簡寫成
void onUpdate() {if (Input::isDown(KeyCode::Up)){// Man 的 Y 坐標減少 2this->movePosY(-2);} }同理,可以將其他三個按鍵的判斷也加入到 onUpdate 函數中
void onUpdate() {if (Input::isDown(KeyCode::Up)){// Man 的 Y 坐標減少 2this->movePosY(-2);}if (Input::isDown(KeyCode::Down)){// Man 的 Y 坐標增加 2this->movePosY(2);}if (Input::isDown(KeyCode::Left)){// Man 的 X 坐標減少 2this->movePosX(-2);}if (Input::isDown(KeyCode::Right)){// Man 的 X 坐標增加 2this->movePosX(2);} }一般的游戲中,上鍵和下鍵,左鍵和右鍵,是不能同時生效的,否則的話同時按住上鍵和下鍵人物就不動了,所以我們修改代碼如下:
void onUpdate() {if (Input::isDown(KeyCode::Up)){// Man 的 Y 坐標減少 2this->movePosY(-2);}else if (Input::isDown(KeyCode::Down)){// Man 的 Y 坐標增加 2this->movePosY(2);}if (Input::isDown(KeyCode::Left)){// Man 的 X 坐標減少 2this->movePosX(-2);}else if (Input::isDown(KeyCode::Right)){// Man 的 X 坐標增加 2this->movePosX(2);} }二選一哈
運行游戲,一個按上下左右移動的小人就完成了!
四.完整代碼
以下代碼二選一
1.不可同時移動CODE
#include <easy2d/easy2d.h>using namespace easy2d;class Man : public Sprite { public:Man(){// 加載圖片this->open(L"man.png");// 居中顯示在屏幕上this->setAnchor(0.5f, 0.5f);this->setPos(Window::getWidth() / 2, Window::getHeight() / 2);}void onUpdate(){if (Input::isDown(KeyCode::Up)){// Man 的 Y 坐標減少 2this->movePosY(-2);}else if (Input::isDown(KeyCode::Down)){// Man 的 Y 坐標增加 2this->movePosY(2);}if (Input::isDown(KeyCode::Left)){// Man 的 X 坐標減少 2this->movePosX(-2);}else if (Input::isDown(KeyCode::Right)){// Man 的 X 坐標增加 2this->movePosX(2);}} };int main() {if (Game::init()){// 設置窗口標題和窗口大小Window::setTitle(L"Moving Man");Window::setSize(640, 480);// 創建場景auto scene = gcnew Scene;// 進入該場景SceneManager::enter(scene);// 創建一個 Man 對象auto hero = gcnew Man;// 將 Man 添加到場景中scene->addChild(hero);Game::start();}Game::destroy();return 0; }2.可同時移動CODE
#include <easy2d/easy2d.h>using namespace easy2d;class Man : public Sprite { public:Man(){// 加載圖片this->open(L"man.png");// 居中顯示在屏幕上this->setAnchor(0.5f, 0.5f);this->setPos(Window::getWidth() / 2, Window::getHeight() / 2);}void onUpdate(){if (Input::isDown(KeyCode::Up)){// Man 的 Y 坐標減少 2this->movePosY(-2);}if (Input::isDown(KeyCode::Down)){// Man 的 Y 坐標增加 2this->movePosY(2);}if (Input::isDown(KeyCode::Left)){// Man 的 X 坐標減少 2this->movePosX(-2);}if (Input::isDown(KeyCode::Right)){// Man 的 X 坐標增加 2this->movePosX(2);}} };int main() {if (Game::init()){// 設置窗口標題和窗口大小Window::setTitle(L"Moving Man");Window::setSize(640, 480);// 創建場景auto scene = gcnew Scene;// 進入該場景SceneManager::enter(scene);// 創建一個 Man 對象auto hero = gcnew Man;// 將 Man 添加到場景中scene->addChild(hero);Game::start();}Game::destroy();return 0; }記得加上精靈(圖片)哦!
精靈圖片這里不提供,各位自己找找哈
?關于命名
Easy2D 按照以下規律命名函數:
- 小駝峰式命名法則,第一個單詞小寫,后面的單詞首字母大寫,如Window::setTitle
- 所有函數均按照動詞+名語形式命名,如Logger::showConsole
- 獲取對象的屬性值:get+屬性名,如Node::getWidth
- 修改對象的屬性值:set+屬性名,如Node::setPos
- 獲取對象的狀態(bool值):is+狀態名,如Node::isVisiable
總結
?本節課主要是講解了Easy2D引擎實現的教程,至此該課示例的思想博主已經真真切切徹徹底底分享完了,相信大家對這個邏輯有了一定的理解,大家可以自己動手敲敲代碼,感受一下,包教包會。若有任何侵權和不妥之處,請私信于我,定積極配合處理,看到必回!!!
帥的人已然點贊收藏關注,而丑的人還在猶豫,被猶豫了,快三連吧!
原創不易,還希望各位大佬支持一下
點贊,你的認可是我創作的動力!
收藏,你的青睞是我努力的方向!
評論,你的意見是我進步的財富!
???感謝每一個觀看本篇文章的朋友,更多精彩敬請期待:iecne的博客_CSDN博客-C++保姆級入門教程領域博主
文章存在借鑒,如有侵權請聯系修改刪除!
?
?
?
總結
以上是生活随笔為你收集整理的【游戏引擎Easy2D】三分钟学会游戏的控制移动,键盘识别详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 办公技巧:Excel日常高频使用技巧,赶
- 下一篇: win7系统怎么拷贝到u盘_Win7系统