维基百科将"呼叫超级"归类为反模式,我真的不明白为什么.该模式经常用于Objective-C/cocoa; 例如init/dealloc,drawrect,awakefromnib都需要你调用super.我在这里误解了这个概念吗?
我正在编写一个函数来解析具有纹理和动画数据的文件,并将其加载到我声明的一些全局结构中.我在特定行上收到编译器警告"从不兼容的指针类型分配".这是很多代码,所以我只想在这里发布重要的部分.
首先,我的动画例程有一个struct数据类型,如下所示:
typedef struct {
unsigned int frames;
GLuint *tex;
float *time;
struct animation *next;
} animation;
Run Code Online (Sandbox Code Playgroud)
如您所见,结构中的最后一个变量是指向动画完成时默认为另一个动画的指针.
这是加载函数的声明:
void LoadTexturePalette(GLuint **texture, animation **anim, const char *filename)
Run Code Online (Sandbox Code Playgroud)
该函数将信息加载到动画数组中,因此是双指针.
在加载每个动画的最后,从文件中提取一个整数,指示"下一个"指针将指向哪个动画(加载的动画).
fread(tmp, 1, 4, file);
(*anim)[i].next = &((*anim)[*tmp]);
Run Code Online (Sandbox Code Playgroud)
在最后一行,我得到编译器警告.我还没有使用那个变量,所以我不知道警告是否是一个问题,但我觉得我的语法或我的方法在设置该变量时可能是不正确的.
我正在尝试编写一些代码,将纹理渲染到一个简单的方块上,但是在使它工作时遇到了很多麻烦.我在这里下载了一些用于纹理映射的示例源代码并编译它,它似乎在它们的柱面上做了很好的纹理映射.然后,我添加了一些我的代码,看看它是否会将纹理渲染到我的方块上,但它只是用纯色绘制它,它似乎是红色和黑色之间的中间,而不是像圆柱体上出现的棋盘格.这是我在第一遍调用gluCylinder后添加的代码:
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(-1, -1);
glTexCoord2f(1,0);
glVertex2f(1, -1);
glTexCoord2f(1, 1);
glVertex2f(1, 1);
glTexCoord2f(0,1);
glVertex2f(-1, 1);
glEnd();
Run Code Online (Sandbox Code Playgroud)
是否有任何理由为什么纹理会在圆柱体上正常渲染而不是在我的四边形上?