使用 Nexus 5(以及任何后来的 Android 手机,如 Galaxy S5 等)我的游戏以前在其他设备上运行良好,只是在启动时显示黑屏,可以点击按钮(即使你看不到他们)和 sfx 播放。
在与这个问题进行了大量的斗争之后,我设法在某种程度上修复了它,这是与发布有关的代码;
mGLSurfaceView = new CCGLSurfaceView(this);
CCDirector.sharedDirector().setScreenSize(CCDirector.sharedDirector().winSize().width,
CCDirector.sharedDirector().winSize().height);
CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationPortrait);
CCDirector.sharedDirector().getActivity().setContentView(mGLSurfaceView, createLayoutParams());
InitParam();
使用上面的以下代码,在启动时显示黑屏(闪屏图形会显示但主游戏 Activity 屏幕不会显示)。
但是,通过改变这一行;
CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationPortrait);
到
CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);
应用程序显示 - 尽管拉伸(stretch)了图形并且不理想!因此,由于更新的 Android 设备,这似乎是一个分辨率问题。 搜索后,我可以找到与“gluPerspective”相关的代码 fragment ,但我的代码中没有要更改的代码 fragment 。
我相信 Nexus/Galaxy 的分辨率高达 1920,因此需要以某种方式找到一种方法来将其设置为与现有代码一起使用。
可能有帮助的附加代码,来自 TitleLayer
public TitleLayer()
{
super();
CCSprite sprite = CCSprite.sprite(G._getImg("background"));
G.setScale(sprite);
sprite.setAnchorPoint(0, 0);
sprite.setPosition(0, 0);
addChild(sprite);
isTouchEnabled_= true;
}
public static void setScale(){
G._scaleX = CCDirector.sharedDirector().winSize().width / G.WIN_W;
G._scaleY = CCDirector.sharedDirector().winSize().height / G.WIN_H;
}
它从这里获取值;
public static Activity g_Context;
public static final float DEFAULT_W = 360f;
public static final float DEFAULT_H = 480f;
public static final float WIN_W = 720f;
public static final float WIN_H = 1280f;
public static void getScale(){
_scaleX = CCDirector.sharedDirector().winSize().width / WIN_W;
_scaleY = CCDirector.sharedDirector().winSize().height / WIN_H;
}
public static float _getX(float x) {
return _scaleX * x;
}
public static float _getY(float y) {
return _scaleY * y;
}
public static void setScale(CCNode node) {
node.setScaleX(_scaleX);
node.setScaleY(_scaleY);
}
public static void setScale(CCNode node, float scaleFactor) {
node.setScaleX(_scaleX*scaleFactor);
node.setScaleY(_scaleY*scaleFactor);
}
public static void setScale(CCNode node, boolean bSmall) {
float scale = bSmall ?
(_scaleX<_scaleY ? _scaleX : _scaleY) :
(_scaleX>_scaleY ? _scaleX : _scaleY);
node.setScale(scale);
}
最佳答案
这是cocos2d for Android 4.3及以上的问题Issue raised and answered at github forum
虽然有很多解决方法,例如将以下代码放在 onStart() 方法中。
app.metric = 1;
CGSize s = CCDirector.sharedDirector().winSize();
if (s.height > 1280) {
app.metric = s.height / 1280;
s.height = s.height / app.metric;
s.width = s.width / app.metric;
CCDirector.sharedDirector().setScreenSize((int) s.width, (int) s.height);
}
或者如果您有 cocos2d 的源代码,则更改下面提到的行。
public static final int kCCDirectorProjectionDefault = kCCDirectorProjection3D;
或者你可以实现这个解决方案
在CCDirector的setProjection方法中—— 将 gluPerspective 更改为 2000 而不是 1500 新线将是这样的 - GLU.gluPerspective(gl, 60, size.width/size.height, 0.5f, 2000.0f);
但所有这些都是解决问题的方法,所以如果你真的想要好的解决方案,那么你可以获取最新的 cocos2d jar 或源代码并在你的应用程序中实现。
关于android - Android 启动黑屏,除非使用横向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25137441/