ฉันเป็นผู้เริ่มต้นทั้งในการพัฒนาเกมและการเขียนโปรแกรม
ฉันพยายามเรียนรู้หลักการบางอย่างในการสร้างเอ็นจิ้นเกม
ฉันต้องการสร้างเกมง่ายๆฉันอยู่ในจุดที่ฉันพยายามนำเอ็นจิ้นเกมมาใช้
ดังนั้นฉันคิดว่าเอ็นจิ้นเกมของฉันควรควบคุมสิ่งนี้:
- Moving the objects in the scene
- Checking the collisions
- Adjusting movements based on collisions
- Passing the polygons to the rendering engine
ฉันออกแบบวัตถุของฉันเช่นนี้:
class GlObject{
private:
idEnum ObjId;
//other identifiers
public:
void move_obj(); //the movements are the same for all the objects (nextpos = pos + vel)
void rotate_obj(); //rotations are the same for every objects too
virtual Polygon generate_mesh() = 0; // the polygons are different
}
และฉันมีวัตถุต่าง ๆ 4 อย่างในเกมของฉัน: เครื่องบิน, สิ่งกีดขวาง, ผู้เล่น, สัญลักษณ์แสดงหัวข้อย่อยและฉันได้ออกแบบสิ่งเหล่านี้:
class Player : public GlObject{
private:
std::string name;
public:
Player();
Bullet fire() const; //this method is unique to the class player
void generate_mesh();
}
ตอนนี้ในเอ็นจิ้นเกมฉันต้องการมีรายการวัตถุทั่วไปที่ฉันสามารถตรวจสอบตัวอย่างสำหรับการชนกันย้ายวัตถุและอื่น ๆ แต่ฉันต้องการด้วยเช่นกันว่าเอ็นจิ้นเกมจะใช้คำสั่งผู้ใช้ในการควบคุมเครื่องเล่น ...
นี่เป็นความคิดที่ดีหรือไม่?
class GameEngine{
private:
std::vector<GlObject*> objects; //an array containg all the object present
Player* hPlayer; //hPlayer is to be read as human player, and is a pointer to hold the reference to an object inside the array
public:
GameEngine();
//other stuff
}
ตัวสร้าง GameEngine จะเป็นเช่นนี้:
GameEngine::GameEngine(){
hPlayer = new Player;
objects.push_back(hPlayer);
}
ความจริงที่ว่าฉันกำลังใช้ตัวชี้เป็นเพราะฉันจำเป็นต้องเรียกfire()
ที่ไม่ซ้ำกับวัตถุ Player
ดังนั้นคำถามของฉันคือ: มันเป็นความคิดที่ดี? การใช้มรดกของฉันผิดที่นี่หรือไม่?