c++ - 让 if 语句在 for 循环中工作(使用动态数组和指针)

标签 c++ arrays pointers if-statement for-loop

我想使用 C++ 运行一段代码来绘制两个坦克(表示为正方形)。这项工作要求我们使用 for 循环来做到这一点。我设法让它工作,但现在坦克是相同的颜色。我想使用 if 语句来检查它是哪个坦克并给它正确的颜色。我目前将两个坦克放在一个名为 tankpointer 的动态数组中。所以我的非工作代码如下所示:

void draw(game *mygame)
{
    for (int i = 0; i < 2; i++)
    {
        glEnableClientState(GL_VERTEX_ARRAY);
        glEnableClientState(GL_COLOR_ARRAY);
        glMatrixMode(GL_MODELVIEW);

        // draw player 1...
        glVertexPointer(3, GL_FLOAT, 0, tankVertices);
        glColorPointer(4, GL_FLOAT, 0, tank1VertexColors);
        glLoadIdentity();
        // replace the 0 and 1 of the dynamic array with i to get it to repeat:
        glTranslatef(mygame->tankpointer[i].tankx, mygame->tankpointer[i].tanky, -5.0);
        glRotatef(mygame->tankpointer[i].rotation, 0.0, 0.0, 1.0);
        // 6 instead of the previous 3 to make a square:
        glDrawArrays(GL_TRIANGLES, 0, 6);

        if (tankpointer[0])
        {
            float tank1VertexColors[24] = 
            {
                0.4f, 0.4f, 0.4f, 1.0f,
                0.4f, 0.4f, 0.4f, 1.0f,
                0.4f, 0.4f, 0.4f, 1.0f,
                0.4f, 0.4f, 0.4f, 1.0f,
                0.4f, 0.4f, 0.4f, 1.0f,
                0.4f, 0.4f, 0.4f, 1.0f
            };
        }
        else
        {
            float tank2VertexColors[24] = 
            {
                0.8f, 0.8f, 0.8f, 1.0f,
                0.8f, 0.8f, 0.8f, 1.0f,
                0.8f, 0.8f, 0.8f, 1.0f,
                0.8f, 0.8f, 0.8f, 1.0f,
                0.8f, 0.8f, 0.8f, 1.0f,
                0.8f, 0.8f, 0.8f, 1.0f
            };
        }
    };

它说 if (tankpointer[0]) 未定义。任何帮助/建议都会有用。

最佳答案

编译器正在提示,因为您在 tankpointer[0] 之前错过了 mygame->但是,把它放进去不会做你想要的......

两个指针都应该有效,即它们都指向坦克。任何非 NULL 指针都将在 if 语句内计算为 true,因此 if (mygame->tankpointer[0]) 将始终为 true (除非 tankpointer[0] 实际上是 NULL;那么您的循环将因其他原因而无法工作)。

你想要的是比较循环索引:

if (i == 0) {
  // code to set colour for tank 0
} else {
 // code to set colour for tank 1
}

更好的是,对于扩展到两个储 jar 之外的解决方案,定义储 jar 索引和颜色之间的映射。我将把它留作练习,以了解您如何做到这一点。

注意:在您提供的代码中,您正在初始化 if 语句分支范围内的数组。该数组不会存在于每个分支之外,因此您也需要在那里设置颜色属性,或者将声明移到外面,并在条件分支内分配元素。

关于c++ - 让 if 语句在 for 循环中工作(使用动态数组和指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34092600/

相关文章:

c++ - 为什么这种类型的删除实现(简化提升 :any) gives segmentation fault?

c# - 在 JSON 数组中查找重复对象

c++ - 指针)是否有可能已经占据(ptr + 1)?

c++ - 如何转发声明内部类?

c++ - ifstream 的 operator>> 来检测行尾?

c++ - 我不应该在线程过程中使用 _endthreadex() 来展开堆栈吗?

c - C 中的 3 维数组在 for 循环后更改值

c - 链表指针打印内存泄漏

c - 分配数据结构并将信息传递到数据结构中

C++ 改变 const char 中的值