2016-10-01 76 views
1

我需要咨询代码。我正在写业余“游戏”,一切都还在继续,但我对主Frame,代码可能太长以及调试器中某个长度的闪存冻结这一事实存在问题。申请冻结AS3

具体来说,我有很多MovieClip框架,其中更改其可见性,然后任何一个计时器和某些类型的条件if/else语句和功能用鼠标单击替换按钮。我知道它写得不好,但我是一个业余编程。如果你能帮我找到一些能够帮助我减少应用程序复杂性的东西,那么我会很高兴,因此我在目标前被迫退出。也许我可以写这样的东西。停止程序冻结。谢谢。

这里是主框架的示例代码:

import flash.events.MouseEvent; 
import flash.events.Event; 
flash.utils.Timer; 
import flash.events.TimerEvent; 
if (pavelON == true) { 
      pavel2.visible = true; 
    } else { 
      pavel2.visible = false; 
    } 
if (petrON == true) { 
      petr2.visible = true; 
    } else { 
      petr2.visible = false; 
    } 
if (martinON == true) { 
      martin2.visible = true; 
    } else { 
      martin2.visible = false; 
    } 
if (zdencaON == true) { 
      zdenca2.visible = true; 
    } else { 
      zdenca2.visible = false; 
    } 
if (danON == true) { 
      dan2.visible = true; 
    } else { 
      dan2.visible = false; 
    } 
if (paziON == true) { 
      pazi2.visible = true; 
    } else { 
      pazi2.visible = false; 
    } 
var countDownDec:Number = 1; 
var totalSecs = 0; 
var countDownSecs = totalSecs; 
cas.text = countDownSecs; 
var time:Timer = new Timer(countDownDec*1000); 
time.addEventListener(TimerEvent.TIMER, tick); 
function tick(e:TimerEvent):void { 
    if (countDownSecs == 120) { 
      trace("count down complete"); 
      time.stop(); 
      countDownSecs = totalSecs; 
    } else { 
      countDownSecs = countDownSecs + countDownDec; 
      cas.text = countDownSecs; 
    } 
} 
stage.addEventListener(Event.ENTER_FRAME, startTimer); 
function startTimer(e:Event):void { 
      if(time.running == true) { 
        } else { 
        cas.text = totalSecs; 
        time.start(); 
      } 
    } 
var mcnm:Number = 2; 
var mcnf:Number = 0; 
var mcnt:Number = 0; 
var hm:Number = 0; 
mcnmt.text = mcnm.toString(); 
mcnft.text = mcnf.toString(); 
mcntt.text = mcnt.toString(); 
hmt.text = hm.toString(); 
pavel2.stop(); 
petr2.stop(); 
martin2.stop(); 
zdenca2.stop(); 
dan2.stop(); 
pazi2.stop(); 
pavel_prace.visible = false; 
petr_prace.visible = false; 
martin_prace.visible = false; 
zdenca_prace.visible = false; 
dan_prace.visible = false; 
pazi_prace.visible = false; 
upozorneni.visible = false; 
var pavel2ON:Boolean = false; 
var petr2ON:Boolean = false; 
var martin2ON:Boolean = false; 
var zdenca2ON:Boolean = false; 
var dan2ON:Boolean = false; 
var pazi2ON:Boolean = false; 
upozorneni.zavrit.addEventListener(MouseEvent.CLICK,zavriClick); 
function zavriClick(event:MouseEvent):void{ 
    upozorneni.visible = false;} 
pavel2.addEventListener(MouseEvent.CLICK,pavelClick); 
function pavelClick(event:MouseEvent):void{ 
     if ((pavel2ON == false)&&(mcnm > 0)){ 
       pavel_prace.visible =true; 

因为它是文本的有限长度的贡献的代码,然后在这里: http://www.filedropper.com/code_4

附上的SWF文件你可以看到这个功能。 https://ulozto.cz/!ab4C1i5yTJKG/kollmorgen3-swf(pass:“pomoc”) 故意结束括号,因为如果没有它们,现在它会冻结。我不知道Adobe Flash CS5.5的限制。

+0

我怀疑你的代码太长。但是,你拥有的代码越多,输入错误的机会就越多,这肯定会导致错误。 –

+0

为什么'zavrit'之前的'uporzanini.'?但'pavel'之前没有什么相似之处? –

回答

0

我不知道是什么原因造成它冻结了,但你也寻求帮助简化了代码(这将使它更易于阅读,并最终发现问题),所以试试这个:

添加类似的元素通过该数组类似操作这样的一个数组,然后循环:

var cArray:Array = new Array(); 
cArray.push(petr2); 
cArray.push(pavel2); 
//...etc. 
// then you can loop through them when needed 
for (var i:int=0; i<cArray.length; i++){ 
    cArray.addEventListener(MouseEvent.CLICK,click); 

    if (cArray[i]._on == true){ 
     cArray[i].visible = true; 
    } else { 
     cArray[i].visible = false; 
    } 
    cArray[i].stop(); 
} 
function click(me:MouseEvent):void{ 
    if (me.target._on == //etc... hopefully you get the gist by now 

您将需要一个属性添加到您的呼吁_on这个工作字符类。

但我推测你并没有使用自定义类,你可能应该现在学着去做,并且让自己变得简单。但是你可以看到我已经用一个简单的数组和循环以及一个click函数替换了一堆重复代码。这对于可读性和可维护性是有利的(想象添加一个新角色......你只需要将他添加到数组中并且完成...不必更新所有其他位代码)

作为一个不太简单,但也许更多的使用方法(无需自定义类),可以使用相应的值这样的数组:

var cArray:Array = new Array(); 
cArray.push({character:pavel2, status:"on"}); 

,那么你可以通过做cArray[i].status = "off"并获得改变的pavel2._on状态pavel2本身在做。 cArray[i].character