对象C++数组

Array of object C++

本文关键字:数组 C++ 对象      更新时间:2023-10-16

在下图(字符.cpp)中,我可以知道如何创建一个可以调用来存储许多精灵的 Initialize 方法吗?我需要将Texture1SpritePosXPosY等更改为数组吗?初始化方法将在我的主.cpp中调用。对不起,如果解释不够好。这只是我的想法,但是会有更好的数组而不是这么多数组吗?

void Character::Initialize1(string image1, float PosX1, float PosY1, float CenterX1, float CenterY1)
{
    D3DXCreateTextureFromFile(Pull->GETd3ddev(), image.c_str(), &Texture1);
    D3DXCreateSprite(Pull->GETd3ddev(), &sprite1);
    RECT SpriteRect1;
    SpriteRect1.top = 0;
    SpriteRect1.bottom = 127;
    SpriteRect1.left = 0;
    SpriteRect1.right = 128;
    SpritePos1 = D3DXVECTOR2(PosX1, PosY1);
    SpriteCenter1 = D3DXVECTOR2(CenterX1, CenterY1);
}
void Character::Initialize2(string image2, float PosX2, float PosY2, float CenterX2, float CenterY2)
{
    D3DXCreateTextureFromFile(Pull->GETd3ddev(), image.c_str(), &Texture2);
    D3DXCreateSprite(Pull->GETd3ddev(), &sprite2);
    RECT SpriteRect2;
    SpriteRect2.top = 0;
    SpriteRect2.bottom = 14;
    SpriteRect2.left = 0;
    SpriteRect2.right = 14;
    SpritePos2 = D3DXVECTOR2(PosX2, PosY2);
    SpriteCenter2 = D3DXVECTOR2(CenterX2, CenterY2);
}

在精灵类中创建必要的初始化方法。然后在main()创建你的精灵并调用相应的初始化方法。如果使用大量精灵,将创建的精灵放在矢量中可能会很方便,以便减少清理代码和其他内容。

一个名为 SpriteConfig 的 Sprite 类的快速示例,该类仅包含位置参数。

#include <iostream>
#include <vector>
using namespace std;
class SpriteConfig {
public:
    SpriteConfig() {
        top = 0;
        bottom = 0;
        left = 0;
        right = 0;
    }
    void setPos(float aTop, float aBottom, float aLeft, float aRight) {
        mTop = aTop;
        mBottom = aBottom;
        mLeft = aLeft;
        mRight = aRight;
    }
private:
    // position parameters
    float mTop;
    float mBottom;
    float mLeft;
    float mRight;
};

int main()
{
    vector<SpriteConfig*> spriteConfigs;
    SpriteConfig *sprCfg;
    sprCfg = new SpriteConfig();
    sprCfg->setPos(1,1,1,1);
    spriteConfigs.push_back(sprCfg);
    sprCfg = new SpriteConfig();
    sprCfg->setPos(2,2,2,2);
    spriteConfigs.push_back(sprCfg);
    // We now have a number of Sprites
    // Add code here to do something with it.
    // ...
    for(vector<SpriteConfig*>::iterator it = spriteConfigs.begin();
        it != spriteConfigs.end();
        ++it) {
        // cleanup
        delete (*it);
        (*it) = null;
    }
    return 0;
}