libgdx学习记录23——图片移动选择

模拟移动选择图片,采用相机实现。

  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.glutils.ShapeRenderer;
  9 import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
 10 import com.badlogic.gdx.input.GestureDetector;
 11 import com.badlogic.gdx.input.GestureDetector.GestureAdapter;
 12 import com.badlogic.gdx.scenes.scene2d.Action;
 13 import com.badlogic.gdx.scenes.scene2d.Stage;
 14 import com.badlogic.gdx.scenes.scene2d.actions.Actions;
 15 import com.badlogic.gdx.scenes.scene2d.ui.Image;
 16
 17 public class Lib025_PicChange extends ApplicationAdapter{
 18
 19     GestureAdapter gestureAdapter = new GestureAdapter(){
 20         @Override
 21         public boolean fling(float velocityX, float velocityY, int button) {
 22             // TODO Auto-generated method stub
 23 /*            if( velocityX > 0 ){
 24                 System.out.println( "fling right" );
 25                 stage.getCamera().translate( -stage.getWidth(), 0, 0 );
 26             }
 27             else{
 28                 System.out.println( "fling left" );
 29                 stage.getCamera().translate( stage.getWidth(), 0, 0 );
 30             }*/
 31
 32             return super.fling(velocityX, velocityY, button);
 33         }
 34
 35
 36
 37         @Override
 38         public boolean pan(float x, float y, float deltaX, float deltaY) {
 39             // TODO Auto-generated method stub
 40             System.out.println( "pan" );
 41             if( index>0 && deltaX>0 || index<imgs.length-1 && deltaX<0 ){
 42                 stage.getCamera().translate( -deltaX, 0, 0 );
 43                 add = deltaX > 0? -1: 1;
 44             }
 45
 46             return super.pan(x, y, deltaX, deltaY);
 47         }
 48
 49
 50
 51         @Override
 52         public boolean panStop(float x, float y, int pointer, int button) {
 53             // TODO Auto-generated method stub
 54             System.out.println( "pan stop" );
 55             if( index>0 && add==-1 || index<imgs.length-1 && add==1 ){
 56                 index += add;
 57                 stage.getCamera().position.set( index*500+stage.getWidth()/2, stage.getHeight()/2, 0 );
 58             }
 59             return super.panStop(x, y, pointer, button);
 60         }
 61
 62
 63
 64
 65     };
 66     GestureDetector detector = new GestureDetector( gestureAdapter );
 67
 68     Stage stage;
 69     Image img1, img2, img3, img4;
 70     Image[] imgs;
 71     int index;
 72     int add = 0;
 73     ShapeRenderer rend;
 74
 75     @Override
 76     public void create() {
 77         // TODO Auto-generated method stub
 78         super.create();
 79         Gdx.input.setInputProcessor( detector );
 80
 81         img1 = new Image( new Texture( Gdx.files.internal( "data/pal4_0.jpg" ) ) );
 82         img2 = new Image( new Texture( Gdx.files.internal( "data/pal4_1.jpg" ) ) );
 83         img3 = new Image( new Texture( Gdx.files.internal( "data/pal4_2.jpg" ) ) );
 84         img4 = new Image( new Texture( Gdx.files.internal( "data/pal4_3.jpg" ) ) );
 85
 86         stage = new Stage();
 87         stage.addActor( img1 );
 88         stage.addActor( img2 );
 89         stage.addActor( img3 );
 90         stage.addActor( img4 );
 91
 92         imgs = new Image[]{ img1, img2, img3, img4 };
 93
 94         for( int i=0; i<imgs.length; ++i ){
 95             imgs[i].setSize( 400, 240 );
 96             imgs[i].setPosition( i*500 + stage.getWidth()/2-imgs[i].getWidth()/2, stage.getHeight()/2-imgs[i].getHeight()/2 );
 97         }
 98
 99         //imgs[1].setVisible( false );
100         //imgs[2].setVisible( false );
101         index = 0;
102         rend = new ShapeRenderer();
103     }
104
105     @Override
106     public void render() {
107         // TODO Auto-generated method stub
108         super.render();
109         Gdx.gl.glClearColor( 1, 1, 1, 1 );
110         Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT );
111         stage.act();
112         stage.draw();
113
114         rend.begin( ShapeType.Filled );
115         rend.setColor( Color.LIGHT_GRAY );
116         rend.rect( 0, 0, 100, 480 );
117         rend.rect( 700, 0, 100, 480 );
118         rend.rect( 100, 0, 700, 60 );
119         rend.rect( 100, 420, 700, 60 );
120         rend.end();
121
122     }
123
124     @Override
125     public void dispose() {
126         // TODO Auto-generated method stub
127         rend.dispose();
128         stage.dispose();
129         super.dispose();
130     }
131
132 }

运行结果:

libgdx学习记录23——图片移动选择,布布扣,bubuko.com

时间: 2024-08-08 21:30:23

libgdx学习记录23——图片移动选择的相关文章

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

libgdx中,opengl 1.x要求图片长宽必须为2的整次幂,一般有如下解决方法 1. 将opengl 1.x改为opengl 2.0.(libgdx 1.0版本后不支持1.x,当然不存在这个问题,这里针对的是0.9.9版本) 2. 使用TexturePacker将图片打包好然后作成一张大图添加进来. 第二种方法是常用方法,但是不太灵活,添加.删除某些图片不太方便,改动较大.这里可以考虑使用PixmapPacker将图片进行动态打包. 主要方法: pack(String name, Pixm

libgdx学习记录1——图片显示

libgdx底层采用opengl渲染,对图片进行了优化处理,与android原生态的bitmap不太一样. 相比而言,效率要高一些,不过只支持png,jpg,bmp三种格式. 显示中,一般将图片放在assets文件下,表示是Gdx的内部文件. gl1.x使用的图片的宽高必须是2的整次幂,而在gl2.0以后的版本则没有此限制. 使用的版本为libgx 0.9.9. 代码如下: package com.fxb.bird; import com.badlogic.gdx.ApplicationAdap

libgdx学习记录17——照相机Camera

照相机在libgdx中的地位举足轻重,贯穿于整个游戏开发过程的始终.一般我们都通过Stage封装而间接使用Camera,同时我们也可以单独使用Camera以完成背景的移动.元素的放大.旋转等操作. Camera分为PerspectiveCamera(远景照相机)和OrthographicCamera(正交照相机). PerspectiveCamera为正常的照相机,当距离物体越远,则物体越小,一般在3D空间中使用. OrthographicCamera忽略了其Z轴,不管距离物体多远,其大小始终不

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

AssetManager用于对游戏中的资源进行加载.当游戏中资源(图片.背景音乐等)较大时,加载时会需要较长时间,可能会阻塞渲染线程,使用AssetManager可以解决此类问题. 主要优点: 1. 大多数资源加载器AssetLoader都是异步加载,可以避免阻塞渲染线程. 2. 通过引用计数来进行释放资源. 3. 通过一个对象来管理所有其他资源. 主要函数: load(path,type)加载某个路径的资源文件,后面type指定所要加载的资源类型.这个函数只是将资源文件加入到资源队列中,并不会

libgdx学习记录11——平铺地图TiledMap

地图对于游戏场景十分重要,很多游戏都需要对地图进行编辑,可使用TileMap进行编辑并生成对应的tmx格式地图文件. 编辑好后,可通过TmxMapLoader来读取地图文件.可通过一个正交相机OthographicCamera和正交地图渲染器OrthogonalTiledMapRenderer来进行显示. 实例如下: 1 package com.fxb.newtest; 2 3 import com.badlogic.gdx.ApplicationAdapter; 4 import com.ba

libgdx学习记录5——演员Actor

Actor也是libgdx中非常重要的一个元素,一般与stage配合一起使用.Actor能够设置大小,位置,旋转和动画等. 我们自定义的Actor一般需要继承于Actor,并且重写其中的act和draw方法. 自定义的actor是一个图片. 1 class MyActor extends Actor{ 2 TextureRegion region; 3 4 public MyActor(){ 5 Texture texture = new Texture( Gdx.files.internal(

libgdx学习记录21——Box2d物理引擎之碰撞Contact、冲量Impulse、关节Joint

Box2d中,物体可以接受力(Force).冲量(Impulse)和扭矩(Torque).这些物理元素都能改变物体的运动形式,并且默认都会唤醒物体,当然只是针对动态物体. 力是一个持久的效果,通过Box2d内置的积分器实现运动变化. 冲量是一个瞬时效果,能立马改变其效果. 主要函数: body.applyLinearImpulse( Vector2 impulse, Vector2 position, boolean wakeup ) 第一个参数表示冲量,包含x和y方向的大小. 第二个参数表示施

libgdx学习记录18——Box2d物理引擎

libgdx封装了Box2D物理引擎,通过这个引擎能够模拟物理现实,使设计出的游戏更具有真实感. libgdx中,Box2d程序的大概过程: 1. 创建物理世界world,并设置重力加速度. 2. 创建正交相机,并设置其宽高.Box2d中使用物理世界中米作为单位,而不是图像中的像素,通常设一个比值,这里为了方便,直接设置为10. 3. 创建世界中的动态物体(一般是方块.圆环或其他形状物体)和静态物体(主要指地面.墙壁等). 4. 在渲染函数中添加world时间布,并利用DebugRenderer

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

libgdx中Math封装了Polygon这个类,它是由多个定点进行描述实现的,在进行物体间的碰撞时,物体轮廓有时候是不规则的,这时候可以用一个多边形勾勒出其大概的轮廓,对其进行模拟. Polygon内部自带是否包含点contains这个函数,通过这个函数我们可以判断两个多变行是否碰撞,即检测两个多边形的每个点是否在另一个多边形中. 检测代码: 1 public static boolean isOverlap(Polygon polygon1, Polygon polygon2){ 2 for