lgame入门教程Word格式.docx

上传人:b****4 文档编号:8063244 上传时间:2023-05-10 格式:DOCX 页数:45 大小:2.08MB
下载 相关 举报
lgame入门教程Word格式.docx_第1页
第1页 / 共45页
lgame入门教程Word格式.docx_第2页
第2页 / 共45页
lgame入门教程Word格式.docx_第3页
第3页 / 共45页
lgame入门教程Word格式.docx_第4页
第4页 / 共45页
lgame入门教程Word格式.docx_第5页
第5页 / 共45页
lgame入门教程Word格式.docx_第6页
第6页 / 共45页
lgame入门教程Word格式.docx_第7页
第7页 / 共45页
lgame入门教程Word格式.docx_第8页
第8页 / 共45页
lgame入门教程Word格式.docx_第9页
第9页 / 共45页
lgame入门教程Word格式.docx_第10页
第10页 / 共45页
lgame入门教程Word格式.docx_第11页
第11页 / 共45页
lgame入门教程Word格式.docx_第12页
第12页 / 共45页
lgame入门教程Word格式.docx_第13页
第13页 / 共45页
lgame入门教程Word格式.docx_第14页
第14页 / 共45页
lgame入门教程Word格式.docx_第15页
第15页 / 共45页
lgame入门教程Word格式.docx_第16页
第16页 / 共45页
lgame入门教程Word格式.docx_第17页
第17页 / 共45页
lgame入门教程Word格式.docx_第18页
第18页 / 共45页
lgame入门教程Word格式.docx_第19页
第19页 / 共45页
lgame入门教程Word格式.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

lgame入门教程Word格式.docx

《lgame入门教程Word格式.docx》由会员分享,可在线阅读,更多相关《lgame入门教程Word格式.docx(45页珍藏版)》请在冰点文库上搜索。

lgame入门教程Word格式.docx

2011-11-20 

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引擎。

只有两步:

导入LAE-1.1Jar包

导入so库文件,so库文件有两种,一种是armeabi文件夹下的so文件,一种是armeabi-v7a文件夹下的so文件。

区别是前者使用与所有Android版本的系统,后者仅支持Android2.2及以上版本的系统,只是前者的文件比较大,个人按需选择。

3. 

好吧,太术语话了,导入就理解成复制吧。

OK,环境好了。

啰嗦一下:

记得项目右键à

BuildPathà

ConfigureBuildPathà

AddJARs,把项目libs文件夹下的LAE1.1.jar包导入到项目中(这次真的是导入了)。

再啰嗦一下:

在AndroidManifest.xml中配置新的Activity时,一定要加入android:

configChanges="

orientation|keyboardHidden"

属性,否则游戏无法强制横屏或者竖屏。

暂时还不知道原因,以后再研究,我们的宗旨是,先学会使用,再探究原理。

源码(文档和libs包)下载:

原文第一次发布于Android-Fans论坛:

http:

//www.android-

最终效果:

这个很简单的,看Activity的代码:

[java] 

viewplaincopyprint?

1.public 

class 

LGameStudyActivity 

extends 

LGameAndroid2DActivity 

2. 

3. 

@Override 

4. 

5. 

public 

void 

onGamePaused() 

6. 

7. 

8. 

9. 

10. 

11. 

12. 

onGameResumed() 

13. 

14. 

15. 

16. 

17. 

18. 

19. 

onMain() 

20. 

21. 

/* 

设置游戏是否横屏 

*/ 

22. 

23. 

this.initialization(true);

24. 

25. 

26. 

给Activity赋予一个画面,有点类似于View 

27. 

28. 

this.setScreen(new 

ScreenExample());

29. 

30. 

31. 

这个厉害了,指定游戏的帧速率,每秒30帧 

32. 

33. 

this.setFPS(30);

34. 

35. 

36. 

是否显示游戏帧数(当然显示喇) 

37. 

38. 

this.setShowFPS(true);

39. 

40. 

41. 

不显示Logo(这个没试过显示,先不管,我们要的是HelloWorld) 

42. 

43. 

this.setShowLogo(false);

44. 

45. 

46. 

OK,一切准备就绪,显示游戏画面 

47. 

48. 

this.showScreen();

49. 

50. 

51. 

52.} 

53. 

54.注:

这个是由官方文档里的一个例子里修改得到的代码。

引擎自己封装了一个Activity,叫做LGameAndroid2DActivity。

代码很简单,我已经注释得很清楚了~希望大家能看懂我的文字~

这里啰嗦一下:

为什么要在onMain()函数里做初始化呢?

其实没有为什么,我们完全可以在onCreate()函数里初始化的,不信?

看看LGameAndroid2DActivity类里onCreate函数的源码:

onCreate(Bundle 

icicle) 

super.onCreate(icicle);

LSystem.gc();

Log.i("

Android2DActivity"

 

"

2D 

Engine 

Start"

);

// 

构建整个游戏使用的最底层FrameLayout 

this.frameLayout 

new 

FrameLayout(LGameAndroid2DActivity.this);

当此项为True时,Back键无法退出游戏(默认为False) 

this.isBackLocked 

false;

当此项为False时,Activity在onDestroy仅关闭当前Activity,而不关闭整个程序(默认为True) 

this.isDestroy 

true;

this.onMain();

23.} 

嘿嘿,其它的代码不管,看最后那行:

好了,很清楚了吧?

实际上还是调用了onCreate函数进行初始化操作的,最后调用了onMain函数。

那咱们就在onMain()函数里做初始化操作吧,一样的。

现在来看看咱们的Screen,画面:

ScreenExample 

Screen 

ScreenExample() 

官方解释:

与J2SE版相同,draw中LGraphics会根据设定的FPS自动刷新,使用上与标准的J2SE 

Graphics以及J2MEGraphics接口没有区别(API为二者的综合) 

draw(LGraphics 

g) 

简单吧?

就是咱们的canvas.drawColor(Color.GRAY) 

g.drawClear(LColor.gray);

来了,我们的最爱——HelloWorld!

太简单了,我都不想解释了,绘制"

HelloWorld"

字符串到屏幕的(100,100)位置 

g.drawString("

100, 

100);

alter(LTimerContext 

arg0) 

onTouchDown(LTouch 

52. 

onTouchMove(LTouch 

54. 

55. 

56. 

57. 

58. 

59. 

60. 

onTouchUp(LTouch 

61. 

62. 

63. 

64.} 

65. 

66. 

67.注:

代码由官方文档中的实例修改。

这个也很简单,在draw函数里加上我们的绘制操作就好了:

g.drawClear(LColor.gray);

也就是我们常常做的清屏

g.drawString("

100,100);

和canvas的drawText类似的,实际上就是调用了drawText函数。

OK,运行程序,你会看到HelloWorld~!

这里再啰嗦一下:

如:

1.<

application 

android:

icon="

@drawable/icon"

label="

@string/app_name"

>

<

activity 

name="

.LGameStudyActivity"

intent-filter>

action 

android.intent.action.MAIN"

/>

category 

android.intent.category.LAUNCHER"

/intent-filter>

/activity>

/application>

1.private 

LImage 

bgImg 

null;

背景图片 

3.private 

tipImg 

文字图片 

7.public 

GameScreen() 

加载资源方式1:

加载Assets目录的资源,必须制定assets目录名称 

LImage.createImage("

assets/bgImg.jpg"

加载资源方式2:

加载res目录的资源,必须制定res目录名称,包括子目录 

res/drawable/tip.png"

21.} 

LGame加载资源的方式当然也离不开Android的限制喇,也是两种:

加载Assets目录的资源

加载Res目录的资源

啰嗦一下:

这里要注意喇,资源路径必须要完整,比如要加载assets目录的资源,那给出的路径必须包含“assets”,同理,要加载res目录里drawable目录的资源,必须给出“res/drawable”路径..这个有点郁闷,不过没什么大影响。

关于资源加载,初步探索就是这样喇~以后有新发现再和大家分享~

精灵,按照个人的理解,就是游戏中的生物,生物嘛,当然是要能懂的。

跑来跑去的主角是精灵,和主角打架的怪物也是精灵~还有好多好多精灵,好吧,精灵不神秘,它也不过是一个被封装的动画。

从代码中可以看出,精灵由一个精灵管理器管理,所有精灵的绘制都通过精灵管理器来调用。

哎吖,由于这个例子实在是有点过于简单,实在是不知道说些啥~

好吧,那就不说了~

-

好吧,还是有些话想说~Sprite就是一个LGame默认提供的精灵类,如果你不喜欢它,你可以自己创造一个精灵(好吧,多个也行)~怎么创造?

只要你的类实现了ISprite接口,那它就被认为是一个精灵类,其它的,自由发挥~

看看Sprite的构造器:

这个构造器有三个参数:

filename资源路径

row每一帧截取图片资源的上的宽

col每一帧截取图片资源上的高

第2、第3个参数稍微解释一下,这个构造器需要一种这样的图片资源:

所有的动作都在一张图片里,相信大部分朋友都知道了。

参数row就是图片宽除以每个动作的宽,参数col就是图片的高。

好吧,啰嗦完毕~

最后的啰嗦:

也许有人已经发现了,我每次用的GameScreen类都是继承Screen的,其实LGame还有一个CanvasScreen的,但是我暂时还不知道什么时候用Screen什么时候用CanvasScreen~等我弄懂了再和大家分享哈,嘿嘿~

本章来聊聊精灵传说之我是定时器~

木头惯例,先上图:

实现的效果就是一个精灵不断地在跑,不断地跑?

你想累死她吗?

~

所以,当然要让她休息一下喇~于是...

她每隔2秒钟休息一次...

太懒了点吧...

说了这么多,先上代码,再听我解释,主要要解释两样东西:

LGame的定时器,LTimer类

钩子函数

代码里有一个LMessage控件,关于它的所有操作,请大家忽略,不要被影响了,它不是本文的研究对象,以后学到控件的时候再一起探讨~

1.定时器。

创建定时器很简单:

LTimerrestTimer=newLTimer(2000);

这样就创建了一个每隔两秒执行一次的定时器。

有一点一定要注意,定时器什么时候开始启动?

当然是由我们来控制喇。

这样启动:

resTimer.start();

OK,很简单吧?

虽说LTimer是定时器,但是它实际上是不会定做执行任务的。

说得实在一点,它只是一个计时器,唯一能做的就是,告诉你是否到时间了。

比如我们在早上8点50分40秒的时候启动了上面创建的定时器,在8点50分42秒或之后,你再去问问这个定时器,它就是告诉

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2