Массив объекта C ++

0

На изображении ниже (Character.cpp), могу ли я узнать, как создать только один метод Initialize, который можно вызвать для хранения многих спрайтов? Нужно ли мне менять параметры Texture1, Sprite, PosX, PosY и т.д.? Метод initialize будет вызван в моем MAIN.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);
}
  • 0
    @Biffen Извините. Отредактировал это
  • 0
    Вы можете иметь массив структур, содержащих ваши переменные
Теги:
class
arrays
oop
directx

1 ответ

1
Лучший ответ

Создайте необходимый метод инициализации в вашем классе спрайтов. Затем в main() создайте спрайты и вызовите соответствующие методы инициализации. Если использовать множество спрайтов, вероятно, будет удобно помещать созданные векторы внутри вектора, чтобы иметь меньше кода для очистки и, возможно, других вещей.

Быстрый пример для класса Sprite под названием SpriteConfig, который содержит только параметры позиции.

#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;
}
  • 0
    Большое спасибо за удивительное руководство: DD
  • 0
    Привет, @ Джио .. Но как мне отличить и назвать определенного спрайта?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню