LGame性能改进,并增加TMX地图支持(0 2 96版)

               

下载地址(内含源码、示例、jar)http://loon-simple.googlecode.com/files/LGame-Android-0.2.96.7z

本次更新主要针对LGame与Android系统组件交互部分进行改进,简化了流程与代码,同时调整了LGame运行在不同环境运行时的显示策略,解决了以往存在的大多数真机差异问题,以尽量满足不同手机平台的需求。

 

主要改进如下:

1、新增Touch类,用以替代Android系统默认的MotionEvent类(为了封装自适屏坐标切换),所有触屏参数自0.2.96起改为由此类传递。

2、删除旧有的SpriteTile类,改为使用标准TMX地图,相关封装在org.loon.framework.android.game.action.map.tmx包下。

基本使用方法如下所示,更详细可见源码部分或等待0.3版发布时文档。
     TMXTiledMap map;    public void onLoad() {        //加载TMX地图,XML中图片加载路径在assets文件夹下        map = new TMXTiledMap("assets/desert.tmx","assets");    }    public void draw(LGraphics g) {        //当onLoad中资源全部加载完毕时        if (isOnLoadComplete()) {            //绘制TMX地图到屏幕,由TMX坐标的1,5位置开始显示(换算为像素坐标就是1*tileWidth,5*tileHeight)            map.draw(g,1,5);        }    }
效果图:

00


3、新增Mode类,用以管理LGame引擎所开发游戏的显示模式。

自LGame-0.2.96起,我们可以先用maxScreen函数创建一个480x320之类低分辨率的窗口,而后通过initialization(true,Mode.Fill)(参数中true代表横屏,false代表竖屏)方式让它以全屏状态运行在800x480等较高分辨率的手机之上,调用此函数所产生的窗体完全不需修改其它部分,坐标与画面比例都将自动切换(当然,缩放的代价是画面与速度的损耗无法避免)。


4、不再强制绑定Admob类库,原有调用方式改为手动调用封装好的AdUtils类。

需要注意的是,此封装类仅处理AdView相关部分封装,超出AdView权限的部分不再处理。做如此变更的主要原因在于,最新版的Admob类库会依赖新增的AdMobActivity类,硬编码处理隐患太多,故此交还权限给用户(另一个原因是Admob类库越来越大,如果不用Admob还带着它APK在体积上吃亏(- -|||)),使用Admob类库时请按Admob示例中格式自行配置AndroidManifest.xml文件即可,和普通程序没有任何区别。(用AdUtils封装的话配置AndroidManifest.xml就够了,不用的话请完全照搬Admob示例中代码)

基本使用方法如下所示:
public class Main extends LGameAndroid2DActivity {    public void onMain() {        this.initialization(true);        if(AdUtils.isAdJarExist()){            AdUtils.createAdView(this, Location.RIGHT,"Android game", 30);        }        this.setShowLogo(true);        this.setShowFPS(true);        this.setScreen(new TD());        this.showScreen();    }}

效果图:

 

00

5、不再强制用户必须使用LGameAndroid2DActivity。

 

虽然个人并不主张同时创建多个Activity达到画面转换的效果(太耗资源),但假如您一定要使用此方式的话,自0.2.96版起可以在LGame初始化时设置setDestroy(false)函数,这样就可以让程序在注销LGameAndroid2DActivity时不退出游戏,从而把LGameAndroid2DActivity当作一个非常普通的Activity使用。

6、简化了LGame与标准Android组件交互时的编码流程,让Android窗体添加方式更贴近于LGame自带组件的添加方式。

自0.2.96版起,当我们想加载一个规定大小的Web界面到LGame的指定位置,可以直接使用以下编码做到:

//构建LGameWeb(其实就是WebView的简单封装,直接用WebView或其它任何View操作方式完全一致,另外用removeView可以删除)LGameWeb web = new LGameWeb("www.baidu.com");//PS:读取XML文件的话,将web处直接替换为LSystem.getActivity().findViewById(id)即可 ,在LGameAndroid2DActivity和//Screen中都有addView函数。另外View是一个泛指的概念,因为ViewGroup继承View,而Android中所有Layout都继承自ViewGr//oup,所以无论是View或Layout都可以注入该函数。//添加LGameWeb到游戏窗体当中,大小设定为320x240,位置居于屏幕中心(Location已改良,可设定所有相对位置)addView(web, 320, 240,Location.CENTER);

效果如下图所示:

 

00

全屏的话改为这样既可。

 

addView(web, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT,Location.CENTER);

效果如下图所示:

 

00

另外,由于Android系统自身的特殊线程机制,如果在多线程环境中使用addView添加组件或者进行其它Android系统组件操作(比如LGame的onLoad等函数中调用),需要使用runOnUiThread将其包装,具体代码如下所示:
LSystem.runOnUiThread(new Runnable() {               public void run() {                LGameWeb web = new LGameWeb("www.baidu.com");                addView(web, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT,                        Location.CENTER);            }});

最后,网络操作必须开启 <uses-permission android:name="android.permission.INTERNET" />

PS:举凡编程,都是先有标准的构建方式,再有XML配置方式,所以只要能进行Activity加载,就肯定能正常读取和加载Android的XML文档。更何况LGame引擎从本质上说就是一个Android图形系统的封装马甲,绝不可能穿上马甲就不能以默认方式编程了。如果您看不惯LGame的组件调用方式,大可以该怎么写就怎么写,操作上完全一致。

7、改良了AndroidDialog调用方式,让其使用更简便。

调用选择框:
    public void onTouchDown(Touch e) {        showAndroidSelect(new SelectListener() {            public void item(int index) {                Log.i("Select", "item:" + index);            }            public void cancled() {            }        }, "选择框", new String[] { "1", "2", "3" });    }


00

调用输入框:
public void onTouchDown(Touch e) {        showAndroidTextInput(new TextListener() {            public void input(String text) {                       }                       public void cancled() {                       }        }, "输入框", "ABCDEFG");    }

 

00



调用一个Assets文件夹下的HTML文档:
public void onTouchDown(Touch e) {showAndroidOpenHTML(new ClickListener() {            public void clicked() {            }                                  public void cancled() {                           }},"TEST", "test.html");}

 

00

其它不一一例举,总之所有的Dialog都可以正常调用(用Android系统默认的调用方式也一样)。

下载地址(内含源码、示例、jar)http://loon-simple.googlecode.com/files/LGame-Android-0.2.96.7z
————————————————

0.3版的SLG模块有速度问题(在JavaSE版就没事,郁闷),所以0.3预计延后一到两周发布,先发个0.2.96版劳烦大家帮小弟找找BUG(另外一点,无法发布0.3的更重要原因在于,小弟最近脖子落枕了(-_-))……

 

 

           
tIDE是多国语言的免费软件,但是!竟然没有中文,关于它的介绍自己看就不说了,下面来创建第一张地图,用于我们的TD游戏。 你现在需要一张这样的tile图片,来做完地图的基本元件 在Explorer面板Map节点地下的Tile Sheets右键Add,然后浏览选择上面的或者你自己的tile文件。 OK弹出Tile Sheet Properties对话框设置一下Tile Size让Tile完美的切割。这里的值是60x60。 ok,然后会在Tile picher面板里就会出现一个个分割好的Tile。 有了这些tile的支持就可以在map上玩拼图了。在map Explorer面板下的Map节点的Layers上右键Add,在弹出的Layer Properties设置地图的大小Layer Size,因为我现在只打算做一个最简单的也就是一屏幕而且不能拖动所以这里设置14x8 (800/60 x 480/60),OK。 为了方便绘制在工具面板的右上角有一个显示网格的按钮,点下去它 右边的绘图工具栏上有一个很好使用的按钮区域绘制,它能把选择区域填充出当前选择的tile,下面就先在tile Picker选择一块浅色的草地区域绘制到整个地图。然后画上我们的路。 Save as为 tmx类型的文件 中间如果出现警告确定就好了 这里出现了最关键的一步,这里一定要选Base64(gzip compressed),ccx现在的本还只支持这一种。 把生成的tmx文件以及tile图片加入我们的项目中。 这里可能需要调整一下tmx文件中的Image source的路径 在程序中显示TMX地图 先显示出来看看努力的效果,之后再慢慢完善。 把GameScreen构造函数中的说明Label删除,添加CCTMXTiledMap 代码很简单如下 private GameScreen() { CCTMXTiledMap tmxmap = CCTMXTiledMap.tiledMapWithTMXFile("Map/Level1"); addChild(tmxmap); }
Otter 是一个用于读写 Translation Memory Exchange (TMX) 文档的 Java 类库。要求 Java 7 支持。示例代码:TMXReader reader = TestUtil.getTMXReader("/header.tmx"); List<TMXEvent> events = readEvents(reader); assertNotNull(events); checkEvent(events.get(0), START_TMX); // Check the header Header header = events.get(0).getHeader(); assertNotNull(header); assertEquals("TRADOS Translator's Workbench for Windows", header.getCreationTool()); assertEquals("Edition 8 Build 863", header.getCreationToolVersion()); assertEquals("sentence", header.getSegType()); assertEquals("TW4Win 2.0 Format", header.getTmf()); assertEquals("EN-US", header.getAdminLang()); assertEquals("EN-US", header.getSrcLang()); assertEquals("rtf", header.getDataType()); // Optional ones assertEquals(new TMXDateParser().parseDate("20100223T044327Z"), header.getCreationDate()); assertEquals("TESTERSON", header.getCreationId()); assertNull(header.getEncoding()); assertNull(header.getChangeDate()); assertNull(header.getChangeId()); List<Property> properties = header.getProperties(); assertEquals(3, properties.size()); checkProperty(properties.get(0), "type1", "Property", null, null); checkProperty(properties.get(1), "type2", "Property with o-encoding", "ASCII", null); checkProperty(properties.get(2), "type3", "Property with lang \"fr\"", null, "fr"); List<Note> notes = header.getNotes(); assertEquals(2, notes.size()); assertEquals(new Note("This is a note with an encoding.").setEncoding("ASCII"), notes.get(0)); assertEquals(new Note("This is a note with lang \"en\".").setLang("en"), notes.get(1)); checkEvent(events.get(1), END_TMX); 标签:Otter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值