在libgdx中,一般的逻辑流程都在rende()函数中执行,这个函数是由opengl的渲染线程调用的,一般的图形显示和逻辑处理都在这个线程中。

一般情形下,在这个线程中处理就行了。但是当某些逻辑处理比较费时,可能会引起画面卡顿、不连贯等现象。这时,可以将主要的逻辑处理放在另一个线程中,然后再即将进行图形渲染时再将其传送到render线程中执行。

回传采用Gdx.app.postRunnable()函数,该函数调用后,回传的那部分代码会在下一次render()函数调用之前执行。

具体实例:

  1. package com.fxb.newtest;
  2.  
  3. import com.badlogic.gdx.ApplicationAdapter;
  4. import com.badlogic.gdx.Gdx;
  5. import com.badlogic.gdx.graphics.Color;
  6. import com.badlogic.gdx.graphics.GL10;
  7. import com.badlogic.gdx.graphics.Texture;
  8. import com.badlogic.gdx.graphics.g2d.BitmapFont;
  9. import com.badlogic.gdx.graphics.g2d.SpriteBatch;
  10. import com.badlogic.gdx.graphics.g2d.TextureRegion;
  11. import com.badlogic.gdx.utils.Array;
  12.  
  13. public class Lib020_Thread extends ApplicationAdapter{
  14.  
  15. float currentTime;
  16. //float lastTime;
  17.  
  18. SpriteBatch batch;
  19. BitmapFont font;
  20. int count = 0;
  21.  
  22. Array<TextureRegion> array1 = new Array<TextureRegion>();
  23.  
  24. Thread thread = new Thread(){
  25. @Override
  26. public void run() {
  27. // TODO Auto-generated method stub
  28. //final int a = 2;
  29.  
  30. try{
  31. while(true)
  32. {
  33. Thread.sleep( 1000 );
  34. count++;
  35.  
  36. if( count == 3 ){
  37. Gdx.app.postRunnable(new Runnable(){
  38. @Override
  39. public void run() {
  40. // TODO Auto-generated method stub
  41. TextureRegion region = new TextureRegion( new Texture( Gdx.files.internal( "data/pal4_1.jpg" ) ) );
  42. array1.add( region );
  43. }
  44. });
  45. }
  46. if( count == 5 ){
  47. Gdx.app.postRunnable(new Runnable(){
  48. @Override
  49. public void run() {
  50. // TODO Auto-generated method stub
  51. TextureRegion region = new TextureRegion( new Texture( Gdx.files.internal( "data/badlogic.jpg" ) ) );
  52. array1.add( region );
  53. }
  54. });
  55. }
  56. }
  57. }
  58. catch(Exception e){
  59. e.printStackTrace();
  60. }
  61. }
  62. };
  63.  
  64. @Override
  65. public void create() {
  66. // TODO Auto-generated method stub
  67. super.create();
  68.  
  69. batch = new SpriteBatch();
  70. font = new BitmapFont();
  71. font.setColor( Color.BLACK );
  72.  
  73. thread.start();
  74.  
  75. //array1.add( new TextureRegion( new Texture( Gdx.files.internal( "data/badlogic.jpg" ) ) ) );
  76. }
  77.  
  78. @Override
  79. public void render() {
  80. // TODO Auto-generated method stub
  81. super.render();
  82. Gdx.gl.glClearColor( 1, 1, 1, 1 );
  83. Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT );
  84.  
  85. batch.begin();
  86.  
  87. float width = 0;
  88. for( int i=0; i<array1.size; ++i ){
  89. batch.draw( array1.get(i), width, 0 );
  90. width += array1.get(i).getRegionWidth()+5;
  91. }
  92. font.draw( batch, ""+count, 100, 280 );
  93. batch.end();
  94.  
  95. }
  96.  
  97. @Override
  98. public void dispose() {
  99. // TODO Auto-generated method stub
  100. super.dispose();
  101. font.dispose();
  102. batch.dispose();
  103. }
  104.  
  105. }

运行效果:

刚开始没有加入图片纹理区域:

第3秒后加入第一幅图片纹理区域:

第5秒加入第二幅图片纹理区域:

当某些逻辑运算或资源加载比较费时时,可以考虑多线程方式。

libgdx学习记录20——多线程MultiThread资源处理的更多相关文章

  1. libgdx学习记录16——资源加载器AssetManager

    AssetManager用于对游戏中的资源进行加载.当游戏中资源(图片.背景音乐等)较大时,加载时会需要较长时间,可能会阻塞渲染线程,使用AssetManager可以解决此类问题. 主要优点: 1. ...

  2. libgdx学习记录2——文字显示BitmapFont

    libgdx对中文支持不是太好,主要通过Hireo和ttf字库两种方式实现.本文简单介绍最基本的bitmapfont的用法. 代码如下: package com.fxb.newtest; import ...

  3. libgdx学习记录19——图片动态打包PixmapPacker

    libgdx中,opengl 1.x要求图片长宽必须为2的整次幂,一般有如下解决方法 1. 将opengl 1.x改为opengl 2.0.(libgdx 1.0版本后不支持1.x,当然不存在这个问题 ...

  4. libgdx学习记录12——圆角矩形CircleRect

    libgdx提供了ShapeRenderer这个工具,用它可以画点.画线.画圆.画矩形.画椭圆.画扇形,但是没有提供画圆角矩形的方法. 刚开始自己尝试分成8端,4端画直线,4端画扇形,发现多了半径几部 ...

  5. libgdx学习记录5——演员Actor

    Actor也是libgdx中非常重要的一个元素,一般与stage配合一起使用.Actor能够设置大小,位置,旋转和动画等. 我们自定义的Actor一般需要继承于Actor,并且重写其中的act和dra ...

  6. libgdx学习记录3——动画Animation

    libgdx动画采用Animation实现,即通过帧动画实现. 代码如下: package com.fxb.newtest; import com.badlogic.gdx.ApplicationAd ...

  7. libgdx学习记录26——Polygon多边形碰撞检测

    libgdx中Math封装了Polygon这个类,它是由多个定点进行描述实现的,在进行物体间的碰撞时,物体轮廓有时候是不规则的,这时候可以用一个多边形勾勒出其大概的轮廓,对其进行模拟. Polygon ...

  8. Python 第四阶段 学习记录之----多线程

    多线程 多线程例子, 注释部份即为多线程的使用 #-*- coding: utf-8 -*- # Wind clear raise # 2017/3/5 下午2:34 import socket im ...

  9. libgdx学习记录25——Rectangle与Circle是否重叠

    Rect与Circle重叠有三种情况: 1. Rect至少有一个角在Circle里面 2. Circle与Rect的左边或右边相交,或者Circle在Rect内 3. Circle与Rect的顶边或底 ...

随机推荐

  1. Android应用耗电量统计,无需USB连接

    Android应用耗电量统计一直是一个很头疼的问题,手工统计耗时太长,自动化统计又不是非常精准(执行自动化代码需要通过USB连接,而USB又会充电,这就造成统计数据不准).后来从前辈那里得知可以通过a ...

  2. Prometheus Node_exporter 之 Network Netstat TCP Linux MIPs

    Network Netstat TCP Linux MIPs1. TCP Aborts / Tiemouts type: GraphUnit: shortLabel: ConnectionsTCPAb ...

  3. Yearning v1.3.0 发布,Web 端 SQL 审核平台

    企业级MYSQL web端 SQL审核平台. Website 官网 www.yearning.io Feature 功能 数据库字典自动生成 SQL查询 查询工单 导出 自动补全,智能提示 查询语句审 ...

  4. python基础学习19----socket网络编程

    网络通信三要素 ip地址:InetAddress 网络中设备的标识,不易记忆,可用主机名(计算机的标识号) 端口号:用于标识进程的逻辑地址,不同进程的标识(正在运行的软件的标识号) 传输协议:通讯的规 ...

  5. Android开发中使用七牛云存储进行图片上传下载

    Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...

  6. Python学习---Python环境变量安装问题0907

    问题背景: 重新安装操作系统后,原来的环境变量丢失[因Python3.5安装目录是E盘,文件还在,只是丢失了环境变量而已,添加即可] 问题解决: 方法一:使用cmd命令添加path环境变量 在cmd下 ...

  7. Coursera-AndrewNg(吴恩达)机器学习笔记——第三周编程作业(逻辑回归)

    一. 逻辑回归 1.背景:使用逻辑回归预测学生是否会被大学录取. 2.首先对数据进行可视化,代码如下: pos = find(y==); %找到通过学生的序号向量 neg = find(y==); % ...

  8. hadoop集群为分布式搭建

    1.准备Linux环境设置虚拟机网络    1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改 ...

  9. myeclipse10配置maven

    一:Maven的下载安装 准备工作: 1)安装环境 Windows xp 2)需安装JDK ,并配置环境变量(略) 3) Maven版本3.0.5 4)下载地址:http://mirror.bit.e ...

  10. BZOJ1458:士兵占领(有上下界最小流)

    Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放 ...