libgdx [TiledMap Objects]
来源:互联网 发布:天天有喜知画疗伤视频 编辑:程序博客网 时间:2024/06/15 20:06
坐标系问题:
libgdx 笛卡尔坐标系 原点坐标右下角
TiledMap 原点坐标左上角
package com.mygdx.game;import com.badlogic.gdx.Application;import com.badlogic.gdx.ApplicationAdapter;import com.badlogic.gdx.Gdx;import com.badlogic.gdx.Input;import com.badlogic.gdx.InputProcessor;import com.badlogic.gdx.assets.AssetManager;import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver;import com.badlogic.gdx.audio.Music;import com.badlogic.gdx.graphics.Color;import com.badlogic.gdx.graphics.GL20;import com.badlogic.gdx.graphics.OrthographicCamera;import com.badlogic.gdx.graphics.Texture;import com.badlogic.gdx.graphics.g2d.Animation;import com.badlogic.gdx.graphics.g2d.BitmapFont;import com.badlogic.gdx.graphics.g2d.Sprite;import com.badlogic.gdx.graphics.g2d.SpriteBatch;import com.badlogic.gdx.graphics.g2d.TextureAtlas;import com.badlogic.gdx.graphics.g2d.TextureRegion;import com.badlogic.gdx.graphics.glutils.ShapeRenderer;import com.badlogic.gdx.maps.MapLayer;import com.badlogic.gdx.maps.MapObject;import com.badlogic.gdx.maps.MapObjects;import com.badlogic.gdx.maps.MapProperties;import com.badlogic.gdx.maps.objects.EllipseMapObject;import com.badlogic.gdx.maps.objects.PolygonMapObject;import com.badlogic.gdx.maps.objects.RectangleMapObject;import com.badlogic.gdx.maps.tiled.TiledMap;import com.badlogic.gdx.maps.tiled.TiledMapRenderer;import com.badlogic.gdx.maps.tiled.TiledMapTileLayer;import com.badlogic.gdx.maps.tiled.TmxMapLoader;import com.badlogic.gdx.maps.tiled.objects.TiledMapTileMapObject;import com.badlogic.gdx.maps.tiled.renderers.IsometricTiledMapRenderer;import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;import com.badlogic.gdx.maps.tiled.tiles.AnimatedTiledMapTile;import com.badlogic.gdx.math.Ellipse;import com.badlogic.gdx.math.MathUtils;import com.badlogic.gdx.math.Polygon;import com.badlogic.gdx.math.Rectangle;import com.badlogic.gdx.math.Vector2;import com.badlogic.gdx.scenes.scene2d.Actor;import com.badlogic.gdx.scenes.scene2d.Stage;import com.badlogic.gdx.scenes.scene2d.ui.Image;import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;import com.badlogic.gdx.scenes.scene2d.ui.Label;import com.badlogic.gdx.scenes.scene2d.ui.Skin;import com.badlogic.gdx.scenes.scene2d.ui.Table;import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;import com.badlogic.gdx.utils.Align;import com.badlogic.gdx.utils.Array;import com.badlogic.gdx.utils.viewport.FitViewport;import com.badlogic.gdx.utils.viewport.ScreenViewport;import com.badlogic.gdx.utils.viewport.Viewport;import org.w3c.dom.css.Rect;public class MyGdxGame extends ApplicationAdapter { private static final float SCALE = 0.2963f; private static final int VIRTUAL_WIDTH = (int)(1920 * SCALE); private static final int VIRTUAL_HEIGHT = (int)(1080 * SCALE); private static final float CAMERA_SPEED = 100.0f; private OrthographicCamera camera; private Viewport viewport; private SpriteBatch batch; private TiledMap map; private TmxMapLoader loader; private OrthogonalTiledMapRenderer renderer; private Vector2 direction; private Array<Sprite> triggers; private Music song; @Override public void create() { camera = new OrthographicCamera(); viewport = new FitViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, camera); batch = new SpriteBatch(); loader = new TmxMapLoader(); map = loader.load("data/maps/tiled/tiles.tmx"); renderer = new OrthogonalTiledMapRenderer(map, batch); direction = new Vector2(); processMapMetadata(); } @Override public void dispose() { map.dispose(); renderer.dispose(); batch.dispose(); song.dispose(); } @Override public void render() { Gdx.gl.glClearColor(0.8f, 0.8f, 0.8f, 1.0f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); updateCamera(); renderer.setView(camera); renderer.render(); batch.begin(); for (Sprite trigger : triggers) { trigger.draw(batch); } batch.end(); } @Override public void resize(int width, int height) { viewport.update(width, height); } private void updateCamera() { direction.set(0.0f, 0.0f); int mouseX = Gdx.input.getX(); int mouseY = Gdx.input.getY(); int width = Gdx.graphics.getWidth(); int height = Gdx.graphics.getHeight(); if (Gdx.input.isKeyPressed(Input.Keys.LEFT) || (Gdx.input.isTouched() && mouseX < width * 0.25f)) { direction.x = -20; } else if (Gdx.input.isKeyPressed(Input.Keys.RIGHT) || (Gdx.input.isTouched() && mouseX > width * 0.75f)) { direction.x = 20; } if (Gdx.input.isKeyPressed(Input.Keys.UP) || (Gdx.input.isTouched() && mouseY < height * 0.25f)) { direction.y = 20; } else if (Gdx.input.isKeyPressed(Input.Keys.DOWN) || (Gdx.input.isTouched() && mouseY > height * 0.75f)) { direction.y = -20; } //direction.nor().scl(CAMERA_SPEED).scl(Gdx.graphics.getDeltaTime());; camera.position.x += direction.x; camera.position.y += direction.y; TiledMapTileLayer layer = (TiledMapTileLayer)map.getLayers().get(0); float cameraMinX = viewport.getWorldWidth() * 0.5f; float cameraMinY = viewport.getWorldHeight() * 0.5f; float cameraMaxX = layer.getWidth() * layer.getTileWidth() - cameraMinX; float cameraMaxY = layer.getHeight() * layer.getTileHeight() - cameraMinY; camera.position.x = MathUtils.clamp(camera.position.x, cameraMinX, cameraMaxX); camera.position.y= MathUtils.clamp(camera.position.y, cameraMinY, cameraMaxY); camera.update(); } private void processMapMetadata() { // Load music String songPath = map.getProperties().get("music", String.class); song = Gdx.audio.newMusic(Gdx.files.internal(songPath)); song.setLooping(true); song.play(); // Load entities System.out.println("Searching for game entities...\n"); triggers = new Array<Sprite>(); MapObjects objects = map.getLayers().get("objects").getObjects(); for (MapObject object : objects) { String name = object.getName(); String[] parts = name.split("[.]"); TiledMapTileMapObject rectangleObject = (TiledMapTileMapObject)object; TextureRegion textureRegion = rectangleObject.getTextureRegion(); System.out.println("Objectfound- textureRegion: " + textureRegion); MapProperties mapProperties = object.getProperties(); int id = (Integer)mapProperties.get("gid"); System.out.println("Objectfound- gid: " + id); Rectangle rectangle = new Rectangle(); rectangle.setX(Float.parseFloat(mapProperties.get("x").toString())); float y = Float.parseFloat(mapProperties.get("y").toString()); rectangle.setY(y); rectangle.setWidth(Float.parseFloat(mapProperties.get("width").toString())); float height= Float.parseFloat(mapProperties.get("height").toString()); rectangle.setHeight(height); System.out.println("Objectfound- y: " + y+ " heght:"+height); System.out.println("Objectfound- name: " + name); if (parts.length > 0 && parts[0].equals("trigger")) { Sprite trigger = new Sprite(textureRegion); //trigger.setColor(1.0f, 1.0f, 1.0f, 0.5f); //trigger.setScale(rectangle.width, rectangle.height); trigger.setPosition(rectangle.x, rectangle.y + height); triggers.add(trigger); } } }}
效果图:
tiles.tmx:
<?xml version="1.0" encoding="UTF-8"?><map version="1.0" orientation="orthogonal" renderorder="right-down" width="45" height="10" tilewidth="32" tileheight="32"> <properties> <property name="music" value="data/music/song_1.mp3"/> </properties> <tileset firstgid="1" name="tukuai1" tilewidth="32" tileheight="32" spacing="1" margin="1"> <image source="tiles.png" width="512" height="256"/> </tileset> <layer name="块层 1" width="45" height="10"> <data encoding="csv">6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,21,22,51,51,51,81,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,81,81,51,51,51,51,51,51,51,51,51,51,51,51,51,81,81,81,51,51,51,22,23,21,22,51,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,51,22,23,21,22,51,22,46,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,48,22,51,22,23,21,22,51,22,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,78,22,51,22,23,21,22,51,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,51,22,23,21,22,51,51,51,81,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,81,81,51,51,51,51,51,51,51,51,51,51,51,51,51,81,81,81,51,51,51,22,23,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,36,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38</data> </layer> <imagelayer name="图像图层 1" x="224" y="192"> <image source="1.png"/> </imagelayer> <objectgroup name="objects"> <object name="trigger.num1" gid="52" x="384" y="96" width="32" height="32"/> <object name="trigger.num2" gid="52" x="384" y="256" width="32" height="32"/> <object name="trigger.num3" gid="52" x="0" y="320" width="32" height="32"/> <object name="trigger.num4" gid="52" x="0" y="32" width="32" height="32"/> <object name="trigger.num5" gid="52" x="1408" y="32" width="32" height="32"/> <object name="trigger.num6" gid="52" x="1408" y="320" width="32" height="32"/> </objectgroup></map>
tiles.png:
1.png:
0 0
- libgdx [TiledMap Objects]
- libgdx [TiledMap]
- libgdx之瓦片地图(TiledMap)
- LibGDX游戏引擎-10-游戏地图(TiledMap)
- android游戏开发框架libgdx的使用 TiledMap地图的使用
- android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动
- android游戏开发框架libgdx的使用(十二)—TiledMap地图的使用
- android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动
- android游戏开发框架libgdx的使用(十七)—TiledMap中角色的行动路径
- android游戏开发框架libgdx的使用(十二)—TiledMap地图的使用
- android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动
- android游戏开发框架libgdx的使用(十七)—TiledMap中角色的行动路径
- android游戏开发框架libgdx的使用(十四)—TiledMap中视角完善和障碍物处理
- android游戏开发框架libgdx的使用(十四)—TiledMap中视角完善和障碍物处理
- libGDX
- LibGDX
- cocos2dx TiledMap
- TiledMap:1
- kali2 openvas 新版本使用特性
- Git大法好——3.Git分支本地操作详解
- install Flash Player for chrome(Chromium) on ubuntu14.04
- C#中override和overload的区别
- ZOJ 2795-Ambiguous permutations
- libgdx [TiledMap Objects]
- zookeeper集群搭建
- JavaScript & push() 方法
- Tomcat7的安装
- Arcgis api for javascript 详细部署
- 用交换文件的方式添加交换分区
- 如何在ScrollView中嵌套ListView
- IOS 获取时间
- Android客户端性能优化(魅族资深工程师毫无保留奉献)