我需要咨询一下代码。我正在写业余的“游戏”,一切都还在继续,但我有一个问题,那就是主框架,代码可能太长,调试器中特定长度的flash冻结。
具体地说,我有很多MovieClip框架,用于改变它们的可见性,然后任何一个定时器和某种类型的条件if / else语句和函数,以鼠标点击取代按钮。我知道它写得不是很好,但我是一个业余程序员。如果你能帮我找到一些可以帮助我降低应用程序复杂性的东西,我会很高兴的,所以我在实现目标之前被迫放弃了。也许我可以写点这样的东西。来停止程序冻结。谢谢。
下面是main框架的示例代码:
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的限制。
发布于 2016-10-02 02:00:35
我不知道是什么原因导致它冻结,但您也请求帮助简化代码(这将使其更容易阅读并最终找到问题),所以尝试这样做:
将类似的元素添加到数组中,然后遍历该数组进行类似的操作,如下所示:
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。
https://stackoverflow.com/questions/39803923
复制相似问题