08
2017
06

Libgdx游戏如何接入banner广告的view

        大部分Libgdx的安卓入口里,都是直接一个DirectedGame来初始化:initialize(new GameDirectedGame(), cfg);

        而一些广告需要用自定义布局潜入一个View。Libgdx安卓入口中,MainActivity(继承AndroidApplication),oncreate方法里用以下方法可实现。


        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();

        // 创建布局

        RelativeLayout layout = new RelativeLayout(instance);

        // 创建 libgdx View (DirectedGame)

        View gameView = initializeForView(new GameMain(app), cfg);

        // 添加view

        layout.addView(gameView);

        //初始化广告视图

        BaiduBanner banner = new BaiduBanner(instance);

        //广告布局设置,根据自己的位置来设置参数

        RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(

                (int) (getWindowManager().getDefaultDisplay().getWidth() * 0.55f),

                RelativeLayout.LayoutParams.WRAP_CONTENT);

        adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

        adParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

        adParams.rightMargin = getWindowManager().getDefaultDisplay().getWidth() / 4;

        layout.addView(banner, adParams);

        //设置嵌套后的布局

        setContentView(layout);


04
2016
01

Andorid下简单的"加载中"对话框

28
2013
05

解决混淆与反射冲突

JAVA的反射机制可以有效地用来依赖倒置。之前的项目中,我就用XML来定义游戏中的引导脚本,从而实现了在指定界面出现配置好的游戏引导。脚本信息如图:


proguard.png

02
2013
05

Android游戏设计中的音频控制——音量调整

音量主要是通过AudioManager的setStreamVolume (int streamType, int index, int flags)方法。

streamType为设置的媒体类型,注意游戏的媒体声音用AudioManager.STREAM_MUSIC这个参数。

index为音量,上限参照 getStreamMaxVolume(int)方法返回值。

flags是一些特殊参数,这里可以设置AudioManager.FLAG_SHOW_UI,这样每次调整音量的时候就会出现一个音量的系统提示界面。

20
2013
04

Android游戏设计中的音频控制经验分享

游戏里用到BGM和音效,常用播放音频的方法主要通过SoundPool和MediaPlayer两个类,单独使用时各有利弊,唯有结合才能扬长避短。

  • SoundPool

SoundPool,可以同时播放多个音效,但是缓存只有1M,只适合简短的游戏音效,不适合音乐。涉及的API主要有:load(加载音效,返回soundID)、unload、play(设置音量和循环参数,播放指定soundID且已加载的音效资源,并返回streamID)、stop(停止指定streamID的音效)、release(释放资源)。


12
2013
03

用intel驱动提升android模拟器速度(windows和OSX)

感谢一碗豆腐向我推荐。

android模拟器是模拟ARM的,速度很慢,大家经常用X86版的模拟器,速度给力,但是虚拟机什么的太麻烦。其实可以直接用SDK里的X86模拟器并使用intel提供的加速驱动,方法如下:

1)首先你必须是intel的CPU,且支持VT技术(比如i3、i5、i7)。确认在BOIS里开启了CPU VT技术和Execute Disable技术,系统的数据执行保护DEP功能已开启(windows)。

2)更新你的android SDK manager,下载安装android4.2(2.3等版本也有)分支下的Intel x86 Atom System Image。如图:

...

22
2012
08

利用颜色过滤调整图象风格

做游戏经常遇到这个情况,一张图片,从完全透明,渐渐过渡到不透明显示出来。

常规的处理方式是:获得该图象的ARGB颜色数组,每次绘制调整颜色信息。这种方法需要把处理的内容绘制到一张缓冲图象上,再获得该图象的颜色信息,每次循环再逐像素处理。比较繁琐。

下面介绍用android封装的滤镜实现半透明过渡效果,先介绍一下颜色矩阵:                               
...

16
2012
03

Android限制EditText输入字数

XML布局里设置的话只要设置maxLength属性就可以了。

代码里控制,则需要给EditText加一个过滤器:

editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(30)})

15
2012
03

解决Android创建AVD失败

有时候我们重新下载了一份Android SDK,或者把SDK路径修改了,运行eclipse会遇到无法启动AVD的问题。诸如:emulator:ERROR:no search paths found in this AVD's configuration. Weird, the AVD's config.ini file is malformated……

这时候到preferences里设置路径也无济于事,原因是keystore路径冲突。解决方法:

添加一个ANDROID_SDK_HOME的环境变量, 值为D:\android_sdk(你的SDK路径)。

或者设置下面的custom debug keystore手动设置keystore位置。

14
2012
02

Android使用BOX2D莫名其妙出错退出的问题

以前用LIBGDX封装的BOX2D做demo时遇到了这个问题,LOG信息也看不出哪里错了,一直以为是LIBGDX的bug。最近才忽然想起可能是用SurfaceView导致线程不同步引起的,试了一下,给用到World.createBody的地方加了锁,就不出现BUG了。大家以后要谨记,BOX2D内部是不同步的。

关于SurfaceView的线程同步问题参考我另一篇文章:关于SurfaceView主线程与UI线程的问题