LayaAir引擎——(六)

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(黑色格子)

  

时间: 2024-10-17 01:03:46

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

LayaAir引擎——(七)

LayaAir引擎——人物控制TiledMap地图移动和墙壁检测 所需要的软件: LayaAir IDE 1.0.2版本 TiledMap 所需要的东西: 地图:53 * 32,(48*48) 人物:48*48 注意: var a = pass.getTileDataByScreenPos(player.x,player.y - 48);//返回图块在图块集纹理上的索引+1 562//实际上索引是561,判断地图上的格子是否是561,如果是,不可以通行,则反之. var Sprite = Lay

LayaAir引擎——(二)

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

LayaAir引擎——(一)

LayaAir是LayaBox推出的Html5游戏引擎,支持 ActionScript3.TypeScript.JavaScript,开源,并且商用免费. LayaAir IDE 是一款使用LayaAir 引擎来开发应用,游戏的集成开发环境. LayaAir IDE 下载地址: http://pan.baidu.com/s/1i5yKPpV; 新建项目: 项目名称:Test 项目路径:C:\Users\FanXiaying\Documents\LayaProject\Test 项目语言:Java

layaAir引擎制作游戏的图集动画、时间轴动画、和骨骼动画总结二

一.角色序列帧.ani动画的制作 1.在项目管理器中创建动画文件 2.创建动画模板,编辑动效名称 3.编辑序列帧动画 .ani格式动画的代码控制 1.动画加载loadAnmition() 2.播放与停止.动效模板切换 3.动画帧位置控制 4.动画播放完成事件 uui截图: Laya.init(1334, 750); Laya.loader.load(["res/comp.atlas","res/role.atlas"],Laya.Handler.create(thi

LayaAir引擎——(三)

LyaAir引擎(JavaScript)实现图片的翻转一半 图片4.png位于bin/开场过渡 文件夹下,图片大小150*30(根据实际情况做调整) var button; var scale1 = 1; button = new laya.display.Sprite() button.pos(100,100); button.pivot(75,15); button.loadImage("开场过渡/4.png"); Laya.stage.addChild(button); //实现

LayaAir引擎——(十一)

var c = new Array(); var d = new Array(); var e = new Array(); var f = new Array(); var g = new Array(); var zzjmCursor = 0; function zzjminit() { zzjminitName(); zzjminitRectChoose(); zzjminitRectChoosePic(); zzjmSetVisible(0); zzjminitZhongZuShuoMi

LayaAir引擎——(十)

var k = new Array(); var l = new Array(); var m = new Array(); var zhiyeCurosr = 0; function zyinit() { zyinitName(); zyinitRectChoose(); zyinitRectChoosePic(); zyinitZhiyeIntro(); zySetVisible(0); Laya.stage.on(laya.events.Event.KEY_DOWN,this,zyOnKe

LayaAir引擎——(八)

var a = new Array(); var b = new Array(); var ksjmCursor = 0; function ksjminit() { ksjminitName(); ksjminitRectChoose(); ksjminitRectChoosePic(); ksjmsetVisible(0); Laya.stage.on(laya.events.Event.KEY_DOWN, this, ksjmOnKeyDown); } function ksjminitN

LayaAir引擎——(九)

var h = new Array(); var j = new Array(); var xbCursor = 0; function xbinit() { xbinitName(); xbRectChoose(); xbRectChoosePic(); xbSetVisible(0); Laya.stage.on(laya.events.Event.KEY_DOWN,this,xbOnkeyDown); } function xbinitName() { var d1 = new laya.