2016-10-01 3 views
1

Мне нужно проконсультироваться с кодом. Я пишу любительскую «игру», и все пошло, но у меня проблема с тем, что основной фрейм, код, вероятно, слишком длинный, и вспышка определенной длины в отладчике зависает.Замораживание приложения AS3

В частности, у меня много кадров MovieClip, для которых изменяется их видимость, а затем какой-либо один таймер и некоторые типы условий, если/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 (проход: «pomoc») Конец заключен в круглые скобки преднамеренно, потому что без них теперь он замерзает. Я не знаю границ Adobe Flash CS5.5.

+0

Я сомневаюсь, что ваш код слишком длинный. Но чем больше у вас кода, тем больше шансов, что вы набрали что-то не так, и это может привести к ошибке –

+0

Почему 'uporzanini.' перед' zavrit'? но ничего подобного перед «павелом»? –

ответ

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"}); 

тогда вы могли бы изменить статус pavel2._on делая cArray[i].status = "off" и доступ pavel2 сам делая. cArray[i].character.

Смежные вопросы