分享
 
 
 

flash网游开发日志

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

本文是本人学习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??7)

http://www.flashempire.com/school/tutorview.php?id=375

建议先看一下这两篇文章,很有帮助。

先确定要实用的几样东西:

Flash通讯方面:XMLSocket

这个比较简单,操作也很方便,至少数据格式很明了,我操作起来方便。

注:需要注意的东西有二个,这个在服务器端编写时是要注意的,不然会把你搞得一头水,今天就浪费了我大半天,本来就知道,可是就是没有留意。

1. 数据格式flash端发送时会自动在代码后加一个零字节数据,这个很重要,不然就搞死人,这个是看不到的,不管在接收还是发送时都要注意。

服务器收到flash发来的数据后先将最后一个字符切掉,然后再进行你想要的运算,返回给flash时记得加上一个如“\0”,这样就可以了,这样就表示一个零字节数据,不然flash是收不到的,同时记得,服务器一收到数据就先切掉这个零字节数据,不要到与你运算的地方再切,和一个切一个,我最初也是这样,其实是个人懒,给自已找麻烦,flash是不管你这么多的,他只认零字节数据,但偏偏零字节数据在正常显示是没有问题的,也不换行不空格,所以跟本注意不到。

一个例子我要发送的数据是:

string aaa=” 用户名\0”;

string bbb=” 登陆了”;

string ccc=aaa+bbb+”\0”;

Socket.send(ccc);

大家看到了吧,用户名如多出一个\0,如果是flash收到时就会是把他认为两条数据,他就分别按两条数据来收,所以一定要记得这个零字节数据。

2. 服务器端收到的数据是一种数据流,必须将他转换为flash一样的格式,不然中文中会是乱码,在此也要注意一个地方,flash默认是utf8编码,服务器端收到转为utf8就行了,不过在写flash是,很多地方的文章都可以看到希望大家加上一句System.useCodepage = true;这句把我给害死了,这句我不知道到底有什么做用,因为很多人说如果不加与asp、php动态交换数据时收到数据会是乱码,我试过很多次都没有这种情况,为了保险,所以我加上了,结果害了我,加了这句到了服务器编码就变了,我怎么转都转不到utf8,后来删了这句就正常了,晕死。。。

服务器方面的C#需要用到:

using System.Net.Sockets; 这个就是winsocket,与flash通讯就靠他了。

using System.Text; 编码转换。

using System.Collections; 哈希表。

using System.Threading; 多线程。

这是我目前用到的,C#我也刚学十多天,目前通讯的是完成了,等我把大厅完成,再着写后面,因为是自学,理论我说不清,反正写出能用,呵呵。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有