你的位置:奥古多媒体 >> 资讯 >> 教程 >> FMS教程 >> 详细内容 在线投稿

多人互动聊天教程基于Flash Communication Server构建

排行榜 收藏 打印 发给朋友 举报 来源: aougu.com   发布者:foxet
热度374票  浏览1464次 时间:2007年1月25日 08:08
作者: Foxet
开发时间: 3.11.2003
开发工具: Flash MX,文本编辑工具
调试环境: Flash Communication Server 1.0或以上
开发知识: 有MX as 和FCS基础(本文对命令的‘用法’不作分析)
对象: 想了解“FCS如何结合FLASH进行开发应用”的人
                                 
   

一、前言

   
          奥古多媒体8f2]xN-F

  说到网络上的文字、视频、音频等涉及通讯应用的开发,大多会想到用java(C++也可以),没错,java在这方面的确很强大的,但门槛高,需要有好的编程基础,就算会写,也得花不少时间,更不必说设计者开发这样的应用时要遇到多大的困难了......奥古多媒体$t'm$L%Ek0yh!o

奥古多媒体W)H2`PVM

  但大多数的网络设计者对FLASH却是十分熟悉(就算不熟悉,总会了解一点吧),而且Flash的播放器受到广泛支持,MM看到了这些,它们发行的Flash Communication Server使设计者们可以通过Flash的脚本语言来控制复杂的网络交流,从而大大节省了开发时间......

|&Y6cRJ0 奥古多媒体tu[ Xg-k

  我们这里就用FCS跟FLASH脚本编程结合起来,开发一个多人互动的应用,建议大家先看一下文件,知道有什么,接着看一遍本文,知道怎么回事,最后再结合文件,融会贯通。奥古多媒体J1y/o.Ii"}l&HP"]?

   
    构思    
        奥古多媒体({*d.Vk2F m

先来构思一下内容:

-|S$LdX%lt0 奥古多媒体?6NC^+l Q.H


$xZN0v O{0 首先,我们会有一个场境,上面有一些物件(例如树,屋之类的)。
1HQ#|l ICJ/J0 然后,当客人上我们的SWF,我们让他选择一个角色,填上自己的名字。
*gy)oPI&T d0 接着,角色出现在场景。奥古多媒体Ly+J`.d q7LN2K
再接着,有另外一些客人在地球不同地方也连上了,登陆后,他们也会有自己的角色,我在场景中可以看到他们,他们也可以看到我。
o+r;A*E8z.U*tpg0 然后再接着,象RPG网络游戏一样,我们会有走动,也可以看到对方的走动,并且我们之间会有文字的对话,如果喜欢,也可以只按一键 就可以用语音对话(视频就先免了吧,我们已经有角色来代替我们的样子的出现了,但不排除以后再加进去)。
奥古多媒体KyP `\KS

奥古多媒体)l2E'L/B:QThEfz


:`8w0x|R:C"A&K4|0 好了,我们心中已经有辐图像浮现出来了。
奥古多媒体h7odh%_ ~

奥古多媒体d/|+Z RI et

 奥古多媒体Pd!fT"P:O O_h @

   
       
         
    三、材料准备    
 

选材:

   
          奥古多媒体\\9C@9a^ N'ic/w

本例子的素材选择很重要,决定我们的程序怎样写。

}O'Cr]kw{ h0 奥古多媒体:`&i0V|noW6z

一开始,我们先要决定材料的大小,视角,这个对我们的程序有很大的影响,大小比例要一致,这就决定我们需要的是一套完整的图片,视角也要一致(除了角色本身),这就决定我们还必须从这套完整的图片中挑选,因为我们看一个场景时只能看到一个方向,要么全是45,要么全是60度,如果你把一些不同角度的图片摆在一起,除了不协调外,程序上处理层次(层次指:每种物件因为位置不同都会有不同深度,一个物件会遮住另一物件)也会变得无所适从(注意:如果不是用数组地图可能没有的这个问题),只要视角能统一,无论是30度,45度还是n度,处理过程都基本一致,是没有难度的差别,(这里初学者可能会听得一头雾水,可以先往下看,在实践中思考)在这里我选了几张不太好的位图(找很辛苦),

0s|c!M/Bt0

n3A/t;^w%z8Z8F0可以把这些图片归成两类奥古多媒体k'h-A'P,^%O
角色;这里我们要用几个不同的角色,每个角色几个方向的图片都要准备,可以是4面,8面,甚至是16面,处理差别不大(由于材料的限制,我只用了四面的),而每个方向至少要有两张图,来模拟该方向的动态效果奥古多媒体x/[Qn&[g
物件:静态图就可以了,需要的时候也可以用动态图
%dkc9|w jSp0 接着,我们Firework或其他图形编辑软件将图片空白处转成透明,这样就得到素材了。

8_7x0c8c,Y\J0 奥古多媒体NsS;]o?$o%e

 奥古多媒体Sji,~s;SZ!j/Hu

   
 

理材:

   
         

$Jg'fpG w0将素材导入FLASH后,我们把不同物件的作成不同的MC, 对于数,屋,椅,我们处理如下(具体操作省) 奥古多媒体Ls2bW;CPLY

种类名称 Linkage Name MC Name
房子 room2 room2
小树 tree1 tree1
大树 tree2 tree2
椅子 sit1 sit1
邮筒 email email
垃圾箱 rul rul
奥古多媒体L.p6ew$Zh9wA2a.d)Ar

对于人物的处理,先建立一个mc:c1(所有的角色按照C1,C2,C3...),奥古多媒体%Q3V]^3mHi-R3v
c1内有4桢,每桢有一个表示方向的MC,MC名都是DIR,
cBL j-A'F.@@0}*~Qa0 mc的分别代表四个方向:上下左右方向奥古多媒体-^UN*E3YD I2F z
mc:c1up,c1down,c1left,c1right
|Z[4{@\!g^2F0 如果有多个方向图片,就多做个方向mc
4C8\0]iwj$| W0 每一个方向mc有3桢,是该方向的动作
奥古多媒体"HO:lA6XYT

&L9];oC6IR&u,A0 奥古多媒体qt0V'io)k m4g}W$Hg

   
   
     
          奥古多媒体Z7EP3u:u~&`

好了,我们已经准备好材料了,接下来我们开始写程序.奥古多媒体~6OC _/h

2^ c6v![N0 

L YcW bQO0

'ru4f W/{-i0 

J.qm(ZE6e v0
   
                               
   

四、编写程序:

              写的程序必须跟素材挂钩,但同时也要有自己的独立性,也就是写的程序必须适应你收集的素材,例如前面说到的视角,具有自己的独立性是指,写完这个应用后,如果要换素材,或者要扩展,程序不需要作出大举动的修改,所以我们写程序的时候要留有一着,说不定一段日子后我们要写一只网络RPG游戏,或者是写一个社区,我们把代码拿出来,可以容易地在远来基础上来改.奥古多媒体,Dr$~h3~E0w8C
好,现在来看看素材跟程序对应的关系:

(m)\X,\a,@b0可视对象:                程序:
UP i7N9Y,atV e0 地图       --------- 数组地图(Map)奥古多媒体7s@TM5vc#YO
物件(树之类的)  --------- 标记(Key) 
J ztG$p!l0 角色        --------- 互动奥古多媒体/KIF;P,z!G.pmoT t2C

奥古多媒体~@J2w'E2SAK9{Dp

需要通过FCS交换数据的部分奥古多媒体JC,V e;` bg\
角色踩点
:N!vI'Kh.fC!E'z0 角色方向动作奥古多媒体 J+^ f^ @ph(n
音频奥古多媒体o J4UP4h[V+Q^
文字

pB+iKl6G0
奥古多媒体UD[ kO

 

A3Un/CC Ug0
   
   

从地图开始着手,建立二维数组地图

 
            为什么要建立数组地图?这是小型RPG游戏的基础,它可以方便建立从简单到复杂的数学模型,适于扩展,例如一些地形,绕障,过场等,可以同过对数组的删减,二次变换等来实现,这部分很有趣,但本文在不作做详细的介绍。 奥古多媒体z/w&N!bR_gJ h'H

现在先把我们flash的视图模式改为显示格子,view->grid->show grid并把他的间隔设置为10×10,我觉得这种大小看起来比较舒服。
,jS0~!i,@Q0 我们假定在场景一区域作为地图,把这段区域X轴方向分为rxn格,每格是大小是rx,Y轴方向分为ryn格,每格大小是ry,如果把整个场景也看为由rx,ry构成的小格,但数组地图的rx,ry不设为10,而是更小的5,那么我们可以1:2跟视图的格子联系上,startnx,startny分别表示地图起始的格数,现在我们把地图MC拖放到从第(startnx,startny)开始的位置。

LWq*r&Zc0

9{O0zj^6?_s9i0接下来要把数组建立起来,有的人喜欢会直接给出数组,但因为我们设地形为平坦,同时为了容易修改,我们用function建立,
C-s P9cDK~qw0 mapadd(startnx, startny, rxn, ryn, rx, ry)奥古多媒体{6[3aW:d
现在从库中拖出地图的图片放在场景适当的位置中,我们可以很容易读出视图格子起始(6,5),转化成数组map时要乘2,

Zo%C.V4tyN3K3V0

J#~M3^ G i8i/L0奥古多媒体V}"x7UP#A

hdGw)xLt0 

U k$yb)Cu3vY'_:sB9l0
     
   

角色行走基础:

            奥古多媒体)mgEs Poh Q+k s

本来介绍完地图,顺理成章应该介绍上面的物件才对,但有些东西为了让大家好理解,先提上来说.奥古多媒体Tc*E$AM0H3F_
我们这里用的角色控制是经典的键盘控制行走,先简单介绍一下奥古多媒体Y/S:E`2v7]S
(有游戏基础的可以略过这里)奥古多媒体)qZpj#C$dzC
我们用以下这两条命令进行方向键捕获:
R#uD!W kl6F,j7cK.p0 X轴方向的,左右两值相减,求出步行左右方向,步长为一奥古多媒体F3z*n'?1FX(bnv{
var rl = (Key.isDown(Key.RIGHT)-Key.isDown(Key.LEFT));
4Iy'b~?'C0rC0 Y轴方向的,左右两值相减,求出步行前后方向,步长为一
5|2|D%o'j0 var ud = (Key.isDown(Key.DOWN)-Key.isDown(Key.UP));奥古多媒体8P }e~j*^}
接下来我们是要让人物在地图行走,奥古多媒体}/A:W&}h$A3e(qvc
随便拖一个角色进入场景,就拿c1吧,变量为_root.cha,奥古多媒体)BGS w'_d6I x M X
让其在数组地图有对应的坐标奥古多媒体s9Mmko p.j(e
_root.xpos,root.ypos奥古多媒体M]?@ \+] K0|bR
并让其通过数组地图取了实际坐标奥古多媒体/t+P*O:m e4I2|L
map[_root.xpos][root.ypos]
x2P)yRsFY6? ^0 请看下面的代码
奥古多媒体7_@`/Y2u4y;s~

~n[5P}f0奥古多媒体0` p`Tk7WIkT*hcy4f

`^-f2W Q'bI%Zv0

)y;O'auak Y(@i0

*_!WQ;WE a0I!C0现在角色可以在地图上行走,而不会超出地图.但不能进行网络上的互动
jEP_r*E\0 要进行网络上的互动就要通过FCS....,我们从登陆开始入手

8T~/U,HX0 奥古多媒体K^RA$xF^Ch(^

 

]'xg W-g#]6Xq0
  服务端与客户端的对话
                             
                       
                             
            奥古多媒体jE cY2]F

例子中我做了一个登陆平台(lib:LoginP)奥古多媒体/LPP1N!C Pe%z%X
当某一用户填了名字,选了角色,并按LOGIN,我们就可以得到两个变量,奥古多媒体q*]8]7za$s&G1I
并调用doConnect function
奥古多媒体9`kq!Ph)A D$z Lr

y;L\/F{w0
:i-z.e$l(t%u7f-]~*W0
0a M;FOZ0G*\y0
Nd:lk(Zqx'{.Aj%F5``0 奥古多媒体5`8qK(I3B,H

lM Be^g0}s7P0 奥古多媒体%m2]znW!p

Q'v6`#sRu e0

BB-[Hs0

6C9nT4PBo*AA|#P0

3[z;C!L2M%z/L0 奥古多媒体 ||-p!Ps

 奥古多媒体 TP2S"VI

 

人物建立与人物的间文字交流

           

\T"_8HuE Y0现在把加入人物的 addcha function拿上来看看;从图中我们可以看到一个人物应该包括几部分,奥古多媒体"Dh_6`!Z2E S
一是角色本身的MC,二是人物对话框,三是登录名的标签
奥古多媒体/b/en"x2`!B

奥古多媒体~4fn9Bz+Sx

奥古多媒体B%e}u y*wa2j D

4tA8R8cN*^0
奥古多媒体tbQNyB(Bf;y V

奥古多媒体U~0NX'z

这时候当用户发送文字"倒,你很傻",用chat_so.sent("showmsg",_root.chaname,"倒,你很傻")
'az,H@z a$HJ R;v+J0 就可以各客户端包括自己调用showmsg."倒,你很傻"字样出现在对话框和又边的文字记录框

Y~ x5T3G O0

&kS ~Xl0
4S8` onmZW [7t0

j6BA,xfb/r;TFK0
     

再回到地图的行走

           

&R2GS ^*Ta;D0奥古多媒体_Z%~"d `)P q
奥古多媒体:{D1bs!OOb

奥古多媒体9M#~)i%O1}X'_

现在大家可以启动FCS来调试一下,如果发现有不正常的工作,要注意的是,有些机械化的操作(例如建立一个MC,设变量),我这里省略了过程,大家可能以参考看我的文件

!st!JE*A} q5X?%~0 奥古多媒体 s+] h2Zb,Y6St5jc;GY

 

L~f go;A2]t e!Bp0

创建环境(添加物件)

 
            奥古多媒体dE Ou5wkb-M [

添加物件前,先把物件分类,再设置属性
"dm7GlTY0k"`1[0 例如以树为一类物件,不同linageID表示其属于不同的类,这里是"tree",想象一下,当树 在场景中(同样要把它理解为在数组地图上的某个坐标),人物是不能穿过它的,也就是有些位置必须进行标识(管它叫该物件的占位点),标识其实就要是把在数组地图中对应坐标的KEY设为0,让人物行走时侦测到这一坐标不可以行走而停留.奥古多媒体"j k,qN7dN.D bYjJV xW
好,再来看这树MC本身,它到底有那几个位置是不能穿过呢?(如果目测不太准确,可以先把MC放到场景在VIEW GRID 编辑方式下看,或者干脆CTRL+ENTER,用控制小人来确定,一般目测就可以了),我们看出这树的占位点大概有四点(看白色格子),而且都在同一Y轴的坐标上,这里要注意的是:树冠所占的坐标是可以行走的,只不过这时人物被树所遮,所以不能行走的只是树根的部分.由于TREE的坐标原点位于在左下角,那么这四个点为[0,0],[1,0],[2,0],[3,0]
奥古多媒体 ~9q!Dt*Q7Qt

at_:e0Ns9WOr"X B0我们表示为:
4W2q5nA4us/f|B0 clip_ocu.tree = [[0, 4]];奥古多媒体 V}v0ru-j!Jf r"J
clip_ocu是收集各种类型占位属性的对象
奥古多媒体w1n4^3P]m8I6CC

               
           

y3R WTt A,}0 奥古多媒体k7V}L1@Y jg

奥古多媒体7Lp k te1j T E

可以看到clip_ocu.tree是一个二维数组,第一维表示Y轴,第二维表示X轴
a(v$xD;w `}w0 这里的意思是在Y=0的位置,X的跨度范围从0到4的这些点都是占位点

C-Lm:ID}0i0

9V6NK$B9BOh+Z*f R0再拿另一种类"tree2"来看看:奥古多媒体2@'qb{W%u'w]
这样的占位点我们应该怎样表示呢?
奥古多媒体Tf XU.l"s

奥古多媒体#`.MO1`9bxI"T

 

Egi!T{X0
 
             
             
          奥古多媒体f/u6],[~?'u!W[,Z

 

X~A$`,m7uh?0

Z [|T3x0我们可以这样写奥古多媒体 \o @ IP3f.n Yx
clip_ocu.tree = [[0, 4],[0.4]];奥古多媒体4[#U]8Hn(q4NQ
表示在Y=0的位置,X的跨度范围从0到4,奥古多媒体5D_@0r d g o
在Y=1的位置,X的跨度范围从0到4,奥古多媒体+}\P(v Z
这些点都是占位点

vo2U^IPDW3U&q0 奥古多媒体-u8~N[;gtja(q

由此可见,我们可以通过增加数组的长度来表示不同Y轴上连续的X坐标点,第二维数组所表示的跨度并不一定相等,也不一定要从0开始,例如:
'X/q&S ]0n9sRu0 clip_ocu.room2 = [[0, 11], [2, 15], [4, 19], [6, 22]]也是可以的,文件中的房屋就是这样的一个例子.奥古多媒体:{(y7_ g@7U@X
奥古多媒体!Z2qSbH)Z7?,O%}
奥古多媒体/| f9WX"r%E0Pu:^

T3d9Lj"V*GOj%B8n;i$}0可能有人会问,为什么要搞这几个表啊,直接把物件拖到场景不是更好?
G*]1K B^/L']T0 其实这样做是为了能够方便修改和扩展,使我们只需对表操作就可以达到目的,同时为数学模型的建立提供良好的数据形式,例如我现在要多加个场景,我只需要调用相应的座位表,再addclips就可以完成操作了,再如,我要建立随机地图,那么可以先随机算出“网络”,再建表。奥古多媒体2E^D;\R.G@b1j
当然如果你只是想把这个应用做完就算了,不打算修改,扩展的话,那么你可以直接把物件拖到场景就ok了。

t i zDg:J a OkK0
 

五、总结

      这篇文章到这里算是完了,但这个APP还有很多想象的空间,例如可以添加一些花巧的东西,验证,等级,踢人,动作之类的;也可以运用一些数学模型,如cameral,但要注意的是flash本身的功能限制,不要一味加入大量运算而使应用的可用性或可玩性降低,我比较倾向于把一些简单的运算给Flash,把一些复杂的留给数据库来做(如提供智能的数据),或者这时候大家已经想到前面我提到的网络RPG,社区之类的....奥古多媒体A mA;\:Dy;j
还有的就是在这篇文章没提到的细节,大家可以参考一下我的源文件,如果有时间我也会以教程的方式作一点作补充。
Vw'D/G*`$N.[0 希望这篇文章对大家有点用,同时预祝大家开发出出色的互动程序。奥古多媒体a&@&W9[|^hXT
 
  源程序下载 奥古多媒体%N j N[3j&F!ME

-y'f-ES'Z zPc*Co%g0
顶:26 踩:21
对本文中的事件或人物打分:
当前平均分:-0.09 (108次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.47 (118次打分)
【已经有101人表态】
17票
感动
12票
路过
10票
高兴
11票
难过
14票
搞笑
14票
愤怒
8票
无聊
15票
同情
上一篇 下一篇

网络资源


音乐
嫁衣 画心 歌曲 天亮了 青花瓷 那滋味 Nobody 没有如果 不了了之 爱的华尔兹 生生世世爱 i miss you 说好的幸福呢 如果我变成回忆 在心里从此永远有个你
火苗 心碎 稻香 带我走 我知道 爱得起 我叫mt 类似爱情 明天过后 一定要爱你 等爱的玫瑰 原谅我一次 丢了幸福的猪 斯琴高丽的伤心 这一生回忆有你就足够
白狐 偏爱 犯错 下雨天 小酒窝 樱花草 此生不换 分身情人 郎的诱惑 姑娘我爱你 寂寞才说爱 关不上的窗 一个人的浪漫 即使知道要见面 不是因为寂寞才想你
拾忆 王妃 心墙 全是爱 棉花糖 最天使 少女时代 爱丫爱丫 星空物语 我要的飞翔 我们都一样 我叫小沈阳 爱我就跟我走 让我为你唱首歌 爱上你等于爱上了错