lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1393|回复: 3

子图层增加父图层减少的相对位移处理

[复制链接]

3

主题

0

好友

41

积分

士兵

Rank: 1

发表于 2019-4-24 18:40:43 |显示全部楼层
我做相对位移时遇到的,子图层增加一个位移,其父图层减少一个位移,因为是子图层设置位移后,由子图层改变父图层的位移,导致显示过程的不同步
解决:我目前采用的是延迟一个执行做的,就是子图层触发父图层后,子图层的位移在下次帧刷新后再执行,问题解决了
想问:有没有更好的解决方案

最后:好久不来了,论坛感觉卡了不少

回复

使用道具 举报

36

主题

7

好友

8910

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

发表于 2019-4-25 16:21:13 |显示全部楼层
在LEvent.ENTER_FRAME里做应该不会吧,是这样吗
  1.                         LInit(1000/60, "legend", 800, 480, main);
  2.                         function main () {
  3.                                 var layer = new LSprite();
  4.                                 addChild(layer);
  5.                 var child = new LSprite();
  6.                                 layer.addChild(child);
  7.                                 child.graphics.drawRect(1, "#ff0000", [0, 0, 100, 100], true, "#880088");
  8.                                 layer.addEventListener(LEvent.ENTER_FRAME,onframe);
  9.                 child.addEventListener(LEvent.ENTER_FRAME,onframeChild);
  10.                         }
  11.                         function onframe(event){
  12.                                 var layer = event.currentTarget;
  13.                                 layer.x += 1;
  14.                         }
  15.                         function onframeChild(event){
  16.                                 var target = event.currentTarget;
  17.                                 target.x -= 1;
  18.                         }
复制代码
不回答与技术和引擎不相关的问题
回复

使用道具 举报

3

主题

0

好友

41

积分

士兵

Rank: 1

发表于 2019-5-10 18:38:20 |显示全部楼层
本帖最后由 leauna 于 2019-5-10 18:40 编辑

我的代码逻辑简单来说,大概是这个意思,子改动完顺便设置父改动,比如移动10次,会出现第一帧突进1最后一帧后退1(像素眼,哈哈),
  1.                         LInit(1000/60, "legend", 800, 480, main);
  2.                         function main () {
  3.                                 var layer = new LSprite();
  4.                                 addChild(layer);
  5.                 var child = new LSprite();
  6.                                 layer.addChild(child);
  7.                                 child.graphics.drawRect(1, "#ff0000", [0, 0, 100, 100], true, "#880088");
  8.                                 //layer.addEventListener(LEvent.ENTER_FRAME,onframe);

  9.                 chlid.parentLayer = layer;
  10.                 child.addEventListener(LEvent.ENTER_FRAME,onframeChild);
  11.                         }
  12.                         //function onframe(event){
  13.                                // var layer = event.currentTarget;
  14.                                // layer.x += 1;
  15.                         //}
  16.                         function onframeChild(event){
  17.                                 var target = event.currentTarget;
  18.                                 target.x -= 1;
  19.                                 target.parentLayer.x +=1;
  20.                         }
复制代码
底下是我目前的解决方式

  1.                         function onframeChild(event){
  2.                                 var target = event.currentTarget;
  3.                                 if(target.awaitCallback){target.awaitCallback()};//同步执行
  4.                                 target.parentLayer.x -=1;
  5.                                 target.awaitCallback = function(){ target.x += 1; target.awaitCallback=null};//延后一次,和父层同步更改
  6.                                 
  7.                         }
复制代码
顺便,我可以帮你维护论坛吗?不知道是不是服务器带宽问题,网络响应有点慢了。
回复

使用道具 举报

36

主题

7

好友

8910

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

发表于 2019-5-10 23:16:24 |显示全部楼层
leauna 发表于 2019-5-10 18:38
我的代码逻辑简单来说,大概是这个意思,子改动完顺便设置父改动,比如移动10次,会出现第一帧突进1最后一 ...

引擎中处理的顺序是,
对象先根据自己本身的坐标进行移动,移动结束之后开始绘制子对象
所以说,在子对象的ENTER_FRAME中设定父对象的坐标时,实际上父对象的坐标的相关处理已经结束,所以只能在下一贞才能有效
而父对象的ENTER_FRAME中设置子对象的坐标是没问题的,但是反过来就会出现上述问题了
你可以按照你的方法解决,也可以像我上面那样,分别给子对象和父对象加事件,或者把针对父对象相关的操作放到父对象的ENTER_FRAME中来做
不回答与技术和引擎不相关的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2020-8-12 20:06 , Processed in 0.067727 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部