LGame有LSE帮助手册吗?就是PC版的帮助微软在线文档系统?谁有的话能帮忙发个网址吗?谢谢啦!

3394人阅读
修正声明:
借写本例的机会,刚刚修正了某个【小】BUG。问题点在于LTexturePack的其中一个draw函数,本来在分图时需传入dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2等八个数值,结果小弟在接值时脑子进水,误将sx1,sx2,sy1,sy2写“扎堆”了(写错就是上述样子)……因为这是取图参数,即从sx1,sy1坐标开始取图,取到sx2,sy2的位置中止,弄错以后取出图立马变毕加索油画~所以小弟刚才将LGame-0.3.2-release这个包重新发了一遍,如果有用到LTexturePack的话请重新下载,抱歉抱歉(另外还改了3处问题)……
下载地址:
关于TexturePack:
LGame中提供的LTexturePack类,是一个专门用于整合图像资源的辅助用类,它的最大作用是将许多零碎的图片画零为整,从而减少不必要的资源损耗。另一方面来讲,由于减少了渲染用纹理数量,避免了反复与图形系统交互,使用LTexturePack的速度通常会比单独使用零散LTexture为高。
最简单的使用方式:
package org.loon.
import org.loon.framework.javase.game.GameS
import org.loon.framework.javase.game.action.sprite.A
import org.loon.framework.javase.game.core.graphics.S
import org.loon.framework.javase.game.core.graphics.opengl.GLEx;
import org.loon.framework.javase.game.core.graphics.opengl.LTextureP
import org.loon.framework.javase.game.core.input.LT
import org.loon.framework.javase.game.core.input.LT
import org.loon.framework.javase.game.core.timer.LTimerC
public class LTexturePackTest extends Screen {
LTexturePack imageP
* 无Transition效果。
* PS:目前LGame设定为,如果首个Screen没有加载特效,将强制运行一个随机特效。 但是,返回Empty则不进行加载。
public LTransition onTransition() {
return LTransition.newEmpty();
public void onLoad() {
imagePack = new LTexturePack();
// 加载小图到LTexturePack
imagePack.putImage(&assets/h_a.png&);
imagePack.putImage(&assets/h_b.png&);
imagePack.putImage(&assets/h_c.png&);
imagePack.putImage(&assets/e_a.png&);
imagePack.putImage(&assets/e_b.png&);
imagePack.putImage(&assets/e_c.png&);
// 宣布所有图像加载完毕(如果调用此函数,则释放所有已加载的资源,仅保留一块主纹理)
imagePack.packed();
public void alter(LTimerContext timer) {
public void draw(GLEx g) {
if (isOnLoadComplete()) {
int size = 32;
// 当执行glBegin后,将在GLEx触发一个渲染批处理事件,仅在执行glEnd后提交
// 渲染内容到窗体。如果不调用此函数,则LTexturePack依旧可以执行,但是效率
// 可能会受到一定影响(每次渲染都单独提交)。
imagePack.glBegin();
// LTexturePack中的数据可以按照索引加载
imagePack.draw(0, 32, size);
// 也可以按照文件名加载
imagePack.draw(&assets/h_b.png&, 32, size += 32);
imagePack.draw(2, 32, size += 32);
size = 32;
imagePack.draw(3, 256, size);
imagePack.draw(4, 256, size += 32);
imagePack.draw(5, 256, size += 32);
// 提交渲染结果到游戏画面
imagePack.glEnd();
// 实例化一个动态箭头精灵
if (arrow == null) {
arrow = new Arrow(212, 212, 188, 188);
add(arrow);
// 显示实际纹理
g.drawTexture(imagePack.getTexture(), 32, size + 50);
g.drawString(&Texture&, 235, size + 124);
public void touchDown(LTouch e) {
public void touchDrag(LTouch e) {
public void touchMove(LTouch e) {
public void touchUp(LTouch e) {
public void dispose() {
if (imagePack != null) {
imagePack.dispose();
imagePack =
public static void main(String[] args) {
GameScene game = new GameScene(&LTexturePackTest&, 480, 320);
game.setShowFPS(true);
game.setShowLogo(false);
game.setScreen(new LTexturePackTest());
game.showScreen();
这时大家可以看到,在上述画面中,其实只有游戏中箭头指出的地方才是真正的纹理。而其余细分处,仅是大图纹理中的一部分罢了,然而在用户眼中,这些又有什么不同呢?不过,我们所能节省出的图像资源,却是非常巨大的。
当然,如果载入的是连续画面,那么仅仅能得到原画根本没用,不过没关系,我们也可以继续细分出我们满意的画面(上图具体代码和下例重复,故不再赘述)。
图像移动:
package org.loon.
import org.loon.framework.javase.game.GameS
import org.loon.framework.javase.game.action.collision.G
import org.loon.framework.javase.game.action.collision.GravityH
import org.loon.framework.javase.game.action.sprite.B
import org.loon.framework.javase.game.action.sprite.effect.SmashE
import org.loon.framework.javase.game.core.geom.RectB
import org.loon.framework.javase.game.core.graphics.S
import org.loon.framework.javase.game.core.graphics.opengl.GLC
import org.loon.framework.javase.game.core.graphics.opengl.GLEx;
import org.loon.framework.javase.game.core.graphics.opengl.LTextureP
import org.loon.framework.javase.game.core.input.LT
import org.loon.framework.javase.game.core.input.LT
import org.loon.framework.javase.game.core.timer.LT
import org.loon.framework.javase.game.core.timer.LTimerC
public class LTexturePackTest extends Screen {
SmashEffect smashEffect = new SmashEffect();
// 显示用精灵大小
final int show_size = 64;
// 实际精灵大小
final int really_size = 24;
LTexturePack imageP
* 建立一个移动对象,用以管理LTexturePack中图像的移动
public class Move {
RectBox rect = new RectBox(0, 0, show_size, show_size);
LTimer timer = new LTimer(150);
int action = 1;
int type = -1;
public void setX(float x) {
rect.setX(x);
public void setY(float y) {
rect.setY(y);
public float getX() {
public float getY() {
public boolean intersects(Move m) {
return rect.intersects(m.rect);
public void update() {
if (timer.action(elapsedTime)) {
if (action & 4) {
action = 1;
* 无Transition效果。
* PS:目前LGame设定为,如果首个Screen没有加载特效,将强制运行一个随机特效。 但是,返回Empty则不进行加载。
public LTransition onTransition() {
return LTransition.newEmpty();
public void onLoad() {
imagePack = new LTexturePack();
// 加载小图到LTexturePack
int heroId = imagePack.putImage(&assets/h_a.png&);
int enemyId = imagePack.putImage(&assets/e_a.png&);
// 宣布所有图像加载完毕(如果调用此函数,则释放所有已加载的资源,仅保留一块主纹理)
imagePack.packed();
final Move moveHero = new Move();
moveHero.id = heroId;
moveHero.x = 0;
moveHero.y = 128;
moveHero.type = 0;
final Move moveEnemy = new Move();
moveEnemy.id = enemyId;
moveEnemy.x = getWidth() - show_
moveEnemy.y = 128;
moveEnemy.type = 1;
* 获得一个内置的重力管理器
* PS: 所有具备setX、setY函数的公有类(必须公有,否则反射不到……),都可以被GravityHandler绑定
final GravityHandler gravityHandler = getGravityHandler();
// 用重力控制器将moveHero对象打包,并且向右方匀速移动(速度100)
Gravity g1 = new Gravity(moveHero);
g1.setVelocityX(100);
// 用重力控制器将moveHero对象打包,并且向左方匀速移动(速度100)
Gravity g2 = new Gravity(moveEnemy);
g2.setVelocityX(-100);
// 添加重力干预
gravityHandler.add(g1);
gravityHandler.add(g2);
// 构建重力监控
GravityHandler.Update update = new GravityHandler.Update() {
public void action(Gravity g, float x, float y) {
// 让当前重力控制触边实效(具体到本例,人物也将消失)
if (x & 0) {
gravityHandler.remove(g);
if (x & getWidth() - show_size) {
gravityHandler.remove(g);
// 添加监控(每次Gravity对象坐标发生变更时生效)
gravityHandler.onUpdate(update);
public void alter(LTimerContext timer) {
smashEffect.update(timer.getTimeSinceLastUpdate());
public void draw(GLEx g) {
if (isOnLoadComplete()) {
smashEffect.draw(g);
// 当执行glBegin后,将在GLEx触发一个渲染批处理事件,仅在执行glEnd后提交
// 渲染内容到窗体。如果不调用此函数,则LTexturePack依旧可以执行,但是效率
// 可能会受到一定影响(每次渲染都单独提交)。
imagePack.glBegin();
// 获得重力控制器(如果绑定为Sprite,Actor,LComponent等对象则不必额外处理显示步骤,
// 此处图像已统一打包入LTexturePack较为特殊)
GravityHandler gravityHandler = getGravityHandler();
// 获得重力实例数量
int size = gravityHandler.getCount();
// 保存上一个Move实例
Move first =
for (int i = 0; i & i++) {
// 获得实例
Gravity gravity = gravityHandler.get(i);
Bind bind = gravity.getBind();
// 反射回绑定的对象
Move o = (Move) bind.ref();
// 判定两个图像的移动位置是否发生了碰撞(这里使用了比较流氓(就俩,省了-_-)的方式,实际应该建立一个精灵预警区,
// 然后搜索该区域内是否存在精灵,有的话再让移动中精灵与该精灵进行碰撞比较)
if (first != null && first.intersects(o)) {
// 碰撞后象征性的显示一个粉碎特效
if (first.action != 5) {
smashEffect.createSmallExplosionEffect(getHalfWidth(),
getHalfHeight());
o.action = 5;
first.action = 5;
g.setColor(GLColor.red);
switch (o.type) {
imagePack.draw(o.id, o.x, o.y, show_size, show_size,
(o.action - 1) * really_size, 0, o.action
* really_size, really_size);
imagePack.draw(o.id, o.x, o.y, show_size, show_size,
o.action * really_size, 0, (o.action - 1)
* really_size, really_size);
o.update();
// 提交渲染结果到游戏画面
imagePack.glEnd();
public void touchDown(LTouch e) {
public void touchDrag(LTouch e) {
public void touchMove(LTouch e) {
public void touchUp(LTouch e) {
public void dispose() {
if (imagePack != null) {
imagePack.dispose();
imagePack =
public static void main(String[] args) {
GameScene game = new GameScene(&LTexturePackTest&, 480, 320);
game.setShowFPS(true);
game.setShowLogo(false);
game.setScreen(new LTexturePackTest());
game.showScreen();
让LTexturePack中的两个精灵进行单挑
多个图像移动:
package org.loon.
import java.util.ArrayL
import org.loon.framework.javase.game.GameS
import org.loon.framework.javase.game.action.collision.G
import org.loon.framework.javase.game.action.collision.GravityH
import org.loon.framework.javase.game.core.LS
import org.loon.framework.javase.game.core.geom.RectB
import org.loon.framework.javase.game.core.graphics.S
import org.loon.framework.javase.game.core.graphics.opengl.GLEx;
import org.loon.framework.javase.game.core.graphics.opengl.LTextureP
import org.loon.framework.javase.game.core.input.LT
import org.loon.framework.javase.game.core.input.LT
import org.loon.framework.javase.game.core.timer.LT
import org.loon.framework.javase.game.core.timer.LTimerC
public class LTexturePackTest extends Screen {
ArrayList&Move& moveL
// 显示用精灵大小
final int show_size = 64;
// 实际精灵大小
final int really_size = 24;
LTexturePack imageP
* 建立一个移动对象,用以管理LTexturePack中图像的移动
public class Move {
RectBox rect = new RectBox(0, 0, show_size, show_size);
LTimer timer = new LTimer(150);
int action = 1;
int type = -1;
public Move(int id, int type, float x, float y) {
this.type =
public void setX(float x) {
rect.setX(x);
public void setY(float y) {
rect.setY(y);
public float getX() {
public float getY() {
public boolean intersects(Move m) {
return rect.intersects(m.rect);
public void update() {
if (timer.action(elapsedTime)) {
if (action & 4) {
action = 1;
public LTransition onTransition() {
return LTransition.newCrossRandom();
public void onLoad() {
imagePack = new LTexturePack();
// 加载小图到LTexturePack
int heroImgId = imagePack.putImage(&assets/h_a.png&);
int enemyImgId = imagePack.putImage(&assets/e_a.png&);
// 宣布所有图像加载完毕(如果调用此函数,则释放所有已加载的资源,仅保留一块主纹理;如果不调用此函数,
// LTexturePack将允许动态增减图像,但是已加载的小图资源不会自动释放(可手动释放,或者dispose全部清空))
imagePack.packed();
// 构建一个Move集合,用以控制图像移动与显示
this.moveList = new ArrayList&Move&(10);
moveList.add(new Move(heroImgId, 0, 0, 32));
moveList.add(new Move(heroImgId, 0, 0, 136));
moveList.add(new Move(heroImgId, 0, 0, 220));
moveList.add(new Move(enemyImgId, 1, getWidth() - show_size, 32));
moveList.add(new Move(enemyImgId, 1, getWidth() - show_size, 136));
moveList.add(new Move(enemyImgId, 1, getWidth() - show_size, 220));
* 获得一个内置的重力管理器
* PS: 所有具备setX、setY函数的公有类(必须公有,否则反射不到……),都可以被GravityHandler绑定
final GravityHandler gravityHandler = getGravityHandler();
// 批量载入重力控制
for (Move m : moveList) {
Gravity g = new Gravity(m);
if (m.type == 0) {
g.setVelocityX(LSystem.getRandom(50, 80));
} else if (m.type == 1) {
g.setVelocityX(-LSystem.getRandom(50, 100));
gravityHandler.add(g);
// 构建重力监控
GravityHandler.Update update = new GravityHandler.Update() {
public void action(Gravity g, float x, float y) {
synchronized (moveList) {
Move src = (Move) g.getBind().ref();
// 仅让我方与敌人产生碰撞
if (src.type == 0 && src.action != 5) {
for (Move obj : moveList) {
if (src.type != obj.type && !src.equals(obj)
&& src.intersects(obj)) {
src.action = 5;
obj.action = 6;
if (src.action & 5) {
// 让移动有一定几率上下浮动(比较贴近真实行走)
g.setVelocityY(LSystem.getRandom(-100, 100));
// 打人或挨打时不能上下浮动
g.setVelocityY(0);
// 让当前重力控制触边实效(更上例不同,此方式仅暂停重力控制,而非删除,这意味着可以唤醒)
if (x & 0) {
g.setEnabled(false);
if (x & getWidth() - show_size) {
g.setEnabled(false);
// 添加监控(每次Gravity对象坐标发生变更时生效)
gravityHandler.onUpdate(update);
public void alter(LTimerContext timer) {
public void draw(GLEx g) {
if (isOnLoadComplete()) {
synchronized (moveList) {
// 当执行glBegin后,将在GLEx触发一个渲染批处理事件,仅在执行glEnd后提交
// 渲染内容到窗体。如果不调用此函数,则LTexturePack依旧可以执行,但是效率
// 可能会受到一定影响(每次渲染都单独提交)。
imagePack.glBegin();
for (Move o : moveList) {
switch (o.type) {
imagePack.draw(o.id, o.x, o.y, show_size, show_size,
(o.action - 1) * really_size, 0, o.action
* really_size, really_size);
imagePack.draw(o.id, o.x, o.y, show_size, show_size,
o.action * really_size, 0, (o.action - 1)
* really_size, really_size);
o.update();
// 提交渲染结果到游戏画面
imagePack.glEnd();
public void touchDown(LTouch e) {
public void touchDrag(LTouch e) {
public void touchMove(LTouch e) {
public void touchUp(LTouch e) {
public void dispose() {
if (imagePack != null) {
imagePack.dispose();
imagePack =
public static void main(String[] args) {
GameScene game = new GameScene(&LTexturePackTest&, 480, 320);
game.setShowFPS(true);
game.setShowLogo(false);
game.setScreen(new LTexturePackTest());
game.showScreen();
让单独纹理中的多个精灵进行混战
——————————
除了动态加载小图为统一纹理外,LTexturePack工具也允许根据XML设定来分解单独的大图为指定格式小图。
以上例为准,当我们执行下列代码:
System.out.println(imagePack.toString());
将可以在控制台见到如下输出:
&?xml version=&1.0& standalone=&yes& ?&
&pack file=&null&&
&block id=&0& name=&assets/h_a.png& left=&0& top=&0& right=&144& bottom=&24&/&
&block id=&1& name=&assets/e_a.png& left=&0& top=&24& right=&144& bottom=&48&/&
这一输出,其实就是LTexturePack工具的XML文档解析格式。如果有单独的复合素材图(所有小图合成一张大图的那种),只要我们构建一个符合上述格式的XML文档,就能直接导入LTexturePack中使用。具体来说,&pack file=&null&&这项必须存在,其中file需要填写为素材图所在路径;id、left、top、right、bottom这五项也必须存在,否则无法定位和获取小图;name项如果想根据name取小图时必须存在,如果无此要求可不填。
另外,在LAE和LSE包中并无此工具类及类似工具存在。原因在于,使用LTexturePack工具虽然可以有效的节约图像资源,可惜调用方法不够直观,与LAE和LSE包的Easy特性并不相符。而且在Bitmap分图时,效率损耗要大于Texture,虽然能节约一定的显存空间,却会使本就不快的Canvas绘图变得更慢。因此,没有为LAE和LSE包提供相关扩展。
____________________
示例中用到了一些MD版梦幻模拟战的素材,资源在此(用什么图原理都一样):
临时想到的一些杂项:
1、关于LGame屏幕设置:
LGame默认提供有的Activity子类LGameAndroid2DActivity,只要继承该类的Activity就可以获得onMain、onGamePaused、onGameResumed三个接口。通常来说,在onMain中就足以完成我们所有的游戏初始化设置。
下面是一个最典型的基本设置:
public void onMain() {
// 横屏,全屏显示
this.initialization(true,LMode.Fill);
// 不显示logo
this.setShowLogo(false);
// 显示实际fps
this.setShowFPS(true);
// 注入游戏Screen
this.setScreen(new MyScreen());
// 显示画面
this.showScreen();
如果我们设置initialization(true),这时游戏屏幕为横屏显示,而initialization(false)为竖屏显示,在布尔值后还可追加一项LMode,通过该类可以设定屏幕的显示方式,如全屏、自适屏、默认大小等等。而在调用initialization之前,我们可以调用maxScreen函数设定默认的屏幕大小,屏幕缩放以此作为依据,如果不进行设置,则默认游戏屏幕大小为480x320。
2、怎样提高游戏速度:
单以效率论,除了能起到缓存(或跳过冗余步骤)的模块外,绝大多数Java类在游戏开发中只能起到减速作用,游戏模块越多,意味着速度被放缓的可能性也就越大。所以游戏引擎也并不一定在所有场景都是快速的,因使用者不同,引擎即可能成为游戏加速的工具,也可能沦为游戏减速的利器。
仅以小弟愚见,提高速度的最简便诀窍在于——“能够执行一次的地方,就绝不给他第二次执行的机会”,真能做到这样,足矣。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1814117次
积分:22323
积分:22323
排名:第90名
原创:317篇
转载:66篇
评论:5452条
(2)(1)(5)(3)(4)(1)(3)(4)(5)(3)(1)(1)(2)(1)(3)(2)(3)(3)(2)(2)(7)(1)(1)(3)(2)(10)(11)(14)(7)(11)(29)(4)(4)(11)(7)(5)(5)(9)(3)(10)(9)(2)(6)(11)(21)(21)(16)(16)(16)(8)(14)(7)(13)(7)(11)(1)(3)1149人阅读
分类:&&&1422人阅读&&&
修正声明:
借写本例的机会,刚刚修正了某个【小】BUG。问题点在于LTexturePack的其中一个draw函数,本来在分图时需传入dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2等八个数值,结果小弟在接值时脑子进水,误将sx1,sx2,sy1,sy2写“扎堆”了(写错就是上述样子)……因为这是取图参数,即从sx1,sy1坐标开始取图,取到sx2,sy2的位置中止,弄错以后取出图立马变毕加索油画~所以小弟刚才将LGame-0.3.2-release这个包重新发了一遍,如果有用到LTexturePack的话请重新下载,抱歉抱歉(另外还改了3处问题)……
下载地址:
关于TexturePack:
LGame中提供的LTexturePack类,是一个专门用于整合图像资源的辅助用类,它的最大作用是将许多零碎的图片画零为整,从而减少不必要的资源损耗。另一方面来讲,由于减少了渲染用纹理数量,避免了反复与图形系统交互,使用LTexturePack的速度通常会比单独使用零散LTexture为高。
最简单的使用方式:
这时大家可以看到,在上述画面中,其实只有游戏中箭头指出的地方才是真正的纹理。而其余细分处,仅是大图纹理中的一部分罢了,然而在用户眼中,这些又有什么不同呢?不过,我们所能节省出的图像资源,却是非常巨大的。
当然,如果载入的是连续画面,那么仅仅能得到原画根本没用,不过没关系,我们也可以继续细分出我们满意的画面(上图具体代码和下例重复,故不再赘述)。
图像移动:
让LTexturePack中的两个精灵进行单挑
多个图像移动:
让单独纹理中的多个精灵进行混战
——————————
除了动态加载小图为统一纹理外,LTexturePack工具也允许根据XML设定来分解单独的大图为指定格式小图。
以上例为准,当我们执行下列代码:
System.out.println(imagePack.toString());
将可以在控制台见到如下输出:
&?xml version=&1.0& standalone=&yes& ?&
&pack file=&null&&
&block id=&0& name=&assets/h_a.png& left=&0& top=&0& right=&144& bottom=&24&/&
&block id=&1& name=&assets/e_a.png& left=&0& top=&24& right=&144& bottom=&48&/&
这一输出,其实就是LTexturePack工具的XML文档解析格式。如果有单独的复合素材图(所有小图合成一张大图的那种),只要我们构建一个符合上述格式的XML文档,就能直接导入LTexturePack中使用。具体来说,&pack file=&null&&这项必须存在,其中file需要填写为素材图所在路径;id、left、top、right、bottom这五项也必须存在,否则无法定位和获取小图;name项如果想根据name取小图时必须存在,如果无此要求可不填。
另外,在LAE和LSE包中并无此工具类及类似工具存在。原因在于,使用LTexturePack工具虽然可以有效的节约图像资源,可惜调用方法不够直观,与LAE和LSE包的Easy特性并不相符。而且在Bitmap分图时,效率损耗要大于Texture,虽然能节约一定的显存空间,却会使本就不快的Canvas绘图变得更慢。因此,没有为LAE和LSE包提供相关扩展。
____________________
示例中用到了一些MD版梦幻模拟战的素材,资源在此(用什么图原理都一样):
临时想到的一些杂项:
1、关于LGame屏幕设置:
LGame默认提供有的Activity子类LGameAndroid2DActivity,只要继承该类的Activity就可以获得onMain、onGamePaused、onGameResumed三个接口。通常来说,在onMain中就足以完成我们所有的游戏初始化设置。
下面是一个最典型的基本设置:
如果我们设置initialization(true),这时游戏屏幕为横屏显示,而initialization(false)为竖屏显示,在布尔值后还可追加一项LMode,通过该类可以设定屏幕的显示方式,如全屏、自适屏、默认大小等等。而在调用initialization之前,我们可以调用maxScreen函数设定默认的屏幕大小,屏幕缩放以此作为依据,如果不进行设置,则默认游戏屏幕大小为480x320。
2、怎样提高游戏速度:
单以效率论,除了能起到缓存(或跳过冗余步骤)的模块外,绝大多数Java类在游戏开发中只能起到减速作用,游戏模块越多,意味着速度被放缓的可能性也就越大。所以游戏引擎也并不一定在所有场景都是快速的,因使用者不同,引擎即可能成为游戏加速的工具,也可能沦为游戏减速的利器。
仅以小弟愚见,提高速度的最简便诀窍在于——“能够执行一次的地方,就绝不给他第二次执行的机会”,真能做到这样,足矣。
cping1982原文:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:16026次
排名:千里之外
(5)(3)(2)(1)(4)(1)3849人阅读
【LG002.第一章】HelloWorld之环境搭建
关键字:LGame 入门 环境搭建
笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址:
1.&&引擎使用的版本LAE1.1
2.&&Android SDK版本2.1
LAE官方解释:
更正了两处小BUG
& LGame-0.3.2-Update:
1、LGame-0.3.2版延续0.3.1,使用OpenGL作为游戏渲染核心,早前的AWT与Canvas实现版本现已更名为LSE与LAE(延续0.3)。
2、LGame-0.3.2版极大扩展了LGame核心包功能,新增工具、特效、精灵、接口以数百计(具体细节正在完善文档中,此处不再详述)。
3、LGame-0.3.2版在核心包基础上,新增了STG开发模块,作为游戏框架的额外补充(目前默认支持(可以基本用脚本完成)的游戏类型已含STG、SRPG、AVG,预计0.3.3提供RTS支持)。
4、LGame-0.3.2版的C#(WP7)版已经构建完毕,不久后也将发布。
PS:LSE和LAE包是针对LGame在0.3.1改版前旧版框架的延续,相对0.3.1及0.3.2版使用的OpenGL渲染方式而言,它们继续采用JavaSE环境所提供的AWT(特指LSE版)以及Android环境所提供的Canvas(特指LAE版)作为游戏绘图核心,并且仅在LGame的Java版中出现,其它语法环境下无对应版本提供(比如很快会发布的C#(WP7)版)。
LSE与LAE包与标准LGame包的主要差别有如下几点:
1、标准LGame自0.3.2起彻底重构了原有的geom包,已经不再附带OpenJDK中的geom包,但LSE与LAE版继续使用该包。
2、标准LGame使用GLEx类作为引擎的最基本渲染器,允许使用JavaSE、JavaME的常用绘图API,以及OpenGL、OpenGLES的常用绘图API,而LSE与LAE包仅模拟有JavaSE、JavaME的Graphics类常用接口(这意味着完全不支持OpenGL)。
3、标准LGame包由于使用OpenGL编程,在不同屏幕手机中进行缩放时,可以较为有效的减少甚至消除画面失真,而LSE与LAE包则难以避免这种现象的产生(特别是大画面的游戏,在较小屏幕的手机上运行时)。
4、LSE与LAE版基本不受硬件环境限制,在大多数微机或手机中都能产生较为一致的刷新速度(当然,这并不意味着没有浮动,而是指不会出现某些机器上跑几帧,某些机器上跑数十、数百帧的极端情况),而LGame标准版的速度则受到硬件条件制约,对于某些不支持OpenGL硬件渲染的环境而言(比如ADT模拟器以及部分低端真机),它的速度甚至不如LSE与LAE版。因此从某种情况上讲,LSE与LAE版的兼容性要超过目前的标准LGame。
5、标准LGame包已经不再支持JavaME游戏组件的模拟,并删除了相关类。而在LSE与LAE版中,相关类依旧被保留了下来。
6、LSE与LAE版的主体结构虽与标准LGame一致,但辅助类明显较LGame标准版本为少(缺少几乎全部工具类以及很多特效类),而各类中提供的API也没有标准版完整。
也就是说LEA是一个不使用硬件加速的引擎,使用的是Canvas画布。
本人对OpenGL是99.9%的不懂,因此我选择学习LEA版本的LGame引擎。
只有两步:
1.&&导入LAE-1.1Jar包
2.&&导入so库文件,so库文件有两种,一种是armeabi文件夹下的so文件,一种是armeabi-v7a文件夹下的so文件。区别是前者使用与所有Android版本的系统,后者仅支持Android2.2及以上版本的系统,只是前者的文件比较大,个人按需选择。
3.&&好吧,太术语话了,导入就理解成复制吧。
OK,环境好了。
记得项目右键àBuild PathàConfigure Build PathàAdd JARs,把项目libs文件夹下的LAE1.1.jar包导入到项目中(这次真的是导入了)。
再啰嗦一下:
在AndroidManifest.xml中配置新的Activity时,一定要加入android:configChanges=&orientation|keyboardHidden&
属性,否则游戏无法强制横屏或者竖屏。暂时还不知道原因,以后再研究,我们的宗旨是,先学会使用,再探究原理。
源码(文档和libs包)下载:
原文第一次发布于Android-Fans论坛:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:439771次
积分:6970
积分:6970
排名:第919名
原创:136篇
评论:1376条
木头的新书出版喇!
文章:11篇
阅读:46536
文章:64篇
阅读:291976

我要回帖

更多关于 国光帮帮忙2014 的文章

 

随机推荐