【步兵 经验篇】游戏常用的三个处理 By EOS.
网上都能搜到的东西,汇总一下,几个简单的处理就能大大提升游戏体验。
接下来我们从简到繁~
横屏翻转
我做过的手游游戏基本都是横屏模式,所以我也以横屏为例,方法很简单。
在 AndroidManifest.xml 中
android:screenOrientation="userLandscape"
基本上所有的游戏都有了,别因为这个属性而脱了队。
禁用自动熄屏
在这个挂机越来越常见时代,盯着盯着屏幕就后台了,岂不很不爽?
另外此功能还能减掉不少隐藏bug=、=,岂有不加之理~
public class AppActivity extends Cocos2dxActivity {
PowerManager.WakeLock mWakeLock;
@Override
public Cocos2dxGLSurfaceView onCreateView() {
Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock =fpm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"GAME_NO_LOCK");
mWakeLock.acquire();
return glSurfaceView;
}
@Override
protected void onPause() {
super.onPause();
if(mWakeLock != null)
{
mWakeLock.release();
mWakeLock = null;
}
}
@Override
public void onDestroy() {
super.onDestroy();
if(mWakeLock != null) {
mWakeLock.release();
mWakeLock = null;
}
}
@Override
protected void onResume() {
super.onResume();
if(mWakeLock == null) {
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "GAME_NO_LOCK");
mWakeLock.acquire();
}
}
}
另外都和熄瓶有关系,这里顺带说一个之前出过的bug:
对android:configChanges属性,一般认为有以下几点:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges=”orientation|keyboardHidden|ScreenSize”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
如以上描述,如果设置android:configChanges不包含”orientation|keyboardHidden|ScreenSize”,再游戏灭屏时,
会瞬间调用横屏切竖屏模式,所以会“重新调用各个生命周期”,此操作会可能引起的问题:
1. 直接熄屏后,会出现背景音乐直接播放。
2. 切竖屏时会执行两次, 造成游戏tgkill崩溃。
沉浸导航栏
谷歌在安卓4.4之后提出了一个Immersive Full-Screen Mode的概念(官方介绍链接)
精简出来的代码需要修改的地方如下:
public class AppActivity extends Cocos2dxActivity {
private Cocos2dxGLSurfaceView glSurfaceView;
@Override
public Cocos2dxGLSurfaceView onCreateView() {
glSurfaceView = super.onCreateView();
this.hideSystemUI();
return glSurfaceView;
}
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
if (hasFocus)
{
this.hideSystemUI();
}
}
private void hideSystemUI()
{
glSurfaceView.setSystemUiVisibility(
Cocos2dxGLSurfaceView.SYSTEM_UI_FLAG_LAYOUT_STABLE
| Cocos2dxGLSurfaceView.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| Cocos2dxGLSurfaceView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| Cocos2dxGLSurfaceView.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| Cocos2dxGLSurfaceView.SYSTEM_UI_FLAG_FULLSCREEN
| Cocos2dxGLSurfaceView.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}
总结
成功的游戏都会在考虑着细节,失败的游戏还在不停的加功能,细节决定成败,古人诚不欺我。
玩法固然重要,但如果细节体验不到位,是留不住人的。近期在做细节调优略有感触,优化过后,
体验真的大不一样,流畅度整体上升,一个自然的过渡总会令人感觉舒服。就这么多~
See Again~
之前
真爱无价,欢迎打赏~