2016-10-01 77 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