只有你足够强,别人才会和你讲道理。
文章: 280
浏览: 3,026,600
  • 博主:笨木头
  • 关注:Unity、Net Core、Blazor
  • 邮箱:musicvs@163.com
笨木头  2012-05-03 08:55     LGame     阅读(9989)     评论(13)
转载请注明,原文地址: http://www.benmutou.com/archives/224
文章来源:笨木头与游戏开发

【LGame学堂】简单的精灵

 

关键字:LGame 入门 精灵

笨木头花心贡献,啥?花心?不呢,是用心~

转载请注明,原文地址:http://blog.csdn.net/musicvs/article/details/7530117

 

 

 

效果图:

 

灵,按照个人的理解,就是游戏中的生物,生物嘛,当然是要能懂的。跑来跑去的主角是精灵,和主角打架的怪物也是精灵~还有好多好多精灵,好吧,精灵不神秘,它也不过是一个被封装的动画。

 

public class GameScreen extends Screen {
 
private final String TAG = "GameScreen";
 
private LImage bgImg = null; /* 背景图片 */ 
private Sprite girlSprite = null; /* 精灵:一个弓手女孩 */
 
private Sprites sprMgr = null;  /* 精灵管理器 */
 

public GameScreen() {  /* 背景图片 */
 
  bgImg = LImage.createImage("assets/bgImg.jpg");  
 
  /* 加载精灵资源 */
 
  girlSprite = new Sprite("assets/girl.png", 103, 114);
 
  
 
  /* 设置精灵初始位置 */
 
  girlSprite.setLocation(50, 250);
 
  
 
  /* 将精灵加入精灵管理器 */
 
  sprMgr = new Sprites();
 
  sprMgr.add(girlSprite);
 
}
 

@Override
 
public void draw(LGraphics g) {
 
  /* 绘制图片,这个很简单哈,看看函数说明就好,和Android API差不多~ */
 
  g.drawImage(bgImg, 0, 0);
 
  
 
  /* -------------绘制精灵---------- */
 
  /* createUI方法会遍历精灵管理器里的所有精灵,
 
   * 并调用精灵的createUI方法,相当于drawMe,
 
   * 就是精灵绘制自己的方法 
   */
 
  sprMgr.createUI(g); 
  
 
  /* update方法也会遍历精灵管理器里的所有精灵,
 
   * 并调用精灵的update方法,update方法会更新精灵的帧数,
 
   * 可以理解为切换到精灵图片的下一帧。
 
   * 那,参数elapsedTime也就是刷新间隔了(单位毫秒) */
 
  sprMgr.update(100);
 
  
 
} @Override
 
public void alter(LTimerContext timer) {} @Override
 
public void onTouchDown(LTouch e) {} @Override
 
public void onTouchUp(LTouch e) {} @Override
 
public void onTouchMove(LTouch e) {}}


 

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

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

好吧,那就不说了~

-

啰嗦一下:

吧,还是有些话想说~Sprite就是一个LGame默认提供的精灵类,如果你不喜欢它,你可以自己创造一个精灵(好吧,多个也行)~怎么创造?只要你的类实现了ISprite接口,那它就被认为是一个精灵类,其它的,自由发挥~

-

再啰嗦一下:

Sprite的构造器:

 

个构造器有三个参数:

1.  filename 资源路径

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

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

-

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

 

有的动作都在一张图片里,相信大部分朋友都知道了。参数row就是图片宽除以每个动作的宽,参数col就是图片的高。

好吧,啰嗦完毕~


 

最后的啰嗦:

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

 

源码下载:http://download.csdn.net/detail/musicvs/4289615

 

原文第一次发布于Android-Fans论坛:http://www.android-fans.net/forum.php?mod=viewthread&tid=1493&page=1&extra=#pid4389

 

 

 

 

13 条评论
  • semenry 2013-10-16 15:42:23

    10-16 15:39:01.332: W/dalvikvm(27378): Unable to resolve superclass of Lmutou/study/lgame/loadRes/LGameStudyLoadResActivity; (19)10-16 15:39:01.332: W/dalvikvm(27378): Link of class 'Lmutou/study/lgame/loadRes/LGameStudyLoadResActivity;' failed10-16 15:39:01.342: D/AndroidRuntime(27378): Shutting down VM10-16 15:39:01.352: W/dalvikvm(27378): threadid=1: thread exiting with uncaught exception (group=0x409ee1f8)10-16 15:39:01.362: E/AndroidRuntime(27378): FATAL EXCEPTION: main10-16 15:39:01.362: E/AndroidRuntime(27378): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{mutou.study.lgame.loadRes/mutou.study.lgame.loadRes.LGameStudyLoadResActivity}: java.lang.ClassNotFoundException: mutou.study.lgame.loadRes.LGameStudyLoadResActivity10-16 15:39:01.362: E/AndroidRuntime(27378): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)10-16 15:39:01.362: E/AndroidRuntime(27378): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)10-16 15:39:01.362: E/AndroidRuntime(27378): at android.app.ActivityThread.access$600(ActivityThread.java:123)10-16 15:39:01.362: E/AndroidRuntime(27378): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)10-16 15:39:01.362: E/AndroidRuntime(27378): at android.os.Handler.dispatchMessage(Handler.java:99)10-16 15:39:01.362: E/AndroidRuntime(27378): at android.os.Looper.loop(Looper.java:137)10-16 15:39:01.362: E/AndroidRuntime(27378): at android.app.ActivityThread.main(ActivityThread.java:4424)10-16 15:39:01.362: E/AndroidRuntime(27378): at java.lang.reflect.Method.invokeNative(Native Method)10-16 15:39:01.362: E/AndroidRuntime(27378): at java.lang.reflect.Method.invoke(Method.java:511)10-16 15:39:01.362: E/AndroidRuntime(27378): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)10-16 15:39:01.362: E/AndroidRuntime(27378): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)10-16 15:39:01.362: E/AndroidRuntime(27378): at dalvik.system.NativeStart.main(Native Method)10-16 15:39:01.362: E/AndroidRuntime(27378): Caused by: java.lang.ClassNotFoundException: mutou.study.lgame.loadRes.LGameStudyLoadResActivity10-16 15:39:01.362: E/AndroidRuntime(27378): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)10-16 15:39:01.362: E/AndroidRuntime(27378): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)10-16 15:39:01.362: E/AndroidRuntime(27378): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)10-16 15:39:01.362: E/AndroidRuntime(27378): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)10-16 15:39:01.362: E/AndroidRuntime(27378): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)10-16 15:39:01.362: E/AndroidRuntime(27378): ... 11 more10-16 15:39:01.502: I/dalvikvm(27378): threadid=3: reacting to signal 310-16 15:39:01.502: I/dalvikvm(27378): Wrote stack traces to '/data/anr/traces.txt'10-16 15:39:01.902: I/dalvikvm(27378): threadid=3: reacting to signal 310-16 15:39:01.902: I/dalvikvm(27378): Wrote stack traces to '/data/anr/traces.txt'10-16 15:39:02.912: I/Process(27378): Sending signal. PID: 27378 SIG: 9
    0回复
  • M44346460 2012-05-19 22:37:00

    LGame那仁兄没出个完整的教程,想不到哥们,你出了。
    0回复
  • musicvs 2012-05-20 22:00:00

    [reply]M44346460[/reply]
    嘻嘻,我喜欢分享~只要有人愿意看我的教程,那我就很开心了~
    0回复
  • smaote 2012-05-24 09:20:00

    LZ写得很用心,这么篇文章放首页,访问量没200,我只能心寒。。体现了人们对国产引擎的不信任。
    再者大环境下,问10个程序员,有10个没有开发游戏的念头,只是念头。。
    0回复
  • musicvs 2012-05-24 09:31:00

    [reply]smaote[/reply]
    谢谢你,我不会放弃的,过几周我又会继续更新。哪怕只有那么几个人认真看,我也很欣慰了。当然,越多人看我会越开心~大家都加油,面对现实,保留一些追逐梦想的力气。
    0回复
  • yalurainbow 2012-07-06 14:50:00

    照着楼主的一样写好了,为啥我调试的时候,精灵显示总是不对呢?
    0回复
  • yalurainbow 2012-07-06 14:53:00

    而且照着官方教程g.drawImage(animation.getSpriteImage().getImage(),10,10);
    使用这个显示精灵后,FPS慢慢降至最低,让后就是

    07-06 14:35:52.941: E/AndroidRuntime(5246): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

    新手求指教啊!
    0回复
  • musicvs 2012-07-06 18:04:00

    [reply]yalurainbow[/reply]
    能发你的代码给我调试一下么?我QQ:357382814(晚上才在线哈~)
    0回复
  • yalurainbow 2012-07-06 20:24:00

    晕!
    才发现我使用的不是LAE,不能全按着楼主的来!
    0回复
  • musicvs 2012-07-06 20:43:00

    [reply]yalurainbow[/reply]
    哈哈,原来如此~我不懂OpenGl呢,所以只能先从Canvas的版本学起
    0回复
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发