c# - 无法在脚本生成的多个位置上实例化一副纸牌
问题描述
我有一个脚本,我必须在脚本生成的 100 个不同位置上实例化 100 张卡片,即 10 行和 10 列。因此,当我运行 play 时,它会在 100 个不同的位置中的每个位置生成 100 张不同的牌,这意味着它会生成 10,000 张牌。我需要做的就是在 100 个位置上生成 100 张卡片。我是编程新手,所以我相信这对你们所有的专业人士来说都是愚蠢的,但任何帮助都是好的,我的脚本如下:
'''
私人无效生成网格()
{
{
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
float posX = col * tilesize;
float posY = row * tilesize;
{
float xoffset = -4f;
float yoffset = 4f;
transform.position = new Vector2 (posX + xoffset, posY + yoffset);
foreach (string card in deck) {
GameObject newCard = (GameObject)Instantiate (cardPrefab, transform.position, (Quaternion.identity));
//GameObject newCard = (GameObject)Instantiate (cardPrefab);
newCard.name = card;
}
}
}
}
}
解决方案
想想看。你有 10 行,10 列,100 张卡片。您有 3 个嵌套的 for 循环,因此您最终调用GameObject newCard = (GameObject)Instantiate (cardPrefab, transform.position, (Quaternion.identity));
10*10*100 = 10 000 次。
实际上,您不需要遍历卡片。您需要遍历行和列(您已经在执行此操作),但不是遍历卡片,而是只想将一张卡片添加到该位置,每次选择下一张卡片。所以你需要有一个计数器变量来计算接下来要选择哪张卡。
int counter = 0;
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
float posX = col * tilesize;
float posY = row * tilesize;
{
float xoffset = -4f;
float yoffset = 4f;
transform.position = new Vector2 (posX + xoffset, posY + yoffset);
GameObject newCard = (GameObject)Instantiate (cardPrefab, transform.position, (Quaternion.identity));
// Select card from deck
newCard.name = deck[counter];
// Increase counter by 1
counter++;
}
}
}
现在,如果您想成为一名出色的程序员,您可能会意识到前两个 for 循环可以充当您的计数器,因此您不需要该变量。本质上,您有 2D 网格(行 x 列),您需要将其映射到 1D 字符串数组。这是另一篇文章,解释了如何解决
您现在可以将我上面的代码重写为:
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
float posX = col * tilesize;
float posY = row * tilesize;
{
float xoffset = -4f;
float yoffset = 4f;
transform.position = new Vector2 (posX + xoffset, posY + yoffset);
GameObject newCard = (GameObject)Instantiate (cardPrefab, transform.position, (Quaternion.identity));
// Select card from deck
// Multiplied by "10" because that's width of your row
newCard.name = deck[row * 10 + col];
}
}
}
推荐阅读
- javascript - 无法实现水平滚动条插件
- reactjs - 将 JS 反应到 Eclipse IDE
- c++ - 函数可以访问传递给 main() 的参数吗?
- c# - 对象在当前上下文中不可用
- javascript - 配置 popper.js 方向
- python - 通过使用正则表达式拆分键,从 dict python 制作 2D dict
- javascript - 如何在 Shiny 的条件面板中使用 str_detect?
- c# - 检索仅与当前登录用户相关的记录
- haskell - 有什么方法可以控制 GHC 如何派生“Eq”实例?
- javascript - Featherjs 服务器端上传