
maoyeahcom10-10 11:48
等级
3楼
贴子直接加到满分100分了。急求解决难题。求直接的语句,是做长期算法要用到的,不timer、MouseMove中可以使用updataAfterEvent的那种。
比如:
functionfun()
{
……//显示"正在计算中..."
****//立即升级界面(我问的,就是这条语句,这个功能怎么实现?)
……//大量的算法,这个之后很卡,大约10秒钟
……//算法完毕,结果就起来了,隐藏"正在计算中..."
}
//如果没那条语句,大量算法在卡的过程中,界面上没有显示出“正在计算中...",不友好,用户还以为死机了,其实是在等计算结果。先显示出“正在计算中...",再新起一个timer,延迟10毫秒再执行长期算法,一是这种方式不直接,二是有长期的算法要多次timer(或封装成一个函数,那也绕了),三是现在依旧会有长期的这样的难题。我要找的是直接一条语句可以解决,也便于代码维护。就是立即升级图标,多简单的事,有没有呢?
maoyeahcom10-10 12:11
等级
4楼
为了减少误会,浪费大家时间给我写事例,我先主动把用timer的举例贴一下:

界面一个是动态文本(txt),一个按纽(btn)
[code=AS]
importflash.events.MouseEvent;
btn.addEventListener(MouseEvent.CLICK,OnClick);
vartimer:int;
functionOnClick(e:MouseEvent)
{
txt.text="正在计算中...";
clearInterval(timer);
timer=setInterval(callBack,100);
}
functioncallBack()
{
clearInterval(timer);
vari:int;

varn:int=0;
for(i=0;i<500000000;i++)
n++;
txt.text=String(n);
}
[/code]
========
要问的不是timer,MouseMove中可以使用updataAfterEvent,请看第3楼(楼上)贴
xinje10-10 21:05
等级
5楼
我给你写了一个。你可以说说能否是你要的。
import flash.text.TextField;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.setTimeout;
var txt:TextField = new TextField();
addChild(txt);
txt.text = "空闲";
var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(0xff0000,0.5);
sprite.graphics.drawRoundRect(0,0,100,30,10);
sprite.buttonMode = true;
addChild(sprite);
stage.addEventListener(Event.ENTER_FRAME,init);
function init(e:Event)
{
stage.removeEventListener(Event.ENTER_FRAME,init);
sprite.addEventListener(MouseEvent.CLICK,onClick);
sprite.x = stage.stageWidth * 0.5 - sprite.width * 0.5;
sprite.y = stage.stageHeight * 0.5 - sprite.height * 0.5;
}
function onClick(e:MouseEvent)
{
txt.text = "start";
//重要的是这里。
e.updateAfterEvent();
timer = setTimeout(callBack,1);
}
var timer:int;
function callBack()
{
clearInterval(timer);
var i:int;
var n:int = 0;
for (i=0; i <500000000; i++)
{
n++;
}
txt.text = String(n);
}
xinje10-10 21:08
等级
6楼
如果不使用updataAfterEvent我感觉就没什么其他办法了。

maoyeahcom10-11 16:31
等级
7楼
看来没有直接实时刷新界面的语句。。。。。。。
这是一种机制,就像消息模式那样,比如:
发送消息1;
发送消息2;
有一种消息模式是,发送出来的消息1,要直到消息1响应完毕了,再发送消息2;
另一种消息模式是,发送出来的消息1,不管消息1有没有响应,立即发送消息2;
AS是后者,我今天想推动的功能是前者,即消息1执行完毕了,也就是"正在计算中..."先在界面上显示出来了,再发送消息2,即执行下面的代码。
C++中,这种消息模式是:
SendMessage这个发送消息,等到消息响应执行完毕才返回,就像读取一个函数一样
PostMessage这个发送消息后及时返回,不管消息是否执行
类似这种消息模式的概念,还有缓存(绘制图标双缓存、文件缓存……):
比如文件缓存:一般在读写流(stream)的之后,数据是先被读到了存储中,再把数据提到文件中,如果想中途实时读取文件,flush()是把缓冲区的数据试图输出。
………………………………
总之,程序员应该能实时控制当前代码的效果,是及时发现效果,还是等其它地方执行完了。
如果AS没有提供这样的语句解决这种模式……我不能对Adobe说脏话,那么我无话可说。
xinje10-11 23:00
等级
8楼
其实flash也有好多不足的地方,比如多线程。虽然目前有了,但是比较乱套。
有些时候我们没法尽可能做到,想尽一切方法,不择手段。所以你就忍了吧。
maoyeahcom10-12 14:21
等级
9楼
何止如此,还有那个自10.几.几的AX出来后,flash只要最小化(或被其它字段完全遮挡),脚本就暂停。这让众多webgame、客户端插入的Flash界面的网游……情何以堪?
在2010年的之后,flash软件升级太繁烦,一个月要更新N次。游戏反复出错。简单的实例:一个函数,在这个软件版本运行是正常的,升级到下一个版本flash as 版本,函数执行就错误了,再更新到下一个版本,又出现其它错误……玩家的申诉、用户的谩骂,把我们程序员给折腾得……打ADOBE客户电话没人接,发email也没有人回……
xinje10-12 22:45
等级
10楼
关于flash最小化的问题,这是官方从player10.3开始的新模式。最小化时flash as 版本,程序将降至4FPS来节约cpu资源。从而造成了好多疑问。但是有是有相应的解决方案的。
maoyeahcom10-16 15:18
等级
11楼
看来这个问题解决不了了。。。。。。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-120176-1.html
那要看我们国家的变革力度够不够大持不持久