lufy's legend
标题:
子图层增加父图层减少的相对位移处理
[打印本页]
作者:
leauna
时间:
2019-4-24 18:40
标题:
子图层增加父图层减少的相对位移处理
我做相对位移时遇到的,子图层增加一个位移,其父图层减少一个位移,因为是子图层设置位移后,由子图层改变父图层的位移,导致显示过程的不同步
解决:我目前采用的是延迟一个执行做的,就是子图层触发父图层后,子图层的位移在下次帧刷新后再执行,问题解决了
想问:有没有更好的解决方案
最后:好久不来了,论坛感觉卡了不少
作者:
lufy
时间:
2019-4-25 16:21
在LEvent.ENTER_FRAME里做应该不会吧,是这样吗
LInit(1000/60, "legend", 800, 480, main);
function main () {
var layer = new LSprite();
addChild(layer);
var child = new LSprite();
layer.addChild(child);
child.graphics.drawRect(1, "#ff0000", [0, 0, 100, 100], true, "#880088");
layer.addEventListener(LEvent.ENTER_FRAME,onframe);
child.addEventListener(LEvent.ENTER_FRAME,onframeChild);
}
function onframe(event){
var layer = event.currentTarget;
layer.x += 1;
}
function onframeChild(event){
var target = event.currentTarget;
target.x -= 1;
}
复制代码
作者:
leauna
时间:
2019-5-10 18:38
本帖最后由 leauna 于 2019-5-10 18:40 编辑
我的代码逻辑简单来说,大概是这个意思,子改动完顺便设置父改动,比如移动10次,会出现第一帧突进1最后一帧后退1(像素眼,哈哈),
LInit(1000/60, "legend", 800, 480, main);
function main () {
var layer = new LSprite();
addChild(layer);
var child = new LSprite();
layer.addChild(child);
child.graphics.drawRect(1, "#ff0000", [0, 0, 100, 100], true, "#880088");
//layer.addEventListener(LEvent.ENTER_FRAME,onframe);
chlid.parentLayer = layer;
child.addEventListener(LEvent.ENTER_FRAME,onframeChild);
}
//function onframe(event){
// var layer = event.currentTarget;
// layer.x += 1;
//}
function onframeChild(event){
var target = event.currentTarget;
target.x -= 1;
target.parentLayer.x +=1;
}
复制代码
底下是我目前的解决方式
function onframeChild(event){
var target = event.currentTarget;
if(target.awaitCallback){target.awaitCallback()};//同步执行
target.parentLayer.x -=1;
target.awaitCallback = function(){ target.x += 1; target.awaitCallback=null};//延后一次,和父层同步更改
}
复制代码
顺便,我可以帮你维护论坛吗?不知道是不是服务器带宽问题,网络响应有点慢了。
作者:
lufy
时间:
2019-5-10 23:16
leauna 发表于 2019-5-10 18:38
我的代码逻辑简单来说,大概是这个意思,子改动完顺便设置父改动,比如移动10次,会出现第一帧突进1最后一 ...
引擎中处理的顺序是,
对象先根据自己本身的坐标进行移动,移动结束之后开始绘制子对象
所以说,在子对象的ENTER_FRAME中设定父对象的坐标时,实际上父对象的坐标的相关处理已经结束,所以只能在下一贞才能有效
而父对象的ENTER_FRAME中设置子对象的坐标是没问题的,但是反过来就会出现上述问题了
你可以按照你的方法解决,也可以像我上面那样,分别给子对象和父对象加事件,或者把针对父对象相关的操作放到父对象的ENTER_FRAME中来做
欢迎光临 lufy's legend (http://lufylegend.com/forum/)
Powered by Discuz! X2.5