2014-12-05 54 views
0

在下面的图像(Character.cpp)中,我是否可以知道如何创建一个可以调用以存储多个精灵的Initialize方法?我需要将Texture1SpritePosX,PosY等改为数组吗? 初始化方法将在我的MAIN.cpp中调用。对不起,如果解释不够好。这只是我的想法,但会有更好的,而不是有这么多的数组?对象数组C++

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对不起。编辑它 – Student 2014-12-05 21:23:58

+0

你可以有包含你的变量的结构数组 – kiwixz 2014-12-05 23:35:16

回答

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 – Student 2014-12-06 07:37:55

+0

嘿@吉奥..但我该怎么区分和调用某个精灵? – Student 2014-12-06 07:44:50

+1

如果你的精灵在一个矢量内,就像上面的例子。然后有各种方法从矢量中获取你的精灵。例如。 'spriteConfigs.at(IDX)'。如果你想要更多的不同,你可以考虑为你的索引创建一个定义。例如。 '#define CIRCLE 0',然后你把你的圆形精灵放在矢量的索引0处。现在你可以使用'spriteConfigs.at(CIRCLE)'来获得你的精灵。 – Gio 2014-12-06 12:19:32