标签:cocos2d-android android eclipse
使用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);
}
解决方法:
这是针对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或源代码并在您的应用中实现.
标签:cocos2d-android,android,eclipse 来源: https://codeday.me/bug/20191011/1889497.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。