Creator实战项目【保卫萝卜】-- 怪物的生成、根据格子地图中的拐点来设置怪物的初始位置

本文主要是介绍Creator实战项目【保卫萝卜】-- 怪物的生成、根据格子地图中的拐点来设置怪物的初始位置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在编辑器中新建怪物,把怪物做成预制体。
在这里插入图片描述
在怪物层中创建怪物

import ScriptBase from './ScriptBase'
import Monster from './Monster'const {ccclass, property} = cc._decorator;@ccclass
export default class MonsterLayer extends ScriptBase {@property(cc.Prefab)monsterPrefab:cc.Prefab = null;//定义数组用于存储怪物脚本(因为脚本拿节点比较容易)private arrMonsterTs:Monster[] = [];onInit(){//创建怪物//定时创建this.schedule(()=>{//1、创建let monsterN = cc.instantiate(this.monsterPrefab);//2、设置位置:到怪物脚本去设置,因为每只怪物都需要存储拐点坐标。//3、挂载monsterN.parent = this.node;//怪物脚本let monsterJs:Monster = monsterN.getComponent('Monster');//存起来this.arrMonsterTs.push(monsterJs);},1.0);}
}

因为怪物的位置是设置在TiledMap里面的,每只怪物都有初始坐标和拐点坐标,所以要到怪物脚本去设置。
在TiledMapCtrl中写一个接口getAllPos,通过格子地图拿到所有拐点。

//获取拐点对象层所有拐点坐标
getAllPos(){//定义数组(用于存所有的拐点)let arrPos:cc.Vec2[] = [];//获取对象层let objectGroup:cc.TiledObjectGroup = this.tiledMap.getObjectGroup('pathObject');//获取所有对象let arrObj = objectGroup.getObjects();//遍历对象for(let i = 0;i < arrObj.length;i++){//获取x,ylet x:number = arrObj[i]['x'];let y:number = arrObj[i]['y'];//构造一个坐标点let pos:cc.Vec2 = cc.v2(x,y);//转换成格子坐标,再转换像素(保证在格子中心点)let tiledPos:cc.Vec2 = this.getTiledByPos(pos);let pixelPos:cc.Vec2 = this.getPosByTiled(tiledPos);//存入数组arrPos.push(pixelPos);}//返回数组return arrPos;
}

在怪物脚本中,拿到格子地图里的怪物拐点,设置怪物位置为第0个拐点的位置。
因为拐点有多个,所以要定义一个拐点数组来接收,同时通过拐点索引来初始化位置。

import ConfigMgr from './ConfigMgr'   //用于获取地图节点
import TiledMapCtrl from './TiledMapCtrl'const {ccclass, property} = cc._decorator;@ccclass
export default class Monster extends cc.Component {//拐点数组private arrPos:cc.Vec2[] = [];//数组索引private index:number = 0;onInit(){//获取地图let tiledMapCtrl:TiledMapCtrl = ConfigMgr.getInstance().getData('TiledMap') as TiledMapCtrl;//调用地图的接口,获取怪物的所有拐点this.arrPos = tiledMapCtrl.getAllPos();//设置初始位置为第0个let birthPos = this.arrPos[this.index];this.node.setPosition(birthPos);}
}

记得在怪物层脚本的onInit()中调用执行怪物脚本的onInit()。

onInit(){//创建怪物//定时创建this.schedule(()=>{//1、创建let monsterN = cc.instantiate(this.monsterPrefab);//2、设置位置:到怪物脚本去设置,因为每只怪物都需要存储拐点坐标。//3、挂载monsterN.parent = this.node;//获取怪物脚本let monsterJs:Monster = monsterN.getComponent('Monster');//执行怪物脚本的onInit(注意!!!!)monsterJs.onInit();//存起来this.arrMonsterTs.push(monsterJs);},1.0);
}

还存在一个小bug,由于资源问题,引擎会根据id来进行排序,造成初始化的点不是第一个拐点。
在这里插入图片描述
解决方法:自己写代码让拐点根据名字进行排序。

//获取拐点对象层所有拐点坐标
getAllPos(){//定义数组(用于存所有的拐点)let arrPos:cc.Vec2[] = [];//获取对象层let objectGroup:cc.TiledObjectGroup = this.tiledMap.getObjectGroup('pathObject');//获取所有对象let arrObj = objectGroup.getObjects();//拿到所有对象后,根据名字进行排序arrObj.sort((a,b)=>{return a.name-b.name;})//后续操作同上
}

这篇关于Creator实战项目【保卫萝卜】-- 怪物的生成、根据格子地图中的拐点来设置怪物的初始位置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603597

相关文章

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/