[問題] 關於C++的函數指標陣列實作
開發平台(Platform): (Ex: Win10, Linux, ...)
Windows
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC++ (VS 2015社群版)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
DxLib
問題(Question):
現在是我在遊戲中要實做敵人路徑和子彈發射路徑,
但我發覺用switch的話程式碼會越做越大,
所以我現在想要照以下網頁講的範例做一個函數指標陣列。
http://dixq.net/rp/12.html
但問題來了,這是C下面的函數指標陣列。
我用同樣的方法在類別內實作時編輯器會出現錯誤。
#include <cmath>
#include "DxLib.h"
class ENEMY_SAKO {
...
void MovePattern01();
void MovePattern02();
void MovePattern03();
void MovePattern04();
void(*EnemyMovePattern[])(void) = { MovePattern01, MovePattern02,
MovePattern03, MovePattern04 };
...
}
在黃色的地方編輯器會顯示
「類型"void(ENEMY_SAKO::*)()"的值無法用來初始化類型"void(*)()"的實體。
請問這大概是什麼原因造成的呢?? 有沒有別的方式可以做到一樣的效果? 謝謝!!
註:
各MovePattern的程式碼如下:
/*Move Pattern Garage*/
void ENEMY_SAKO::MovePattern01()
{
double player_x, player_y;
(GAMEPLAY::Instance())->GetPlayerPosition(&player_x, &player_y);
move_angle = atan2(player_y - y, player_x - x);
moveSpeed = 1.5;
}
void ENEMY_SAKO::MovePattern02()
{
move_angle = M_PI_4 / 2;
moveSpeed = 1.0;
}
void ENEMY_SAKO::MovePattern03()
{
}
void ENEMY_SAKO::MovePattern04()
{
move_angle = M_PI_2;
moveSpeed = 1.2;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.49.111
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1484815318.A.0E1.html
→
01/19 17:35, , 1F
01/19 17:35, 1F
→
01/19 17:35, , 2F
01/19 17:35, 2F
→
01/19 17:36, , 3F
01/19 17:36, 3F
推
01/19 20:31, , 4F
01/19 20:31, 4F
推
01/21 01:30, , 5F
01/21 01:30, 5F
→
01/23 21:04, , 6F
01/23 21:04, 6F
推
01/24 09:45, , 7F
01/24 09:45, 7F