如何在最小的代码行中生成大量的精灵

时间:2011-06-20 08:29:08

标签: c++ stack

嘿所以我正在进行我的乒乓球比赛,并且发现每次我想要产生一个新的精灵球时我都非常繁琐,因此我最终会非常重复:

sf::Image img;
    img.Create(30,50,sf::Color(255,0,0));
    mySprite box(img, sf::Vector2f(0,300), sf::Vector2f(1,1), 0, 36, 300); //TODO: make collision work at extremely high speeds
    box.SetCenter(15,25);

    sf::Image img2;
    img2.Create(56.5,80,sf::Color(255,0,0));
    mySprite box2(img2, sf::Vector2f(800,300), sf::Vector2f(1,1), 0, 239, 300);
    box2.SetCenter(25,40);

    sf::Image img3;
    img3.Create(56.5,80,sf::Color(255,0,10));
    mySprite box3(img3, sf::Vector2f(500,300), sf::Vector2f(1,1), 0, 135, 400);
    box3.SetCenter(25,40);

    sf::Image img4;
    img4.Create(56.5,80,sf::Color(255,166,90));
    mySprite box4(img4, sf::Vector2f(300,500), sf::Vector2f(1,1), 0, 10, 100);
    box4.SetCenter(25,40);

创建一个Spawn()函数不起作用,因为我必须为每个新的sprite(因此box,box1,box2等)的sprite实例化创建一个新名称。我如何制作一个函数,以某种方式随机形成另一个我想要产生的球的名称?

1 个答案:

答案 0 :(得分:2)

您无法随机生成变量名称。你会如何在你的代码中引用它们?

为什么不使用vector来存储图像和框,然后使用循环来生成精灵:

std::vector<mySprite> boxes;

std::vector<Parameters> parameters;

for(std::vector<Parameters>::iterator it = parameters.begin(); 
    it != parameters.end(); ++it) {
    sf::Image img;
    img.Create(it->param1, it->param2, it->color);
    mySprite box(img, it->vector1, it->vector2, it->param3, it->param4, 
                 it->param5);
    box.SetCenter(it->center);
    boxes.push_back(box);
}

这假设您有一个数据结构Parameters,它可以容纳您需要的所有参数(名称比我示例中的名称更好)。然后循环遍历所有参数集,并为每个参数集创建精灵。