2016-10-01 5 views
1

私はコードと相談する必要があります。私はアマチュア "ゲーム"を書いていますが、それでもすべてが行きましたが、メインフレーム、コードが長すぎるとか、デバッガの特定の長さのフラッシュがフリーズするという問題があります。アプリケーションフリーズAS3

具体的には、ボタンと置き換えてマウスクリックすると、if/elseステートメントや関数がタイマーやタイプの状態を変更するMovieClipフレームがたくさんあります。私はそれが非常にうまく書かれていないことを知っているが、私はアマチュアプログラミングです。アプリケーションの複雑さを軽減するのに役立つものを見つけるのを助けてくれたら、私は目標の直前で辞めることを余儀なくされました。多分、私はそれのように書くことができるものがあります。プログラムがフリーズするのを止める。ありがとう。ここで

は、メインフレームのサンプルコードです:

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(パス: "pomoc") 終わりは意図的に括弧で括られています。私はAdobe Flash CS5.5の限界を知らない。

+0

あなたのコードが長すぎるのではないかと疑います。しかし、コードが多ければ多いほど、間違った型を入力した可能性が高くなり、エラーが発生する可能性があります。 –

+0

なぜ 'uporzanini.'が' zavrit'の前にあるのですか? '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