我已经在Google和这里搜索了这个问题的答案。我发现了类似的问题,但不是这个问题,也没有答案。我也是xCode和Apple开发的新手,在Apple开发人员离开后我继承了这个项目。
这是使用cocos2d v0.99.4-rc3,iOS 8.3,Xcode 6.3.2。此外,这适用于iOS 7.1和我升级xCode之前。我同时在iPad上升级了xCode和iOS。
在下面的代码中,iPad Retina上的backingWidth_和backingHeight_设置为1536和2048,但在iPad AIR上设置为0。
当我在执行renderbufferStorage后调用glGetError()时,在AIR上返回0x0501(GL_INVALID_VALUE),但在Retina上返回0x0000,所以我认为当#b;'层时,renderbufferStorage存在问题。为AIR传递给它。在执行glBindRenderbufferOES()之后调用glGetError()会为AIR和Retina返回0x0000。我在Build Settings中为Valid Architectures列出了arm64,armv7和armv7s;但只有armv7和arm64显示在显示体系结构的第一行,就在Base SDK之上。
- (BOOL)resizeFromLayer:(CAEAGLLayer *)layer
{
// Allocate color buffer backing based on the current layer size
glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer_);
[context_ renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:layer]; //This is fine on iPad Retina but causes error for AIR
GLenum_error = glGetError(); //this returns 0x0501 (GL_INVALID_VALUE)on the iPad AIR, but 0x0000 on the Retina.
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth_); //equals 1536 on Retina, 0 on AIR
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight_); //equals 2048 on Retina, 0 on AIR
if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) //this fails, so the resizeFromLayer returns NO.
{
NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
return NO;
}
从layoutSubviews()
调用resizeFromLayer- (void) layoutSubviews
{
[renderer_ resizeFromLayer:(CAEAGLLayer*)self.layer];
size_ = [renderer_ backingSize];
// Avoid flicker. Issue #350
[[CCDirector sharedDirector] drawScene];
}
有没有其他人经历过这个以及你是如何纠正它的。这里的一个条目讨论了破坏帧缓冲区,然后在resizeFromLayer中获得黑屏时创建一个新的帧缓冲区,但这并不是AIR特有的。我还没有尝试过,但是如果有效的话,我会将其作为可能的解决方案发布。关于该解决方案的一些评论说它是真正的潜在问题的掩盖,这就是为什么我要问这个。
应用程序代码在Retina和AIR上成功构建,但在iPad和模拟器中,AIR显然显示黑屏,因为调整大小时出现故障。
答案 0 :(得分:0)
由于没有人回应,我花了一段时间来解决这个问题,特别是因为我是xCode,iOS和cocos2d的新手。该问题原来是一个64位/ 32位问题,正在使用较旧的Cocos2d版本。坐标偏移计算错误,图像大小返回为0.如果Cocos2d已升级到较新版本,则可能不会发生浮动/双重不匹配。