加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 rexuegg123 于 2019-3-16 19:55 编辑
写了些物品介绍界面显示的方法,其中一个界面删除的方法不知道哪里出了问题,请大神们看看
就是这个定时删除介绍图片的方法用上后出了问题
没引用用这个方法时,用的这行代码:
setTimeout(function(){for (var i=101;i<=110;i++){$gameScreen.erasePicture(i);};},6000);
除了不能刷新删除介绍的计时外一切正常。(当然也有个小问题,就是多点几次物品,会发现介绍界面删除地越来越快……)
引用这个方法后(itemshow_clean ();),游戏占用内存在20多秒的时间内暴涨了几十倍……
感谢bule_ku大神的提示和耐心讲解!
问题已解决:达到延迟并有刷新延迟清除时间的功能
修改代码如下:
引用函数部分
//格子的交互方法 //根据包裹状态(关闭,开启,对接等),点击每格物品时所作的动作 function Backpack_lattice (Num) { var n = Num; var m = WY_Bpack_sate; switch (m) { case 0:break; //关闭状态,不动作 case 1: //包裹开启,但没有对接其他界面 lattice_mesage_show (n); //点击物品时执行的事件:显示物品介绍 $gameSwitches.setValue(17,true); //显示物品介绍计时的开关 if (WY_i ==0) {itemshow_clean ();} else {WY_i=1;}; //判断:是否引用延迟清除的方法(不能重复引用),不引用时重置计时变量WY_i为1。 break; case '采集': //对接采集界面 lattice_click_Collect (n); // 点击物品时执行的事件:采集工具就位 break; }; };
//格子的交互方法
//根据包裹状态(关闭,开启,对接等),点击每格物品时所作的动作
function Backpack_lattice (Num) {
var n = Num;
var m = WY_Bpack_sate;
switch (m) {
case 0:break; //关闭状态,不动作
case 1: //包裹开启,但没有对接其他界面
lattice_mesage_show (n); //点击物品时执行的事件:显示物品介绍
$gameSwitches.setValue(17,true); //显示物品介绍计时的开关
if (WY_i ==0) {itemshow_clean ();} else {WY_i=1;}; //判断:是否引用延迟清除的方法(不能重复引用),不引用时重置计时变量WY_i为1。
break;
case '采集': //对接采集界面
lattice_click_Collect (n); // 点击物品时执行的事件:采集工具就位
break;
};
};
方法定义部分
//用于计时清除物品介绍图片 //功能:定时6秒后清除,若6秒内点击(不同)物品会重新计时 function itemshow_clean () { WY_i=1; //全局变量,初始值为0,在上一级函数的操作中重置为1,以达到刷新延迟(清除物品介绍时间)目的 function itemshow_clean_sto () { if (WY_i<=60) { var w = WY_i*100; if (w>=6000) { for (var i=101;i<=110;i++){$gameScreen.erasePicture(i);};//循环清除物品介绍图片 WY_i=0; } else { setTimeout(function(){WY_i++;itemshow_clean_sto ();},100); }; }; }; itemshow_clean_sto (); };
//用于计时清除物品介绍图片
//功能:定时6秒后清除,若6秒内点击(不同)物品会重新计时
function itemshow_clean () {
WY_i=1; //全局变量,初始值为0,在上一级函数的操作中重置为1,以达到刷新延迟(清除物品介绍时间)目的
function itemshow_clean_sto () {
if (WY_i<=60) {
var w = WY_i*100;
if (w>=6000) {
for (var i=101;i<=110;i++){$gameScreen.erasePicture(i);};//循环清除物品介绍图片
WY_i=0;
} else {
setTimeout(function(){WY_i++;itemshow_clean_sto ();},100);
};
};
};
itemshow_clean_sto ();
};
问题总结:
1、我不该用for循环情况下还要用延迟执行……for循环是不会等待延迟的
2、重复引用相同函数会开启多个实例,使计时加快(同时对WY_i进行累加),反而达不到刷新(重置)延迟时间的目的。所以我在上一级的操作中用if判断了itemshow_clean ()是否已被引用,若没被引用并在实例中运行的话就直接引用,已引用的话只需重置WY_i=1就可以了。
|