lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 13324|回复: 14
打印 上一主题 下一主题

重新开始游戏的时候。onframe 里面多次执行,有叠加现象

[复制链接]

19

主题

0

好友

231

积分

帐下督

Rank: 2

跳转到指定楼层
楼主
发表于 2016-11-21 17:29:40 |只看该作者 |倒序浏览
本帖最后由 kezhiyu 于 2016-11-21 17:33 编辑

这里是链接,http://m.kezhiyu.danlu.net/game/377/#/home
  1. $timeout(function(){

  2.   init(frash ,"legend",width,height,main);

  3.   if(LGlobal.canTouch){
  4.                 LGlobal.stageScale = LStageScaleMode.EXACT_FIT;
  5.                 LSystem.screen(LStage.FULL_SCREEN);
  6.         }
  7.         loadData = [
  8. ];
  9.                 function main(){
  10.             var loadsound = true;
  11.             var protocol = location.protocol;

  12.             }

  13.                         LLoadManage.load(loadData,null,gameInit);
  14.                 }
  15.                 function gameInit(result){
  16.       console.log ('init')
  17.             imglist = result;
  18.             backLayer = new LSprite();
  19.             addChild(backLayer);
  20.             addBackGround();
  21.             addPlayer();
  22.             MySoundPlayer = new SoundPlayer();

  23.             MySoundPlayer.loadSound();
  24.             itemLayer= new LSprite();
  25.             backLayer.addChild(itemLayer);
  26.             startTime = new Date().getTime();
  27.             addText();
  28.             overLayer = new LSprite();
  29.             backLayer.addChild(overLayer);
  30.             pointLayer = new LSprite();
  31.             backLayer.addChild(pointLayer);
  32.             addEvent();
  33.             addAvatar();
  34.             MySoundPlayer.playSound("background");
  35.     }


  36.                 function addEvent(){
  37.                   backLayer.addEventListener(LEvent.ENTER_FRAME,onframe1);
  38.                   backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,onDown);
  39.                   backLayer.addEventListener(LMouseEvent.MOUSE_UP,onUp);
  40.                   backLayer.addEventListener(LMouseEvent.MOUSE_MOVE,onMove);
  41.                  
  42.           }
  43.           function onMove(event){
  44.             backLayer.removeEventListener(LMouseEvent.MOUSE_DOWN,onDown);
  45.             hero.x = event.selfX;
  46.           }
  47.                 function onDown(event){
  48.       hero.x = event.selfX;
  49.     }
  50.                 function onUp(event){
  51.             hero.x = event.selfX;
  52.     //                                        hero.anime.setAction(0);
  53.     }
  54.                 function onframe1(){
  55.                   time_limit = 3 * 1000 - new Date().getTime() + startTime
  56.                   if (speed<2.4){
  57.                      speed +=0.001;
  58.                   }
  59.                         for(var i=0;i<itemLayer.childList.length;i++){
  60.                                 itemLayer.childList[i].run();
  61.                                 if(itemLayer.childList[i].mode=="die"){
  62.                                         itemLayer.removeChild(itemLayer.childList[i]);
  63.                                 }
  64.                         }
  65.                         if (time_limit <20*1000 && time_limit>10 *1000){
  66.                           createTime = 40
  67.                         }
  68.                         if (time_limit <10 *1000 && time_limit>0){
  69.                           createTime = 10
  70.                         }
  71.                         var step = GetRandomNum(createTime/2,createTime);
  72.                         console.log (step)
  73.                         if(stepindex++ > step){
  74.                                 stepindex = 0;
  75.                                   addItem();
  76.                         }
  77.             if (time_limit <= 0){
  78.               console.log (213123)
  79.               backLayer.removeEventListener(LEvent.ENTER_FRAME,onframe1);
  80.               backLayer.die();

  81.                     D.score = point;
  82.                     MySoundPlayer.background.stop()
  83.                     removeChild(backLayer);
  84.         D.game_end();
  85.         return
  86.             }
  87.             console.log (123123123123123)
  88.                         showText();
  89.                 }

  90.                 function addItem(){
  91.             var item=new Item();
  92.             item.x = 20 + Math.floor(Math.random()*(LGlobal.width - 50));
  93.             item.scaleX = 0.7;
  94.             item.scaleY = 0.7;
  95.             itemLayer.addChild(item);
  96.     }
  97.     function addAvatar(){
  98.       var avatar = new LBitmap(new LBitmapData(imglist['avatar']));
  99.       pointLayer.x = 20;
  100.       pointLayer.y = 20;
  101.       var mask = new LSprite()
  102.       mask.graphics.drawArc(4,"white",[33,33,35,0,Math.PI*2]);
  103.       pointLayer.addChild(avatar);
  104.       avatar.scaleX=0.5;
  105.       avatar.scaleY=0.5;
  106.       avatar.mask = mask


  107.       
  108.     }
  109.                 function addText(){
  110.                         hpTxt = new LTextField();
  111.                         hpTxt.color = "white";
  112.                         hpTxt.weight = "bolder"
  113.                         hpTxt.size = 15;
  114.                         hpTxt.x = width/2;
  115.                         hpTxt.y = 10;
  116.                         backLayer.addChild(hpTxt);
  117.                        
  118.                         pointTxt = new LTextField();
  119.                         pointTxt.color = "white";
  120.                         pointTxt.weight = "normal";
  121.                         pointTxt.size = 15;
  122.                         pointTxt.x = 110;
  123.                         pointTxt.y = 40;
  124.                         backLayer.addChild(pointTxt);
  125.                        
  126.                         timeTxt = new LTextField();
  127.                         timeTxt.color = "white";
  128.                         timeTxt.weight = "normal"
  129.                         timeTxt.size = 25;
  130.                         timeTxt.x = width/2-6;
  131.                         timeTxt.y = 50;
  132.                         backLayer.addChild(timeTxt);
  133.                         showText();
  134.                 }
  135.                 function showText(){
  136.                   hpTxt.text = "时间";
  137.                   pointTxt.text = point;
  138.                   var str = time_limit + "";
  139.                   if (time_limit>0 && time_limit <1000){
  140.                     timeTxt.text = "0" + str.substr(0,str.length - 3) + "." + str.substr(str.length - 3,2);
  141.                   }
  142.                   else if (time_limit>0){
  143.               timeTxt.text = str.substr(0,str.length - 3) + "." + str.substr(str.length - 3,2);}
  144.             else{
  145.               timeTxt.text = "0.00"
  146.             }
  147.           }
  148.                 function addPoints(type,goods){

  149.       var getpoint = new GetPoint(type,goods)
  150.       backLayer.addChild(getpoint)
  151.                 }
  152.                 function GetPoint(type,goods){
  153.             var self = this;
  154.             base(self,LSprite,[]);
  155.                   var goodpointer = new LTextField();
  156.                        
  157.                         goodpointer.size = 15;
  158.       if(type =='good'){
  159.         goodpointer.text ="+5";
  160.         goodpointer.color = "yellow";
  161.       }
  162.       if (type=='bad'){
  163.         goodpointer.text ="-20";
  164.         goodpointer.color = "red";
  165.       }
  166.             self.x = goods.x+5;
  167.             self.y = goods.y-10;
  168.             self.addChild(goodpointer)
  169.             LTweenLite.to(self,2,
  170.             {
  171.                     y:goods.y-20,
  172.                     alpha:0,
  173.                     delay:0.3,
  174.                     onComplete:function(obj){
  175.                             obj.parent.removeChild(obj);
  176.                     },
  177.                     ease:Strong.easeOut
  178.             });
  179.     }

  180.                 function addPlayer(){
  181.                   playerLayer = new LSprite();
  182.                   backLayer.addChild(playerLayer);
  183.                   hero = new Player();
  184.                   hero.x = 20;
  185.                   hero.y = height-hero.getHeight();
  186.                   playerLayer.addChild(hero);
  187.           }
  188.          function GetRandomNum(Min, Max){
  189.       var Range = Max - Min;
  190.       var Rand = Math.random();
  191.       return(Min + Math.round(Rand * Range));
  192.     }
  193.                 function Item(){
  194.             base(this,LSprite,[]);
  195.             var self = this;
  196.             self.mode="";
  197.             self.y = LGlobal.height/4

  198.             var index = Math.floor(Math.random()*10);
  199.             self.value = index <8 ? 1:-1;
  200.             var bitmap = new LBitmap(new LBitmapData(imglist["item"+index]));
  201.             bitmap.x = -bitmap.getWidth()*0.5;
  202.       bitmap.y = -bitmap.getHeight()*0.5;
  203.       bitmap.scaleX = 0.8;
  204.       bitmap.scaleY = 0.8;
  205.             self.addChild(bitmap);
  206.     }
  207.     Item.prototype.run=function(){
  208.        var extra_speed = 0
  209.             var self=this;
  210.             if(self.value<0){
  211.         extra_speed = Math.floor(Math.random()*3);
  212.       }
  213.       console.log (speed)
  214.             self.y += 2+speed+extra_speed;
  215.             var hit = self.checkHit();
  216.             if(hit || self.y > LGlobal.height-10){
  217.                     self.mode="die";
  218.             }
  219.     }
  220.     Item.prototype.checkHit=function(){
  221.             var self=this;
  222.             if(LGlobal.hitTestArc(self,hero)){
  223.                     if(self.value >0){
  224.                             point += 5;
  225.                             addPoints('good',self)
  226.                             MySoundPlayer.playSound("good");
  227.                     }else{
  228.                       if (point <= 20){
  229.                         point = 0;
  230.                       }
  231.                       else{
  232.                         point -= 20;
  233.                       }
  234.                             addPoints('bad',self)
  235.                             MySoundPlayer.playSound("bad");
  236.                     }
  237.                     return true;
  238.             }
  239.             return false;
  240.     }
  241.                 function Player(){
  242.             base(this,LSprite,[]);
  243.             var self = this;
  244.             self.mode = "";
  245.             var list = LGlobal.divideCoordinate(256,256,4,4);
  246.             var data = new LBitmap (new LBitmapData(imglist["player"]));
  247.             self.addChild(data)
  248.             data.scaleX=0.5;
  249.             data.scaleY = 0.5;
  250.     //                                        self.anime = new LAnimation(self,data,list);
  251.             self.step = 2,self.stepindex = 0;
  252.     }
  253. },0)


复制代码
回复

使用道具 举报

19

主题

0

好友

231

积分

帐下督

Rank: 2

沙发
发表于 2016-11-21 17:33:50 |只看该作者
本帖最后由 kezhiyu 于 2016-11-21 17:34 编辑

因为 代码超过了 1W字。。所以删除了一些 东西。 出现的问题就是。比如 第一次 onframe 1秒 执行一次,但是第二次重新开始游戏 onframe 再一秒内 执行2此次。第三次重新开始游戏 onframe 在一秒内执行3次
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

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

板凳
发表于 2016-11-21 17:50:07 |只看该作者
kezhiyu 发表于 2016-11-21 17:33
因为 代码超过了 1W字。。所以删除了一些 东西。 出现的问题就是。比如 第一次 onframe 1秒 执行一次,但是 ...

重新开始,要保证之前添加过的ENTER_FRAME时间都已经清除掉了
否则,你加了两次,那速度自然就是两倍了
不回答与技术和引擎不相关的问题
回复

使用道具 举报

19

主题

0

好友

231

积分

帐下督

Rank: 2

地板
发表于 2016-11-21 17:53:08 |只看该作者
本帖最后由 kezhiyu 于 2016-11-21 18:15 编辑
lufy 发表于 2016-11-21 17:50
重新开始,要保证之前添加过的ENTER_FRAME时间都已经清除掉了
否则,你加了两次,那速度自然就是两倍了 ...

总共就添加了 一个 ENTER_FRAME 并且尝试清除但是没作用。 比如backLayer.removeEventListenerr(LEvent.ENTER_FRAME,onframe1);
用backLayer.hasEventListener(LEvent.ENTER_FRAME)查看。也显示的是 false ,是不是不止这个地方被注册了?可我只注册了这个backLayer
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

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

5#
发表于 2016-11-22 12:24:52 |只看该作者
kezhiyu 发表于 2016-11-21 17:53
总共就添加了 一个 ENTER_FRAME 并且尝试清除但是没作用。 比如backLayer.removeEventListenerr(LEvent.EN ...

正常情况下,重新开始只要把画面上的对象清空,然后重新绘制一遍
你重新开始是的时候是怎么处理的?
不回答与技术和引擎不相关的问题
回复

使用道具 举报

19

主题

0

好友

231

积分

帐下督

Rank: 2

6#
发表于 2016-11-22 12:28:32 |只看该作者
本帖最后由 kezhiyu 于 2016-11-22 12:30 编辑
lufy 发表于 2016-11-22 12:24
正常情况下,重新开始只要把画面上的对象清空,然后重新绘制一遍
你重新开始是的时候是怎么处理的?
...

我的重新开始有点特殊, 页面的所有数据保存在数据库。然后通过 类似于javascript 的 apply执行一遍

          handle = new Function('$rootScope', '$scope', '$event', 'game', '$timeout', func_body)
          handle.apply($rootScope, [$rootScope, $scope, $event, D.game, $timeout])
其中 func_body 是 游戏的逻辑代码  
每次 页面跳转回来 都会执行一次 apply 一个页面可能有多个重复的闭包,但是打印的时候 调用的 实例都是独立的,并且 onframe 的那个function 也是新的 比如 页面 跳回三次。那么 就会有 3个最新的onfrme 同时监听
回复

使用道具 举报

19

主题

0

好友

231

积分

帐下督

Rank: 2

7#
发表于 2016-11-22 12:36:22 |只看该作者
下面两张图片。分别为 第一次执行 和第二次 执行,第二次比第一次 多了好几个

Selection_010.png (25.32 KB, 下载次数: 2148)

Selection_010.png

Selection_011.png (40.07 KB, 下载次数: 2181)

Selection_011.png

回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

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

8#
发表于 2016-11-22 12:38:19 |只看该作者
kezhiyu 发表于 2016-11-22 12:36
下面两张图片。分别为 第一次执行 和第二次 执行,第二次比第一次 多了好几个 ...

那init岂不是要执行多遍?
引擎的初始化,只需要执行一次,执行多次肯定是会出问题的
不回答与技术和引擎不相关的问题
回复

使用道具 举报

19

主题

0

好友

231

积分

帐下督

Rank: 2

9#
发表于 2016-11-22 12:39:46 |只看该作者
本帖最后由 kezhiyu 于 2016-11-22 12:47 编辑
lufy 发表于 2016-11-22 12:38
那init岂不是要执行多遍?
引擎的初始化,只需要执行一次,执行多次肯定是会出问题的 ...

那有什么办法能解决这个问题吗。。init 不是针对 canvas 的吗。我也尝试过 把整个canvas都删除了,没有效果
由于 angularjs 的 ng-if的效果 如果不重新init 是没办法 把指定 id 的 div 转化为canvas的

回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

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

10#
发表于 2016-11-22 12:57:40 |只看该作者
kezhiyu 发表于 2016-11-22 12:39
那有什么办法能解决这个问题吗。。init 不是针对 canvas 的吗。我也尝试过 把整个canvas都删除了,没有效 ...

你可以加个变量判断一下,如果已初始化就不要再执行一遍了
既然是初始化函数,肯定只能执行一遍啊
不回答与技术和引擎不相关的问题
回复

使用道具 举报

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

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

Archiver|lufy's legend

GMT+8, 2024-5-9 04:13 , Processed in 0.056441 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部