似乎新 iPhone 也将是 16:9。没有什么大新闻。
我需要交付一个我在一年半前开始使用 Cocos2d 2.0 并针对 3:2 屏幕的应用程序。这意味着所有开发和绘制的图形都是为 3:2 屏幕考虑的。
我找到的最佳解决方案如下,使用额外的空间来包含游戏信息和一些游戏信息,如图所示:
已经有几个答案指定了我在 16:9 设备上运行时如何检测。但是我的问题是..如何处理默认情况下放置在我的应用程序中的顶部和底部黑色边框?
有什么办法可以移动它们并在底部只获得一个黑色边框并覆盖到这个额外的输入层,我可以在其中添加游戏?
我对解决方案有一些假设:
假设 A:修改 CCScene 锚点并以某种方式将其移动到顶部。目前设置为 CGPointZero,该值根据使用的设备而变化。但是我尝试将值硬编码为 (0,0) 并没有真正改变:
anchorPointInPoints_ = anchorPoint_ =CGPointMake(0.0f, 0.0f);
假设B:修改CCScene的draw方法,在父UIView对象中向上移动视图。但是我不知道如何做到这一点..我想可能涉及一些转换矩阵。
假设 A 似乎不起作用,所以可能 B 是最好的方法。然而,在进一步挖掘问题之前,我想知道你们中的一些人是否已经解决了这个问题。
任何帮助我指出正确方向的帮助将不胜感激。
编辑:假设它在 3:2 中工作,我一直在使用 CGPointMake。事实上,据我所知,对于 Retina 和非 Retina 设备,惯例是高度使用 480,宽度使用 320。这大大简化了编码。但是我不确定新的 16:9 设备在这方面是否有任何变化。如果是这样,这可能是解决我的问题的一步,但当然意味着我需要为每个场景添加额外的代码才能正确支持这一点。
编辑 2:请参阅我对 LearnCocos2D 答案的第二条评论。
+ (id) sceneWithLevelName:(LevelName)name
{
CCScene *scene = [CCScene node];
//I tried scene.position = CGPointMake(0,88); but happens as described in my comment to Learncocos2d's answer
ShooterScene * shooterLayer = [[self alloc] initWithId:name];
[scene addChild:shooterLayer];
//I also tried to modify this layer (shooterLayer) but same proble, the black border stay.
return scene;
}