【问题标题】:Array of object C++对象数组 C++
【发布时间】:2014-12-05 21:21:16
【问题描述】:

在下图中(Character.cpp),我可以知道如何只创建一个可以调用来存储多个精灵的 Initialize 方法吗?我是否需要将Texture1SpritePosXPosY 等更改为数组? 初始化方法将在我的 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);
}

【问题讨论】:

  • @Biffen 对不起。编辑它
  • 您可以拥有包含变量的结构数组

标签: c++ arrays class oop directx


【解决方案1】:

在你的精灵类中创建必要的初始化方法。然后在main() 创建你的精灵并调用适当的初始化方法。如果使用大量 Sprite,将创建的 Sprite 放入向量中可能会很方便,这样可以减少用于清理和其他事情的代码。

一个名为 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;
}

【讨论】:

  • 非常感谢您的精彩指南:DD
  • 嘿@Gio..但是我要如何区分并调用某个精灵?
  • 如果您的精灵在矢量内,如上例所示。然后有多种方法可以从向量中获取您的精灵。例如。 spriteConfigs.at(idx)。如果您想要更多差异化,您可以考虑为您的索引创建一个定义。例如。 #define CIRCLE 0,然后将圆形精灵放在向量的索引 0 处。现在您可以使用spriteConfigs.at(CIRCLE) 获取您的精灵。
  • 请注意,这可能不是最漂亮的解决方案。另一种方法是使用Map 而不是向量。这是一个关联容器,因此可以更好地区分各种精灵。
猜你喜欢
  • 1970-01-01
  • 2022-12-25
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
相关资源
最近更新 更多