zoukankan      html  css  js  c++  java
  • 网络游戏开发-客户端4 关于Egret的本地坐标和舞台坐标

     因为最近公司事情比较多,所以没怎么更新博客。

    不过咱们这个游戏还是在继续往下写。

    今天晚上打算写斗地主的出牌动画,遇到一个问题,就是关于本地坐标和舞台坐标的计算问题

    在Egret官网的解释是:x 和 y 属性始终是指显示对象相对于其父显示对象坐标轴的 (0,0) 坐标的位置。因此,对于包含在 DisplayObjectContainer 实例内的 Shape 实例(如圆),如果将 Shape 对象的 x 和 y 属性设置为 0,会将圆放在 DisplayObjectContainer 的左上角,但该位置不一定是舞台的左上角。若要确定对象相对于全局舞台坐标的位置,可以使用任何显示对象的 globalToLocal() 方法将坐标从全局(相对于舞台)坐标转换为本地(相对于显示对象容器)

    在我正在写的游戏中的应用场景是

    我需要把手上的牌,选中,然后出牌移动到出牌的位置去。

    在Wing编辑器里面可以看到手牌是放在红色的框中,手牌的坐标是相对红框的相对坐标。但是出牌的位置是在最外面容器中的一个点上。

    如果直接移动手牌到出牌点的坐标,运行程序,你会发现你的牌和你想象的移动的位置完全不一样。。。

    这里就需要把出牌点的坐标换算为手牌父节点的本地坐标,然后进行移动

    <?xml version="1.0" encoding="utf-8"?>
    <e:Skin class="QcSkin" width="720" height="1280" xmlns:e="http://ns.egret.com/eui" xmlns:w="http://ns.egret.com/wing" >
    	<w:Config id="163a761854a" ></w:Config>
    	<e:Group id="Mygroup" width="482" height="574" x="136" y="378" anchorOffsetX="0" anchorOffsetY="0">
    		<e:Button id="btnOk0" label="手上的牌" x="290" y="56" anchorOffsetX="0" width="146"/>
    	</e:Group>
    	<e:Button label="出牌的位置" x="360" y="640"/>
    </e:Skin>
    

      

        btnOk0: eui.Button;
        Mygroup:eui.Group;
        protected childrenCreated(): void {
            super.childrenCreated();
    
            this.btnOk0.addEventListener(egret.TouchEvent.TOUCH_TAP, () => {
                var point =  this.Mygroup.globalToLocal(360,640)
                console.log(point);
                
                egret.Tween.get(this.btnOk0).to({ x: point.x, y: point.y }, 2000, egret.Ease.backInOut);
    
            }, this)
        }

    当然还有另一种方法,就是把手牌坐标转换为舞台坐标,然后直接移动到出牌点。这个就看自己需要了

  • 相关阅读:
    cpp学习
    7-2 求逆序对数目 (20分) 归并排序 O(nlogn)
    Egret 滚动背景图的实现
    Egret-我的疑问:Scroller如何禁止水平或垂直方向滚动
    Egret-我的探索:exml自定义组件中通过ID获取子组件实例
    Egret-我的疑问:自定义组件加载skin的操作
    Egret事件冒泡的应用
    Egret点击穿透(使遮盖可点击组件的其他组件禁止点击)
    Egret wing 4.1.6项目目录结构
    Egret分步加载资源改写loading界面
  • 原文地址:https://www.cnblogs.com/boxrice/p/9108304.html
Copyright © 2011-2022 走看看