当前位置:   article > 正文

Cocos Creater 获取和设置世界坐标_cocos getworldposition

cocos getworldposition

cocos creater当一个节点设置到另一个节点下面 时,在世界中的坐标会变化,而Unity中重新SetParent,世界坐标不会变化。

我们可以先将坐标转换到世界坐标,然后设置了父节点后,再将世界坐标转成局部坐标。

  1. private getWorldPos():cc.Vec2{
  2. return this.node.convertToWorldSpaceAR(cc.Vec2.ZERO);
  3. }
  4. private setWorldPos(pos:cc.Vec2){
  5. this.node.position = this.node.parent.convertToNodeSpaceAR(pos);
  6. }

具体使用:下面例子是在拖动时,将节点设置到Canvas下,然后放手后再添加到相应的子节点下面。

  1. const {ccclass, property} = cc._decorator;
  2. @ccclass
  3. export default class DragItem extends cc.Component {
  4. _isTouched:boolean = false;
  5. _parentNode:cc.Node = null;
  6. // onLoad () {
  7. // }
  8. start () {
  9. this.node.on("touchstart", this.onTouchStart , this);
  10. this.node.on("touchmove", this.onTouchMove , this);
  11. this.node.on("touchend", this.onTouchEnd , this);
  12. this.node.on("touchcancel", this.onTouchEnd , this);
  13. this._parentNode = this.node.parent;
  14. }
  15. private onTouchStart(evt:cc.Event.EventTouch){
  16. this._isTouched = true;
  17. let pos = this.getWorldPos();
  18. let canvas = cc.find("/Canvas");
  19. this.node.setParent(canvas);
  20. this.setWorldPos(pos);
  21. }
  22. private onTouchMove(evt:cc.Event.EventTouch){
  23. if(this._isTouched){
  24. this.node.setPosition(this.node.x + evt.getDeltaX(),this.node.y + evt.getDeltaY());
  25. }
  26. }
  27. private onTouchEnd(evt:TouchEvent){
  28. this._isTouched = false;
  29. let pos = this.getWorldPos();
  30. this.node.setParent(this._parentNode);
  31. this.setWorldPos(pos);
  32. }
  33. private getWorldPos():cc.Vec2{
  34. return this.node.convertToWorldSpaceAR(cc.Vec2.ZERO);
  35. }
  36. private setWorldPos(pos:cc.Vec2){
  37. this.node.position = this.node.parent.convertToNodeSpaceAR(pos);
  38. }
  39. // update (dt) {}
  40. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/152592?site
推荐阅读
相关标签
  

闽ICP备14008679号