使用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();
使用上面的代码,在启动时显示黑屏(启动屏幕图形显示但主要的游戏活动屏幕没有显示)。
但是,通过更改此行;
CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationPortrait);
到
CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);
该应用程序显示 - 尽管图形延伸并不理想!因此,由于较新的Android设备,这似乎是一个解决问题。 经过搜索,我可以找到与“' gluPerspective”相关的代码片段。但我的代码中没有这个要改变。
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);
}
答案 0 :(得分:0)
这是适用于Android 4.3及以上{cocos2d}的问题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或源代码并实现。