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

相关文章

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

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

MyBatis配置文件中最常用的设置

《MyBatis配置文件中最常用的设置》文章主要介绍了MyBatis配置的优化方法,包括引用外部的properties配置文件、配置外置以实现环境解耦、配置文件中最常用的6个核心设置以及三种常用的Ma... 目录MyBATis配置优化mybatis的配置中引用外部的propertis配置文件⚠️ 注意事项X

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里