Map.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import EventType from "./EventType";
  2. const {ccclass, property} = cc._decorator;
  3. @ccclass
  4. export default class Map extends cc.Component {
  5. onLoad(){
  6. window.map = this;
  7. }
  8. start(){
  9. this.createMapByMapInfo();
  10. }
  11. createMapByMapInfo(){
  12. window.resource.mapInfo.json.forEach(this.createNodeByPrefabInfo,this);
  13. }
  14. createNodeByPrefabInfo(prefabInfo:PrefabInfo):void{
  15. let node:cc.Node = cc.instantiate(window.resource['pf_'+prefabInfo.name]);
  16. node.setPosition(prefabInfo.position);
  17. node.setContentSize(prefabInfo.size);
  18. node.angle = prefabInfo.angle;
  19. if(prefabInfo.name=='Ground'||prefabInfo.name=='Box'){
  20. if(prefabInfo.name=='Ground'){
  21. node.removeComponent(cc.Sprite)
  22. }
  23. if(prefabInfo.name=='Box'){
  24. node.addComponent(Box).init(prefabInfo);
  25. }
  26. node.getComponent(cc.PhysicsBoxCollider).size = prefabInfo.size;
  27. node.getComponent(cc.BoxCollider).size = cc.size(prefabInfo.size.width, 2);
  28. node.getComponent(cc.BoxCollider).offset = cc.v2(0, prefabInfo.size.height/2);
  29. node.group = EventType.GROUP_GROUND;
  30. }
  31. this.node.addChild(node);
  32. }
  33. }
  34. class Box extends cc.Component{
  35. prefabInfo:PrefabInfo;
  36. hasTouched:boolean = false;
  37. init(prefabInfo:PrefabInfo){
  38. this.prefabInfo = prefabInfo;
  39. }
  40. onCollisionEnter(){
  41. if(this.hasTouched)return;
  42. this.hasTouched = true;
  43. this.node.runAction(cc.sequence(
  44. cc.fadeOut(1),
  45. cc.callFunc(()=>{
  46. let prefabInfo = this.prefabInfo;
  47. setTimeout(() => {
  48. window.map.createNodeByPrefabInfo(prefabInfo);
  49. }, 3000);
  50. this.node.destroy();
  51. },this)
  52. ));
  53. }
  54. }