
2008年1月2日
[Flash开发笔记] ComboBox,List组件的二个函数
[Flash开发笔记] AS中保留多少位小数的函数
[Flash开发笔记] 如何让Flash的swf文件在客户端不缓存
[Flash开发笔记] List控件--删除指定label或data的项
[Flash开发笔记] Flash 执行exe文件
posted @
2008-07-02 18:09 三千 阅读(516) |
评论 (0) |
编辑
老是有网友找我要,所以干脆放出来,这是TTGame整理的版本,其实网上一搜到处都有。排版和没有图片不理想,但也凑合能看。
陈冰那个版本我从来没见过,因为是付费的,不知道现在还是否有出售,不过我已经用不上了,FMS搞熟了就那些东西,剩下的就靠经验积累了。
fms_api_cn.rar(3.61MB)>>
posted @
2008-04-24 10:16 三千 阅读(440) |
评论 (0) |
编辑
以下二个函数,适合
ComboBox,List组件。
CheckCmbItemExists:检测某项是否已存在。有时候,需要动态向List或ComboBox
组件中添加项,但是在添加前,要事先检查是否已经存在了,避免重复添加。
SelectCmbItem:选中某项。有时候需要使用程序将List或ComboBox
组件中某项选中。
//检测某项是否已存在。
function CheckCmbItemExists(_cmb, _data) {
var l = _cmb.length;
for (var j = 0; j<l; j++) {
if (_cmb.getItemAt(j).data == _data) {
return true;
}
}
return false;
}
//选中某项。
function SelectCmbItem(_cmb, _data) {
var l = _cmb.length;
var index = 0;
for (var j = 0; j<l; j++) {
if (_cmb.getItemAt(j).data == _data) {
index = j;
break;
}
}
_cmb.selectedIndex = index;
}
posted @
2008-04-21 11:41 三千 阅读(172) |
评论 (0) |
编辑
用法
num:要处理的浮点数;
l:要保留的小数位个数;
如:getPoint(2.16832,2),输出为:2.17
注意
在使用这个函数时,要注意溢出,因为num
*Math.pow(10, l)及有可能超出了AS中浮点数所能表示的范围,从而导致你不想要的结果,另外,当输入数num比较大的时候,虽然还在浮点数表示范围内,但是小数点返回就可能不准确了,如:getPoint(12345678.123456789123, 10) ,输出结果:12345678.1234568,而不是12345678.1234567891。
posted @
2008-03-13 20:25 三千 阅读(145) |
评论 (0) |
编辑
很早以前写过一篇文章(
用C#截取指定长度的中英文混合字符串),但是对性能没有测试,有人说我写的这个方法性能有问题,后来想,可能真会有BT之需求要求传入一个几万K甚至几M体积的字符串进来,那将会影响正则Match的速度,比如文章系统中就极有可能用到,今天有点时间,就改进了一下,代码如下:
public static string getStr(string s,int l,string endStr)

{
string temp = s.Substring(0, (s.Length < l)?s.Length:l);
if (Regex.Replace(temp,"[\u4e00-\u9fa5]","zz",RegexOptions.IgnoreCase).Length<=l)

{
return temp;
}
for (int i=temp.Length;i>=0;i--)

{
temp = temp.Substring(0,i);
if (Regex.Replace(temp,"[\u4e00-\u9fa5]","zz",RegexOptions.IgnoreCase).Length<=l-endStr.Length)

{
return temp + endStr;
}
}
return endStr;
}
此修改版的方法多加了个参数"
string endStr",是指当字符串"
string s"超过指定长度"
int l"时,对结尾的处理,比如要不要加上省略号"..."或加上其它字符。
另外,添加了省略号之后,省略号长度也是算在结果的长度之内了。
用法如:
getStr("中国1中国中国中1111中国", 23,"")
//output:中国1中国中国中1111中国
getStr("中国1中国中国中1111中国", 23,"...")
//output:中国1中国中国中1111...
getStr("中国1中国中国中1111中国中国", 23,"")
//output:中国1中国中国中1111中国
getStr("中国1中国中国中1111中国中国", 23,"...")
//output:中国1中国中国中1111...
----------------------------------------------------------------------
补充:"kpz"回复说上边的方法会截取失真,而我又无法做到穷尽测试,所以换了另一种写法,为了考虑性能结果把逻辑搞的有点"晕",反复测试了多次,代码如下:
public static string getStr2(string s, int l,string endStr)

{
string temp = s.Substring(0, (s.Length < l+1)?s.Length:l+1);
byte[] encodedBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(temp);
string outputStr = "";
int count = 0;
for (int i = 0; i < temp.Length; i++)

{
if ((int)encodedBytes[i] == 63)
count += 2;
else
count += 1;

if (count <= l-endStr.Length)
outputStr += temp.Substring(i,1);
else if (count>l)
break;
}
if (count<=l)

{
outputStr=temp;
endStr="";
}
outputStr += endStr;
return outputStr;
}
用法和参数含义均同前,注意省略号也占位置,算了长度。
posted @
2008-03-06 10:06 三千 阅读(336) |
评论 (7) |
编辑
问题
如何让
Flash的swf在客户端不缓存?即如何让swf文件不出现在IE浏览器的临时文件夹里?
方法:
一般的我们对于动态页面(asp,php等)禁止缓存都是通过语言本身设置HTTP头来实现的,但swf不能直接设置HTTP头。办法就是可以从服务端着手,在IIS里添加HTTP头:
cache-control: "no-cache"
pragma: "no-cache"
expires: "-1"
操作方法见图示:

但在设置IIS时要注意,如果对整个网站设置了HTTP头,则整站的内容(如jpg,gif,css,html等)都不会被缓存了,这样会导致每次都要重新下载这些文件,不好。那么可以更进一步,在网站下创建一个
虚拟目录,然后对此虚拟目录设置HTTP头,把禁止缓存的swf文件放在其中。
posted @
2008-03-04 12:03 三千 阅读(289) |
评论 (0) |
编辑
在制作聊天室,斗地主游戏等这样的Flash/FMS程序时,可能会涉及到划分房间的问题,比如二个房间的游戏规则相同,功能相同,但是二个房间的数据独立,互不影响。
那么这种应用,就涉及到应用程序实例了,如以下。
nc.connect("rtmp://myDomain.com/chat_app/room_01")
nc.connect("rtmp://myDomain.com/chat_app/room_02")
chat_app是一个聊天室程序,room_01和room_02就是chat_app的两个不同实例,整个地址的格式是:
protocol:[//host][:port]/appname/[instanceName]
地址中的[instanceName]以方括弧表示可有可无,但是不管这个"instanceName"有没有,它都会连接到了一个实例。
就是说,任何一个客户机连接到一个应用程序时,这个客户机实际上都是连接到一个应用程序实例(application instances)的。
比如我们一般的写法:
nc.connect("rtmp://myDomain.com/my_app");
本质上他和以下的做法是等同的:
nc.connect("rtmp://myDomain.com/chat_app/_definst_");
即在这种情况下,默认连接的实例为"_definst_",并不代表没有实例。
那么我们就要好好理解一下“实例”,做过高级语言开发的,就很好理解,就象一个类有多个实例一样,它们具有同样的“规则”,但是具有各自不同的“数据”。
一个实例不需要在服务器上定义它自己的目录。应用程序的资源,比如流和共享对象,对于每个实例而言都是独立的,并且是被存储在这个应用程序的流和共享对象目录下的它们各自的目录中的,比如实例room_01使用的SharedObject对象(比如叫"my_rso"),会存储在"\chat_app\sharedobjects\room_01\my_rso.fso"。
使用应用程序实例的另一个原因是可以避免由这个应用程序创建的记录流或共享对象的冲突。例如,在上面的例子中,room_01和room_02都使用main.asc中的程序规则和逻辑,但是他们的数据各自独立,互不影响。由room_01创建的任何流或共享对象与由room_02创建的都是截然不同的,虽然这两个实例都是运行在同一个应用程序chat_app。
posted @
2008-02-29 09:00 三千 阅读(247) |
评论 (0) |
编辑
“文章分类”栏目的内容都不是原创的,多为转贴,如果在转贴时有原出处及作者,我会加以注明,但有些文章出处及作者不详的,会加上[转贴]字样,且版权都归原作者所有,如果您发现那篇文章是您的而没有署名,请与我联系,我会第一时间加上署名或应您要求进行删除。
“随笔分类”中的文章为原创内容,采用
许可:署名,非商业。
posted @
2008-01-23 12:55 三千 阅读(497) |
评论 (1) |
编辑
List控件有两个关于remove的方法:removeAll()、removeItemAt(index),但是在预先不知道索引的情况下,如果想删除label为"yaoyao"或data为"333"的项,怎么做呢?
方法是循环遍历,并进行比对,再使用removeItemAt方法删除:
var l = _list.length;
for (var j = 0; j<l; j++) {
if (_list.getItemAt(j).label == "yaoyao") {
//_list.getItemAt(j).data == "333";
_list.removeItemAt(j);
break;
}
}
posted @
2008-01-23 12:29 三千 阅读(220) |
评论 (0) |
编辑
在FMS开发中,我们经常要在FMS端连接数据库,进行如身份验证等的数据查询操作。方法有多种,你可以使用WebServices或NetConnection对象,也可以使用
NetServices类,差别是
NetServices能够返回RecordSet对象的数据,本例子就是一个使用
NetServices连接FlashRemoting程序的简单例子。例子的重点在于
跑通"Flash->FMS->FlashRemoting"这个数据传递的过程,所以并没有使用到RecordSet对象。例子使用Flash 8 + FMS 2.0.4 + Asp.Net 2.0 制作。
点此下载(74KB)>>
一、使用说明
1).在IIS中,创建虚拟目录RemotingApp,asp.net版本选择2.0,将例子中RemotingApp文件夹中的内容放进去;
2).将
crossdomain.xml文件放在IIS站点根中,要能通过
http://domain/crossdomain.xml访问;
3).将FMSRemotingTest文件夹copy到FMS的应用程序目录中,此目录默认在“C:\Program Files\Macromedia\Flash Media Server 2\applications\”
二、关键代码分析
1).
TestDemo.aspx
<%@ Page Language="c#" Debug="true" %>
<%@ Register TagPrefix="Macromedia" Namespace="FlashGateway" Assembly="flashgateway" %>
<Macromedia:Flash ID="Flash1" runat="Server" />
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
Flash1.Result = "FlashRemoting服务器时间:"+System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
}
</script>
注意加粗的部分,FlashRemoting是个比较特殊的东西,你的页面"TestDemo.aspx"的名称"TestDemo"就是方法名称,方法的代码要写在Page_Load中,然后把返回结果绑定到一个FlashGateway对象(本例中"Flash1")上才能传递出去。关于FlashRemoting For .Net的详细用法,请查其它资料。
2).FMS端Main.asc文件
load ("netservices.asc");
//
application.onConnect = function (client, _name)
{
//...
this.acceptConnection (client);
//
NetServices.setDefaultGatewayUrl ("http://localhost/RemotingApp/gateway.aspx");
var conn = NetServices.createGatewayConnection ();
var myService = conn.getService ("RemotingApp", this);
myService.TestDemo();
application.TestDemo_Result = function (result_obj)
{
//...
}
//...
};
同样注意加粗的部分,load ("netservices.asc");要放在最顶行。
"RemotingApp"就是前边创建的虚拟目录了。
conn.getService ("RemotingApp", this);这一句这里要非常注意,如果你的aspx页面放在更深一层的目录中,那么这一句中的"RemotingApp",就要带把路径转换为类似命名空间的写法,如“RemotingApp.Folder”。
"TestDemo"就是前边TestDemo.aspx页面的名称,接受数据的函数使用"Remoting方法名"+"_Result"的格式。
3).
FMS_FlashRemoting.fla文件
这个没啥说的,很简单,略了。
三、注意事项
如果遇到不能成功连接和返回数据,请注意:
1).安全策略的问题,前边放置"
crossdomain.xml"就是解决这个问题。
2).web.config中
system.web节的是否有:
<httpModules>
<add name="GatewayController" type="FlashGateway.Controller.GatewayController,flashgateway" />
</httpModules>
四、本例的测试运行效果
如下图:

五、另附两个开发过程中遇到的简单问题
1.如何查看FMS的服务端trace出的信息?
1).打开FMS的管理控制台;
2).View Applications -> { FMSRemotingTest } -> LiveLog;如下图:
2.如何重启FMS应用程序?
修改了FMS服务端的程序,如Main.asc后,需要重启FMS的应用程序才能看到最新的结果,所以如果你改了代码而看不到最新效果,不要恼火,还需要这步操作。
1).打开FMS的管理控制台;
2).Manage Servers -> { FMSRemotingTest } -> 如下图:

posted @
2008-01-16 12:51 三千 阅读(465) |
评论 (0) |
编辑
其实今天这个标题,应该用"dangdang和joyo购书对比"比较合适。之所以用这个标题,是想接续上一篇文章《我为什么在joyo购书》。昨晚几乎在相同的时间,我在joyo和dangdang都订了书。今天观察了二者的发货速度,有点感想想写下来。值此新年之际,也祝阅读此文的朋友新年快乐!
首先我不是偏执狂,更不是闲来没事非要跑二个网站订书,更加谈不上枪手了,说的只是我做为一个普通消费者的实际经历和感受,如果说感受是主观的,那么经历总算是客观的吧,既然是写程序的,那咱用数据说话。:D~ 另外,之所以把这二家拿出来比,是因为去年二者为争夺中文书店全球第一名号引发的口水战,孰是孰非,无法分辨,做为消费者,我不管谁是第一,我只在乎实实在在享受到的服务。
昨天是元旦,出去转了转,然后顺便去书城打算买那本上次翻过而未买的《项目管理通俗演义》,结果书城没了,于是回来在网上订,一查dangdang没货,joyo还有货。在将要在joyo下单的时候,顺便问了下朋友要不要顺便订书。她说想订本《人本界面(交互式系统设计) 》,可是一直没有货,我一查,果然两家都断货。于是搜了一下,发现还有《人机交互:以用户为中的设计和评估(第2版)》、《用户体验的要素:以用户为中心的Web的设计》比较适合,具体内容好坏不能判断,但是看书的简介还可以,价格也不贵,于是决定二本全订了。但是仔细一看,这二本只有在dangdang有货,joyo却没货。所以最后只好分别在两家下单:《项管》在joyo订,后二本在dangdang订,正好也对比一下二者的服务。
今天上网一直关注二者的发货速度,晚些时候结果出来了,结果我抓成了图,我们来对比一下:

上图为joyo订单,从下单(2008-1-1 22:42:06)到发货(2008-1-2 17:45:36)总共用时约19小时,免运费;

上图为dangdang订单,从下单(2008-1-1 22:42:36)到发货(2008-1-2 19:13:58)总共用时约20.5小时,运费2元;
A.配货时间方面,如果严格来讲,那么dangdang慢了一个多小时,但是这里头,也存在着偶然因素,暂时不足已说明问题,比如上月的那个dangdang的订单光配货就用去了二天时间,配货用去二天时间,我暂且以为是那个订单书多(折后约二百五十多块)的原因吧。
B.包装方面,有一点我不能不提,上月的那个dangdang订单在送来时,塑料袋全烂了,书的一半完全裸露,且有轻度磨损,这令我当时很不满,不过不是特别严重就没有计较了。但是相比这下,joyo选用的宅急送,都是用纸箱包装,没有类似情况。
C.在送达时间方面,joyo在订单上写“预计送达时间: 2008-1-3”,而且可以凭包裹号在宅急送网站查询物流情况。而dangdang网是没有的,我无法知道什么时候送达。至于本次真正的送达时间我会在收到书后,在此做以补充。但我敢预测的是,以dangdang往日的风格,绝不会比joyo早到。
(2008-1-03 10:35分,joyo的书送到。时间比我想象的要快,这次有一点我猜错了,就是包装:这次没有使用纸箱,可能只有一本书太小的缘故,但是还是包了三层,第一层是印有joyo的塑料袋,和当当类似,第二层是泡沫塑料代,最外一层又密封一层塑料袋。当当的书目前还没有送到。
2008-1-07 12:50分,当当的书送到,这次包的很严实,只是这时间...)
D.在价格方面,见下表:
| 书籍 |
joyo(折后价格) |
dangdang(折后价格) |
| 项目管理通俗演义 |
12.60 |
14.10(无货) |
| 人机交互:以用户为中的设计和评估(第2版) |
21.70(无货) |
22.33 |
| 用户体验的要素:以用户为中心的Web的设计 |
18.70(无货) |
18.75 |
| 运费 |
0 |
2 |
统计一下上表,如果在二家都有货的情况下,上述订单总额算上运费,dangdang为:57.18元,joyo为:53.00元,那么在dangdang订的话要比在joyo多花去4.18元。
E.在网站功能上,比如搜索,排行,书籍资料列表显示上,还是维持我上次所说的,dangdang做的比joyo好。但是我在前一个文章里也说了,这不是购买行为的决定因素,dangdang应该在关键环节下功夫。
F.在产品的库存/品种齐全性方面,dangdang要比joyo全面,就拿本次三本书来说,joyo有两本就没有,这也迫使我不得不在dangdang下单,那么相对的,joyo在本次竞争中就失去了一个客户订单,虽然我这二本书不算多,但我相信积少成多的道理。
在以上六点的对比中,除去"C.送达时间"暂不明确之外,joyo在配货速度、包装、价格三方面优胜于dangdang,而dangdang在网站功能、品种齐全方面比joyo做的好。
文章末了,我想说的是,不要去争虚名,第一不第一无所谓,但服务千万不能马虎,只有用户认为你是第一你才是第一,自封的那是自欺欺人。
最后希望在新的一年里,dangdang和joyo都能完善自我,超越对手,只有这样,我们用户才能享受到更好的服务。
posted @
2008-01-02 21:25 三千 阅读(138) |
评论 (2) |
编辑
Written in 2007-10-15 09:48
昨天帮一个朋友写一个刷票程序(凸-_-凸),一开始想使用IFrame来操作对方的网站页面,但是IFrame在IE下默认不能跨域操作,FF中更是禁止的,ft~
于是另想办法,甚至想到去写个WinForm程序来操作,后来找到Avant浏览器的插件有一功能,可以自己写脚本,等页面打开后,此脚本会被执行,效果相当于执行页面中本身的脚本一样,setInterval也能使用,于是赶紧写插件。。。成功。。。。嘿嘿。
下边介绍一下Avant浏览器
Avant Browser 是一款使用方便的多窗口浏览器。它以 Internet Explorer 内核为基础,并提供了很多增强功能,例如:过滤 Flash 动画和弹出式广告等。由于采用了多窗口技术,在打开相同数量的网页时,与 Internet Explorer 相比 Avant Browser 占用的系统资源很少。据说(注意是据说,实际的还是要你用了才知道)Avant Browser是当今用户评价速度最快、功能最完善的浏览器。
它的插件功能如下图(我用了第二项自动执行脚本功能):
Avant浏览器插件的更具体用法见:
posted @
2008-01-02 20:17 三千 阅读(93) |
评论 (0) |
编辑
Written in 2007-09-11 14:20
今年第三次在joyo购书了,其实可以不说;但是之前一直是在当当购书的,所以又想说说,可能有和我同样感受的人。
首先,对于购书网站的选择,我现在只会选当当或joyo。
记得最早一次在网上购书,是2002年1月,第一次购书是因为痞子蔡的知名,我买了《檞寄生》,那时候joyo卖书还不行,只有当当独行天下,现在去看,我在当当有11条订单记录。
但是今年之后,我就在joyo购书了,而且一次,二次,今天是第三次,似乎将要变成习惯。
其实不是当当做的不好,只是从用户角度讲,亚马逊让用户有了更好的选择,论网站用户体验,joyo比不上当当,但是体验决不是决定用户购买行为的第一因素。
在我看来,决定用户购买行为的,一是产品+服务,二是价格,图书做为一种同质化的产品,决定用户购买的因素会是信用、配送和价格。
1.信用
信用是网站的品牌塑造,或者说商家给用户的安全感、信任度,网站如何让用户打消顾虑,放心付款,是首要问题。用户要付出的是白花花的银子,当然不能不谨慎,还有退换货的售后服务问题,都在信用的范围内,随着网络消费的发展,用户也变得成熟,他宁可不买东西也不会去冒风险。在我以为,当当和joyo具备同等的信用度。
2.配送
关于配送,速度很重要,能在网上买书的人都是赖人、时间少的人、想省钱的人中的某一种人。一个订单你十天半月才送到,看用户会不会骂死你。
在配送速度上,joyo和当当差不多,但是这里有个细节:
joyo深圳区的配送商是宅急送,所有我收到的书,都用那种纸箱盒子装起来,给人很安全的感觉,尤其有光盘的书,你不得不担心光盘会损坏,就算能换,用户也怕麻烦。但是当当呢?用那种印有当当网的塑料带一装就送来了,相比之下,joyo更令我放心,所以这是细节问题。
3.价格
从前段时间争网上第一的口水战,到joyo的价格制订,joyo铁定了以当当为敌。在joyo和当当搜同一本书,你会发现,joyo总要比当当便宜一毛钱或几毛钱,或者便宜0.1折,显得非常有针对性,不管joyo是否使用了自动调价程序,但除价格比当当便宜之外,在配送费用上,joyo无论多大的单,一律免运费,而当当现在是满99元才免5元运费。所以一个单下来,在joyo要便宜七八块到十多块不等。
所以综合来看,在信用同等的情况下,joyo的配送和价格都令人更舒服,那么选择joyo就是自然而然的事情了,但是在网站体验上,当当要好过joyo,比如搜索结果中,当当的结果中显示出版社,出版日期,自动按销量排列等,都是很好的。
|
续:《
我为什么在joyo购书2》
posted @
2008-01-02 20:14 三千 阅读(187) |
评论 (2) |
编辑
Written in 2007-07-03 18:17
posted @
2008-01-02 20:09 三千 阅读(236) |
评论 (1) |
编辑
我们都知道,在Flash中,可以通过fscommand命令来启动/执行外部应用程序,如以下代码:
on (release) {
fscommand("exec", "abc.exe");
}
这在早期版本中,执行的好好的。可是Flash 7以后,这样的做法却失灵了。而在Flash帮助中,也没有找到具体的说明(也许我太笨)。
原来在Flash 7以后,Flash Player增强了安全性,它有了一些要求:
1.Flash得编译成exe文件,swf是不能执行exe的;
2.在Flash文件的相同目录下,建立一个"fscommand"的文件夹,将要执行的exe文件放入;
满足以上条件后就可以了,命令的写法还是不变:fscommand("exec", "abc.exe"); 不需要带路径,他会自动去fscommand文件夹中找寻要执行的文件;
那么如何将Flash发布成exe文件呢?其实很简单:
文件->发布设置->格式->Windows 放映文件(.exe)勾选,然后点“发布”即可。
示例文件下载(Flash8制作,大小1.29M)>>
(下载后运行"1.exe",然后再点击界面上的按钮,会启动一个火车时刻查询程序。)
posted @
2008-01-02 09:19 三千 阅读(304) |
评论 (1) |
编辑