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(黑色格子)
LayaAir引擎——(六)的更多相关文章
- LayaAir引擎开发HTML5最简单教程(面向JS开发者)
LayaAir引擎开发HTML5最简单教程(面向JS开发者) 一.总结 一句话总结:开发游戏还是得用游戏引擎来开发,其实很简单啦 切记:开发游戏还是得用游戏引擎来开发,其实很简单,引擎很多东西都帮你做 ...
- LayaAir引擎——(七)
LayaAir引擎——人物控制TiledMap地图移动和墙壁检测 所需要的软件: LayaAir IDE 1.0.2版本 TiledMap 所需要的东西: 地图:53 * 32,(48*48) 人物: ...
- LayaAir引擎——(五)
LayaAir引擎——关于地图详解 所需要的软件: LayaAirIDE1.0.2版本 在LayaAir引擎中与地图相关的类: 1.laya.map.TiledMap TiledMap类 地图以层 ...
- LayaAir引擎——(四)
LayaAir引擎 TiledMap 使用 所需要的软件: Tiled地图编辑器 版本0.16.2 LayaAir IDE 所需要的图片:图块图片(1.png) 步骤1: 文件->新文件-> ...
- LayaAir引擎——(二)
LayaAir引擎 -> 工具 -> 图集打包例子
- LayaAir引擎——(一)
LayaAir是LayaBox推出的Html5游戏引擎,支持 ActionScript3.TypeScript.JavaScript,开源,并且商用免费. LayaAir IDE 是一款使用Lay ...
- Javascript多线程引擎(六)
Javascript多线程引擎(六) 经过三个月的时间, Javascript 引擎已经完成beta版本(还不支持多线程特性, 预计下个星期就可以支持了, 现阶段还在进行测试基本JS单元功能), 并且 ...
- LayaAir引擎——(三)
LyaAir引擎(JavaScript)实现图片的翻转一半 图片4.png位于bin/开场过渡 文件夹下,图片大小150*30(根据实际情况做调整) var button; var scale1 = ...
- LayaAir引擎——(十一)
var c = new Array(); var d = new Array(); var e = new Array(); var f = new Array(); var g = new Arra ...
随机推荐
- PSP记录个人项目耗时情况
四则运算编程 PSP记录个人项目耗时情况 PSP Personal Software Process Stages Time(%) Planning 计划 7 Estimate 估计这个任务需要多少时 ...
- Android 布局中 如何使控件居中
首先要分两种不同情况,在两种不同的布局方式下:LinearLayout 和RelativeLayout 1. LinearLayout a). android:layout_gravity=" ...
- MySql学习(二) —— where / having / group by / order by / limit 简单查询
注:该MySql系列博客仅为个人学习笔记. 这篇博客主要记录sql的五种子句查询语法! 一个重要的概念:将字段当做变量看,无论是条件,还是函数,或者查出来的字段. select五种子句 where 条 ...
- Jenkins构建时报错:No Space left on device
Jenkins在自动化构建服务的同时也在消耗服务器的磁盘空间,如果构建的项目个数很多,而Jenkins 服务器磁盘空间又不是非常大的话,每隔一段时间磁盘空间就会爆满导致,就会出现磁盘空间不足无法构建的 ...
- centos 6安装epel
1.通过:https://mirrors.ustc.edu.cn/找到epel rpm包链接,这里的是 https://mirrors.ustc.edu.cn/epel/epel-release-la ...
- JavaEE 概念
JavaEE体系架构概述 1. 企业级应用 现代企业级应用是以服务器为中心,通过网络把服务器和分散的用户联系在一起的应用.一般来说,现代企业级应用应当具有如下需求: 并发支持:同时收到大量服务请求, ...
- php基础_函数和类
①函数 1.函数名不区分大小写,变量名区分大小写. 2.require()和include() 区别:函数加载失败后,require给出一个致命错误,include只是一个警告. ②类 1.构造方法 ...
- HDU 4946 Area of Mushroom(2014 Multi-University Training Contest 8)
思路: 只有速度最大才有可能为1,速度不是最大肯定为0,那么就是 只需要操作那些速度最大的点,这些点求一个凸包,判断一下是不是在凸包边上即可. 有几个需要注意的地方: 1.最大速度如果为0 那么肯 ...
- MFC之鼠标消息处理
今天学了点MFC的鼠标处理.用鼠标处理编写了一个小程序.在文本窗口内,绘制鼠标移动轨迹,当按下CTRL键时鼠标将变成十字,并且填充为蓝色的矩形. 第一步:建立单文的MFC程序,添加类CMouseDem ...
- POJ 3463 有向图求次短路的长度及其方法数
题目大意: 希望求出走出最短路的方法总数,如果次短路只比最短路小1,那也是可取的 输出总的方法数 这里n个点,每个点有最短和次短两种长度 这里采取的是dijkstra的思想,相当于我们可以不断找到更新 ...