[英]How do I make the size of a vector of pointers in c++?
I am trying to make a vector of Enemy pointers. 我正在尝试使敌人指针成为矢量。 Each pointer should generate and draw an enemy. 每个指针都应生成并绘制一个敌人。 I want to increase the number of enemies that will appear on screen using input. 我想增加使用输入会出现在屏幕上的敌人数量。 I want to start with five enemies, and increase by one enemy each time the 'S' key is pressed. 我想从五个敌人开始,每按一次“ S”键增加一个敌人。 I am having a problem where I can not allocate the number of enemies that I want. 我有一个问题,我无法分配我想要的敌人数量。 All other classes work as intended. 所有其他类均按预期工作。 Here is the code: 这是代码:
GameSample.h GameSample.h
#ifndef __GameSample_H__
#define __GameSample_H__
#include <vector>
//#pragma warning(disable : 4200)
class ShaderProgram;
class Mesh;
class GameObject;
class Player;
const int StartEnemies = 5;
class GameSample : public GameCore
{
//int NumEnemies;
protected:
ShaderProgram* m_pShader;
Mesh* m_PlayerMesh;
Mesh* m_EnemyMesh;
Mesh* m_TargetMesh;
GameObject* m_Player;
//GameObject* m_Enemy[StartEnemies];
GameObject* m_Target;
std::vector<GameObject*> m_Enemy;
int NumEnemies;
public:
GameSample(Framework* pFramework);
virtual ~GameSample();
virtual void OnSurfaceChanged(int width, int height);
virtual void LoadContent();
virtual void Update(float deltatime);
virtual void Draw();
virtual void OnEvent(Events& event);
};
#endif //__GameSample_H__
GameSample.cpp GameSample.cpp
#include "GamePCH.h"
GameSample::GameSample(Framework* pFramework)
: GameCore( pFramework )
{
m_pShader = 0;
m_PlayerMesh = 0;
m_EnemyMesh = 0;
m_TargetMesh = 0;
m_Player = 0;
m_Target = 0;
NumEnemies = StartEnemies;
for (int i = 0; i < NumEnemies; i++)
{
m_Enemy.push_back(i); //Error "'void std::vector<GameObject*,std::allocator<_Ty>>::push_back(_Ty &&)':cannot convert argument 1 from 'int' to 'GameObject*const &'"
m_Enemy[i] = 0;
}
srand(time_t(NULL));
}
GameSample::~GameSample()
{
// Release the VBO.
//glDeleteBuffers( 1, &m_VBO );
delete m_pShader;
delete m_PlayerMesh;
delete m_EnemyMesh;
delete m_TargetMesh;
delete m_Player;
delete m_Target;
for (int i = 0; i < NumEnemies; i++)
{
delete m_Enemy[i];
}
}
void GameSample::OnSurfaceChanged(int width, int height)
{
// Set OpenGL to draw to the entire window.
glViewport( 0, 0, width, height );
}
void GameSample::LoadContent()
{
// Turn on depth buffer testing.
glEnable( GL_DEPTH_TEST );
glDepthFunc( GL_LESS );
// Turn on alpha blending.
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
// Create our shaders.
m_pShader = new ShaderProgram( "Data/Shaders/color.vert", "Data/Shaders/color.frag" );
m_PlayerMesh = new Mesh();
m_PlayerMesh->SetShader(m_pShader);
m_PlayerMesh->GeneratePlayer();
m_EnemyMesh = new Mesh();
m_EnemyMesh->SetShader(m_pShader);
m_EnemyMesh->GenerateEnemy();
m_TargetMesh = new Mesh();
m_TargetMesh->SetShader(m_pShader);
m_TargetMesh->GenerateTarget();
m_Player = new Player(this, m_PlayerMesh);
for (int i = 0; i < NumEnemies; i++)
{
m_Enemy[i] = new Enemy(this, m_EnemyMesh);
}
m_Target = new Target(this, m_TargetMesh);
// Check for errors.
CheckForGLErrors();
}
void GameSample::Update(float deltatime)
{
if( m_pFramework->IsKeyDown( '1' ) )
{
m_pFramework->SetWindowSize( 600, 600 );
}
m_Player->Update(deltatime);
if (m_pFramework->IsKeyDown('S'))
{
NumEnemies++;
for (int i = 0; i < NumEnemies; i++)
{
m_Enemy[i]->Update(deltatime);
}
}
}
void GameSample::Draw()
{
// Setup the values we will clear to, then actually clear the color and depth buffers.
glClearColor( 0.0f, 0.0f, 0.4f, 0.0f ); // (Red, Green, Blue, Alpha) - Dark blue
glClearDepth( 1 ); // 1 is maximum depth
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
m_Player->Draw();
for (int i = 0; i < NumEnemies; i++)
{
m_Enemy[i]->Draw();
}
m_Target->Draw();
// Check for errors.
CheckForGLErrors();
}
Since m_Enemy
is a vector of pointers ( std::vector<GameObject*>
), you should do m_Enemy.push_back(nullptr);
由于m_Enemy
是指针的向量( std::vector<GameObject*>
),因此您应该执行m_Enemy.push_back(nullptr);
in the constructor. 在构造函数中。 In the Update
function, increment NumEnemies
does not add another element to m_Enemy
. 在Update
函数中,递增NumEnemies
不会向m_Enemy
添加另一个元素。 You need to push another element to m_Enemy, or m_Enemy.push_back(new GameObject(...));
您需要将另一个元素推送到m_Enemy或m_Enemy.push_back(new GameObject(...));
after the line NumEnemies++;
在NumEnemies++;
行NumEnemies++;
. 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.