|
首页 | 名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
本文是本人学习flash网络应用的过程,源码、说明陆续推出;
先做一下自我介绍,为想学的朋友好上手; Flash 2004 MX学习了45天,包含AS语法在内; Flash Communication学习了10天; Flash Remoting看了一点点资料,没学;
C#学习语法10天;Bc,十五年前看过5天资料,没学成,呵;C和Vc和Bc相同十五年前看过资料,学不下去;VB十五年前看过一阵子资料,写过几个异常简朴的程序,现在忘得一干二净;ASP学习加应用共十年左右,应该说相称认识;SQL也还行,数据库总不能说不会吧,呵;JavaScript呢还行,强强牛牛的东西做不来,正常东西都可写;其它一些做图软件都会用,不能说会做图;
电脑硬件异常熟,以前做这行的,呵似乎和这个关系不大,其实有点关系,因为对操作系统和硬件搭配后的性能心里有底,对自已要开发面向的用户群使用的机器做一个分析,这样自已开发出来的flash运算强度和美工强度,flash多大都有很直接的关系,因为机器好的人都去玩3D了;
举例说一下:
Flash做游戏,面向用户是一般机器的,这此人的机器不会是异常好,所以他们所能玩的游戏画面都一般,因为好的画面,他们的机器跑不动,显示器大小,现在基本是15、17,机器一般显示器就不会太好,所以上1024应该有困难,再说上了后,假如flash按1024做机器运行就很吃力,所以我们按800*600做。
引言
因为一直写的是asp,重来没有写过桌面应用程序,所以写桌面程序一直是我的梦想。开发游戏更不用说,因为学电脑的原因就是因为玩游戏,玩得多了就觉得没意思,就想开发给别人玩,后来发现自已一个人是做不来的,所以就放弃了,这样就走进了编程这个行当(十几年前的事,呵,想想还算好,起码选对了,现在就靠这个吃饭呀)。因为有点点VB知识,所以学ASP很快,就一直写这个,写了十多年。
开发娱乐项目对小团体和个人开发来说是难度最大的,因为涉及方面多广,所以想学编程最好选这个来上手,学习东西必须要能提起你的爱好才会坚持下去,开发娱乐项目是我的爱好,因为也涉及方面多广,所以写完,基本就搞定这门语言了。
原由: 前面说过我的梦想,但一直没有做过,万事需要一个起因,公司的外部网站有一个flash,因为公司变动需要改,原改过一次,因为不懂,所以一改就需要找别人,我是最讨厌去求人的,这次又要变,所以就立刻学flash,本来flash就不难,所以一下就搞定了。 改完后发现flash的语言和JavaScript很像,网上flash游戏很多,爱好来了,公司年终有晚会,需要一个抽奖程序,用别的语言写有点麻烦,因为画面效果问题,用flash是最简答的,所以借这个学习flash语法,写完这个,加做美工45天,搞定flash了。 接着我对flash的爱好就很大了,想做游戏,我知道flash可以和asp通讯,但效果不好,在网上查资料,发现了: Flash Communication Flash Remoting
这两个东西,是做flash网络应用的,好做网游有希望了。我在flash8发过贴,问Flash Communication、Flash Remoting做用,但这里似乎做flash网络应用的人不多,没有得到答案,继承找,终于得到答案:
Flash Communication是做视频会议、聊天等东西的、Flash Remoting是做与数据库通讯与存取的,知道要做什么用后,可以开始了。 Flash Communication网上资料少得可怜,把网上搜便后,还用钱买了一本电子书《Flash Communication Server MX 1.5 参考大全》,可以开始着手写了。 定位为回合游戏,如象棋、麻将这些,如QQgame;10天把框架搭好了,游戏大厅完成,但发现一个很大的问题: SharedObject用起来怎么都不爽; SharedObject说明:flash的一种存取数据库,可以存取比较简朴的数据,Flash Communication就是与本地SharedObject进行通讯来完成网络应用。SharedObject语法很麻烦,再加上Flash Communication本身不成熟,老是有一些莫名奇妙的问题,可能一个是我对Flash Communication的原理了解得太少,所以遇到很多问题。 为了自已的梦想,坚持着把与Flash Communication的通讯部分写完,登陆大厅都正常了,再望向就要与数据库通讯了,数据库我定在SQL,Flash Communication本身不能操作数据库,所以有了Flash Remoting这么一个东西;
天呀,又得学Flash Remoting,这个网络的资料也是少得可怜,看资料说是和JAVA很像,可是我对JAVA是一点不懂,学JAVA太夸张了吧,所以开发开始挺住了。
为了自已的梦想实现,所以有空就上网看东西,原来在帝国BBS看到过自已写与FLASH通讯的服务器端文章,但我只会写ASP,别的不会,所以一直不太理会,后来经过考虑,假如要学Flash Remoting的语言,不如学。NET,因为一直没有时间学,二个是懒不想学,好,那么定位为C#,这个现在比较火,学的人多,十多年前一直想学C没有学成,现在终于可以逼迫自已去学了,因为找到理由了。 本文为原创,其实我现在还在学习C#中,所以一边学一边写这个东西。 下面是我与Flash Communication通讯的一段代码,我个人感觉太麻烦,所以一直写都不爽SharedObject,我的AS语言刚学没有多久,可能下面的代码看起来比较丑,反正不用Flash Communication了,所以大家可以将就的看一下,不过假如要做视频会议等东西,还需要用到Flash Communication,所以学东西不会白学,以后用得到,呵。 //是否点GAME桌面
//table桌面 //channel频道 no_play = 0; no_one = 0; //桌的台号 var table_no; //桌面左右 var table_place; function run_program(str, str2, str3) { var game_so = SharedObject.getRemote("game_room", client_nc.uri, true); game_so.connect(client_nc); game_so.onSync = function() { //<2> //for (a in game_so.data) { // trace(a+": "+game_so.data[a]); //} //读GAME桌面 for (i=1; i<=4; i++) { dot_program(i); } //判定是否点GAME桌面 if (no_play == 1) { write_data(str, str2, str3); no_play = 0; } }; //<2> //========================================================= function dot_program(str) { //判定GAME桌面数据 //if (eval("game_so.data.play_name"+str) != null) { eval("_root.room_table.table_room.p"+str+"_u1").text = eval("game_so.data.play_room"+str+".play_name1"); eval("_root.room_table.table_room.p"+str+"_u2").text = eval("game_so.data.play_room"+str+".play_name2"); trace(eval("game_so.data.play_room"+str+".play_name1")); //} else { //eval("play_user"+str).text = ""; //} } //========================================================= function write_data(str, str2, str3) { //写空退出游戏 table_no = str; table_place = str2; if (eval("game_so.data.play_room"+str+".play_name"+str2) != "") { if (eval("game_so.data.play_room"+str+".play_name"+str2) == myname) { for (a in game_so.data) { if (a == "play_room"+str) { if (str2 == 1) { game_so.data[a].play_name1 = ""; } else { game_so.data[a].play_name2 = ""; } break; } } } goto_list(); } else { //写开始游戏 //eval("game_so.data.play_room"+str+".play_name2"); if ((eval("game_so.data.play_room"+str+".play_name1") != myname) && (eval("game_so.data.play_room"+str+".play_name2") != myname)) { for (a in game_so.data) { if (a == "play_room"+str) { if (str2 == 1) { game_so.data[a].play_name1 = myname; } else { game_so.data[a].play_name2 = myname; } break; } } play(); } } } } //run_program(); setInterval(run_program, 2000); 接着:
我在帝国BBS看到二篇文章《flash多人网络游戏的实现的讨论》和《视频教程:用FLASH2004和VB建立聊天室》,剩了我不少力气,在此多谢一声。 flash多人网络游戏的实现的讨论,源代码陆续公开 http://flashempire.net/showthread.php?t=182045
想看看flash毕竟能够承受多大的网络数据传输,
======================================= 我在flash登陆到服务器以后, 每隔3毫秒就发送100次100个字符的串 "01234567890123456789012345678901234567890123456789012345678901 23456789012345678901234567890123456789" 给flash,
然后在flash里面接收数据的函数里面统计数据, var g_nTotalRecvByte = 0;
var g_time = new Date(); var g_nStartTime = g_time.getTime(); var g_nCounter = 0; mySocket.onData=function(xmlDoc) { g_nTotalRecvByte += xmlDoc.length; // 每接收超过1k字节的数据,输出一次信息, if( g_nTotalRecvByte-g_nCounter > 1024 ) { g_time = new Date(); var nPassedTime = g_time.getTime()-g_nStartTime; trace( "花费时间:"+nPassedTime+"毫秒" ); g_nCounter = g_nTotalRecvByte; trace( "接收总数:"+g_nTotalRecvByte+"字节" ); trace( "接收速率:"+g_nTotalRecvByte*1000/nPassedTime+"字节/秒" ); } 结果十分令我意外, 这是截取的一段调试信息, // 花费时间:6953毫秒 接收总数:343212字节 接收速率:49361.7143678988字节/秒 花费时间:7109毫秒 接收总数:344323字节 接收速率:48434.800956534字节/秒 花费时间:7109毫秒 接收总数:345434字节 接收速率:48591.0817273878字节/秒 。。。 。。。 。。。 。。。 花费时间:8125毫秒 接收总数:400984字节 接收速率:49351.8769230769字节/秒 花费时间:8125毫秒 接收总数:402095字节 接收速率:49488.6153846154字节/秒 花费时间:8125毫秒 接收总数:403206字节 接收速率:49625.3538461538字节/秒 我检查了几遍源程序,没有发现逻辑错误, 假如程序没有问题的话, 那么我们得出的结论是,flash的xml socket每秒可以接收至少40K的数据, 这还没有计算xmlSocket.onData事件的触发,调试代码、信息输出占用的时间。 比我想象中快了一个数量级, 够用了
视频教程:用FLASH2004和VB建立聊天室(1?D?D7)
建议先看一下这两篇文章,很有帮助。
先确定要实用的几样东西:
Flash通讯方面:XMLSocket
这个比较简朴,操作也很方便,至少数据格式很明了,我操作起来方便。
注:需要注重的东西有二个,这个在服务器端编写时是要注重的,不然会把你搞得一头水,今天就浪费了我大半天,本来就知道,可是就是没有注意。
1. 数据格式flash端发送时会自动在代码后加一个零字节数据,这个很重要,不然就搞死人,这个是看不到的,不管在接收还是发送时都要注重。 服务器收到flash发来的数据后先将最后一个字符切掉,然后再进行你想要的运算,返回给flash时记得加上一个如“ |