LayaAir引擎——TiledMap地图图块属性获取和进行墙壁碰撞检测

需要的软件:

TiledMap

LayaAir IDE 1.0.2版本

所画的地图:

pass层:

floor层:

pass层格子属性:

白色格子: id:48,自定义属性 isCanPass:true

黑色格子:id:44,自定义属性 isCanPass:false

floor层格子属性

五芒星格子:id:0

石头格子:id:27

矿车格子:id:22

1.前提代码

Laya.init(576, 576);

var player;
var obj;
var floor;
var pass; var map1 = new TiledMap();
map1.createMap("map/map1/town1.json",new Rectangle(0,0,576, 576),Handler.create(this,onMapLoaded)); function onMapLoaded(){
pass = map1.getLayerByIndex(0);//获取通行层 player = new Sprite();
player.loadImage("map/map1/player.png",0,0,48,48);
Laya.stage.addChild(player); Laya.stage.on(laya.events.Event.KEY_DOWN,this,onKeyDown);//设置键盘监听事件
}

2.重点代码

function onKeyDown(e) {
  switch (e.keyCode) {
    case 38:{
      if ( (player.y - 48) <= 0) {
        player.y = 0;
      }else{
var a = pass.getTileData(player.x / 48, (player.y - 48)/ 48);
var b = map1.getTileProperties(0, a-1, "isCanPass");
if(b){
          player.y -= 48;
        }
}
      break;
}
case 40:{
if ( (player.y + 48) >= (576- 48)){
        player.y = 576 - 48;
}else{
var a = pass.getTileData(player.x / 48, (player.y + 48)/ 48);
var b = map1.getTileProperties(0, a-1, "isCanPass");
if(b){
          player.y += 48;
        }
}
break;
}
case 37:{
      if ( (player.x - 48) <= 0) {
        player.x = 0;
      }else{
        var a = pass.getTileData( (player.x - 48)/ 48,player.y/ 48);
        var b = map1.getTileProperties(0, a-1, "isCanPass");
        if(b){
          player.x -= 48;
        }
      }
      break;
}
case 39:{
      if ( (player.x + 48) >= (576 - 48)) {
        player.x = 576 - 48;
      }else{
        var a = pass.getTileData( (player.x + 48)/ 48,player.y/ 48);
        var b = map1.getTileProperties(0, a-1, "isCanPass");
        if(b){
          player.x += 48;
        }
      }
    break;
    }  
  }
}

 

3.其中代码重点

MapLayer.getTileData(x,y)

参数:

x:格子在地图上的x坐标,等同于屏幕坐标/格子的宽度

y:格子在地图上的y坐标,等同于屏幕坐标/格子的高度

返回:格子在纹理图块上的id值+1

例子:

 var a = pass.getTileData( 0, 0);
console.log(a);//49(白色格子ID:48)

TiledMap.getTileProperties(textureIndex,tileIndex,propertyName);

参数:

textureIndex:格子所在的纹理图块的索引

tileIndex:格子在纹理图块上的索引

propertyName:自定义属性的名称

返回:属性内容

例子:

var b = map1.getTileProperties(0, 44, "isCanPass");
console.log(b);//false(黑色格子)

  

LayaAir引擎——(六)的更多相关文章

  1. LayaAir引擎开发HTML5最简单教程(面向JS开发者)

    LayaAir引擎开发HTML5最简单教程(面向JS开发者) 一.总结 一句话总结:开发游戏还是得用游戏引擎来开发,其实很简单啦 切记:开发游戏还是得用游戏引擎来开发,其实很简单,引擎很多东西都帮你做 ...

  2. LayaAir引擎——(七)

    LayaAir引擎——人物控制TiledMap地图移动和墙壁检测 所需要的软件: LayaAir IDE 1.0.2版本 TiledMap 所需要的东西: 地图:53 * 32,(48*48) 人物: ...

  3. LayaAir引擎——(五)

    LayaAir引擎——关于地图详解 所需要的软件: LayaAirIDE1.0.2版本 在LayaAir引擎中与地图相关的类: 1.laya.map.TiledMap TiledMap类   地图以层 ...

  4. LayaAir引擎——(四)

    LayaAir引擎 TiledMap 使用 所需要的软件: Tiled地图编辑器 版本0.16.2 LayaAir IDE 所需要的图片:图块图片(1.png) 步骤1: 文件->新文件-> ...

  5. LayaAir引擎——(二)

    LayaAir引擎 -> 工具 -> 图集打包例子

  6. LayaAir引擎——(一)

    LayaAir是LayaBox推出的Html5游戏引擎,支持 ActionScript3.TypeScript.JavaScript,开源,并且商用免费.   LayaAir IDE 是一款使用Lay ...

  7. Javascript多线程引擎(六)

    Javascript多线程引擎(六) 经过三个月的时间, Javascript 引擎已经完成beta版本(还不支持多线程特性, 预计下个星期就可以支持了, 现阶段还在进行测试基本JS单元功能), 并且 ...

  8. LayaAir引擎——(三)

    LyaAir引擎(JavaScript)实现图片的翻转一半 图片4.png位于bin/开场过渡 文件夹下,图片大小150*30(根据实际情况做调整) var button; var scale1 = ...

  9. LayaAir引擎——(十一)

    var c = new Array(); var d = new Array(); var e = new Array(); var f = new Array(); var g = new Arra ...

随机推荐

  1. PHP 的 __FILE__ 常量

    今天碰到了PHP的常量__FILE__的问题了. 在网上查了一下.总结了以下规律. dirname(__FILE___) 函数返回的是脚本所在在的路径. 比如文件 b.php 包含如下内容: < ...

  2. Android开发--Adapter的应用

    1.简介 Adapter的作用是为GridView,ListView等界面控件与数据之间搭建桥梁,每当列表里的每一项显示到页面时,都会调用到Adapter的getView方法 返回一个View.在An ...

  3. MySQL 5.6查询优化器新特性的“BUG” eq_range_index_dive_limit

    本文转自 http://www.imysql.cn 最近碰到一个慢SQL问题,解决过程有点小曲折,和大家分享下. SQL本身不复杂,表结构.索引也比较简单,不过个别字段存在于多个索引中. CREATE ...

  4. 基于任务的异步模式(TAP)

    Task .net 4.0为我们带来了Task的异步,我们有以下三种方法创建Task. 1,Task.Factory.StartNew,比较常用. 2,Task.Run,是.net 4.5中增加的. ...

  5. Entity Framework – (复数)Plural and (单数)Singular 表名Table names

    By default, the Entity Framework will assume that all of the names of your tables in your database a ...

  6. scala 的内部类

    class A { class B; def foo(b:A#B){} //def foo(b:B){} 后面的a1.foo(b2) 就不能通过编译 } object Main { def main( ...

  7. JavaEE Hibernate初级概念

    1.  Hibernate 是连接Java应用程序和关系数据库的中间件: 对JDBC API进行了封装.负责Java对象的持久化: 在三层软件架构中它位于持久层(数据访问层),封装了所有数据访问细节, ...

  8. 如何通过命令行创建和设置一个MySQL用户

    我想要在MySQL服务器上创建一个新的用户帐号,并且赋予他适当的权限和资源限制.如何通过命令行的方式来创建并且设置一个MySQL用户呢? 要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可 ...

  9. 数据中心第三方服务、金融IT外包服务、社保医疗信息化解决方案,这三类业务是什么关系,区别在哪?

    这个话题很大,牵扯很多,试着回答一下,算是胡扯了. 三类业务的关系,都是IT外包,至于外包的内容很杂.DC的外包,多半是基建和建维,一般不牵扯到软件开发,网站建设类的.金融IT外包就复杂多了,信息系统 ...

  10. Avast!:小型网站最易遭受的3种黑客攻击

    avast是捷克研发的杀毒软件,从网站上找到一篇avast关于网站安全的文章,觉得颇有意思,因此想到翻译过来与大家共享.有不对之处还望大家批评指正. 一个拥有上万访问者的小型网站管理员发来一份信,向我 ...