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在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

JAVA Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Java利用Spire.XLS for Java自动化设置Excel的文档属性

《Java利用Spire.XLSforJava自动化设置Excel的文档属性》一个专业的Excel文件,其文档属性往往能大大提升文件的可管理性和可检索性,下面我们就来看看Java如何使用Spire... 目录Spire.XLS for Java 库介绍与安装Java 设置内置的 Excel 文档属性Java

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

idea设置快捷键风格方式

《idea设置快捷键风格方式》在IntelliJIDEA中设置快捷键风格,打开IDEA,进入设置页面,选择Keymap,从Keymaps下拉列表中选择或复制想要的快捷键风格,点击Apply和OK即可使... 目录idea设www.chinasem.cn置快捷键风格按照以下步骤进行总结idea设置快捷键pyth

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco