首页 > 解决方案 > 如何使用 for 循环 (DirectX) 显示某种效果

问题描述

我有一个在 DirectX 9 上制作游戏的学校项目。我们正在一个团队中制作一个项目,他们给了我一个任务来揭示使用 for 循环的某种效果。

这是效果列表

EFK_CHAR efk_filename[][MAX_PATH] =
    {
    u"asset/texture/エフェクト案/Dunk.efk",                   //0
     u"asset/texture/エフェクト案/BAD.efk",                   //1
     u"asset/texture/エフェクト案/block.efk",                 //2
    u"asset/texture/エフェクト案/combinationSelect.efk",      //3
     u"asset/texture/エフェクト案/pass.efk",                  //4
      u"asset/texture/エフェクト案/Perfect.efk",              //5
      u"asset/texture/エフェクト案/SonicBoom.efk",            //6
       u"asset/texture/エフェクト案/wind.efk",                //7
    }; 

这段代码位于 int Effect_Init 中。它揭示了效果 Dunk.efk

effect = Effekseer::Effect::Create(manager, efk_filename[0]);

老师说我必须创建一个包含 EFK_CHAR efk_filename 索引的数组并创建一个 for 循环。所以我可以从 main.cpp 中的所有这些效果中调用某种效果。例如,如果我想在按下 P 按钮时显示索引为 7 的效果。

我真的不明白,所以我写道:

EFK_CHAR efk_filename[][MAX_PATH] =
{
u"asset/texture/エフェクト案/Dunk.efk",                   //0
 u"asset/texture/エフェクト案/BAD.efk",                   //1
 u"asset/texture/エフェクト案/block.efk",                 //2
u"asset/texture/エフェクト案/combinationSelect.efk",      //3
 u"asset/texture/エフェクト案/pass.efk",                  //4
  u"asset/texture/エフェクト案/Perfect.efk",              //5
  u"asset/texture/エフェクト案/SonicBoom.efk",            //6
   u"asset/texture/エフェクト案/wind.efk",                //7
}; 

EFK_CHAR Effect_Count[8] = { 0,1,2,3,4,5,6,7 }; //Does this array contain the indexes of EFK_CHAR efk_filename[][MAX_PATH]?

而且我不确定 for 循环。我知道在循环内我必须写effect = Effekseer::Effect::Create(manager, efk_filename[i]);. 我可以写类似的东西for(int i = 0; i > EFK_CHAR, i ++)吗?

标签: c++directxdirectx-9

解决方案


这主要取决于您的老师的想法,这很难猜测,但这里有一些可能的选择。

如果您只想遍历整个文件名数组,只需执行以下操作:

for (size_t i = 0; i < MAX_PATH; i++)
{
  auto effect = Effekseer::Effect::Create(manager, efk_filename[i]);
  // do something with that effect, maybe to check if the button was pressed
  // or something like that?
  // if (button_pressed)
  // {
  //   applyEffect(effect);
  // }
}

另一种可能性是您只需要考虑效果列表中的某些特定效果,这可以通过索引列表来完成(假设您只想迭代效果 1、3 和 5):

#define NUM_EFFECTS 3  // or constexpr NUM_EFFECTS = 3; if you prefer
size_t idx_array[NUM_EFFECTS] = {1, 3, 5};

for (size_t i = 0; i < NUM_EFFECTS; i++)
{
  auto effect = Effekseer::Effect::Create(manager, efk_filename[idx_array[i]]);
  // do something with the effect
}

不幸的是,我不确定如何理解“当我按下 P 按钮时显示索引 7 的效果”。也许它是关于创建一个映射键 <--> 索引,比如{'P', 7}?如果是,您可以使用std::map<char, size_t> key_map;它并像这样选择您的效果efk_filename[key_map['P']]


推荐阅读