Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 347|回复: 0

[Java基础知识]游戏Loaading的设计-

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 18:04:07 | 显示全部楼层 |阅读模式
    为什么很多游戏要加入Loading滚动条呢?加入Loading状态并不是为了使软件显得更专业美观,而是为了保证程序的运行内存不溢出。通常计算机/手机的存储系统分为:cup 的缓存,磁盘(或者手机中的存储用的的FLASH RAM或者其他类型的可以持久保存的存储系统),运行内存。我们知道通常NOKIA S40的heap size为200KB大小,而通常我们加入程序和3张128*128的图片之后内存就趋于崩溃了,再加入声音和地图,程序的运算内存就显得太不够了。一般来讲,很多游戏仅仅在运行的时候把所有的资源一次性读入heap memory这样,我们在模拟器看到程序运行的状况就非常接近崩溃的边缘,如果不小心加入了新的图片,可能就没有足够的运算内存了。
                 我们如何解决heap size不够的事情呢?手机是不能够改变其heap size的,我们只有想办法控制heap memory的使用。最直观的做法就是:存储内存与运算内存的优化使用,当运算内存需要资源时从存储内存中调用,需要新的资源时,就把不需要的释放掉。下面我就结合一段代码解释我们是如何制作Loading状态的。
                
      
       
      
      
           众所周知,java是内置多线程的,我们可以使用两个线程来解决loading的问题,一个读资源的线程,一个绘制资源的线程。程序代码: import javax.microedition.midlet.*;
    import javax.microedition.lcdui.*; /**
      * Loading演示
      * @author gaogao
      * */
    class MainCanvas
         extends Canvas
         implements Runnable { //程序状态
       static final int LOADING = 0;
       static final int GAMEING = 1; //程序状态控制器
       int state = LOADING; //主线程
       Thread thread = null;
    //是否loading完毕,
       boolean isLoaded = false; //内部类,新开读取资源的 线程
       class Loading
           implements Runnable {
         //内线程
         Thread innerThread = null;     public Loading() {
           innerThread = new Thread(this);
           innerThread.start();
         }     int counter = 100;
         public void run() {
           //模拟读取资源
           //把下面的东西改成读取资源的代码即可
           while (counter > 0) {
             counter--;
             try {
               Thread.sleep(20);
             }
             catch (Exception ex) {}
           }
           //loading结束
           isLoaded = true;
         }
       }   Loading loading = null;   public MainCanvas() {
         loading = new Loading();
         thread = new Thread(this);
         thread.start();   }   int loadingCounter = 0; //绘制..
       public void paint(Graphics g) {
         g.setColor(0);
         g.fillRect(0, 0, getWidth(), getHeight());
         switch (state) {
           case LOADING: {
             g.setColor(0XFFFFFF);         g.drawString("LOADING" + ">>>>>".substring(0, loadingCounter),
                          getWidth() >> 1, getHeight() >> 1,
                          Graphics.HCENTER | Graphics.TOP);         loadingCounter = ++loadingCounter % 5;       }
           break;
           case GAMEING: {
             g.setColor(0XFFFFFF);
             g.drawString("GAME", getWidth() >> 1, getHeight() >> 1,
                          Graphics.HCENTER | Graphics.TOP);
           }
           break;
         }
       }   public void run() {
         while (true) {
           try {
             Thread.sleep(100);
           }
           catch (Exception ex) {       }
           if (isLoaded) {
             loading = null;
             state = GAMEING;
           }
           repaint(0, 0, getWidth(), getHeight());
           serviceRepaints();
         }
       }
    } public class Main
         extends MIDlet {
       MainCanvas mc;   public void startApp() {     if (mc == null) {
           mc = new MainCanvas();
           Display disp = Display.getDisplay(this);
           disp.setCurrent(mc);
         }
       }   public void destroyApp(boolean bool) {}   public void pauseApp() {}
    }
      
      


      
      
       
       

         
       

         
       
      
      
      

      










    源码下载:http://www.hnzz3z.com:8103/zz3zcwb/cwb/dir2/no
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-7 18:09 , Processed in 0.388525 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表