0

我想解释一下为什么 XCode 的 OpenGL ES Sample 有效。它执行以下操作来启动 drawFrame 方法(在 blablaViewController.m - 名称取决于项目的名称):

//sets up a CADisplayLink to do a regular (draw & update) call like this
CADisplayLink *aDisplayLink = [[UIScreen mainScreen] displayLinkWithTarget:self 
    selector:@selector(drawFrame)];
[aDisplayLink setFrameInterval:animationFrameInterval];
[aDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

在 drawFrame 方法中,它执行以下操作:

//start of method
...
static float transY = 0.0f;
...
//Quite a lot of OpenGl code, I am showing only parts of the OpenGL ES1 version:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, (GLfloat)(sinf(transY)/2.0f), 0.0f);
transY += 0.075f;
...
//end of method

我还不太了解Objective C,但是这个transY变量被重置,然后以相同的方法递增的方式非常奇怪。由于 GL_MODELVIEW 矩阵在移动之前被重置为单位,我认为它不能在 opengl 的某个地方保留一个累积值。

静态关键字是这里的诀窍吗?一旦某些东西被声明为静态一次,Objective C 是否会忽略所有未来的变量声明?

谢谢您的帮助!

4

1 回答 1

0

静态变量在编译时在二进制文件中被初始化,所以只有一次,因此你被禁止为它们的初始化分配动态值。在这里,变量transY不是在每次方法调用时都设置为 0.0,而只是在启动时。这就是该方法的后续调用可以检索旧值的原因。

于 2011-04-22T21:55:46.267 回答