上一篇 | 下一篇

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

发布: 2007-1-25 08:08 | 作者: foxet | 来源: aougu.com | 查看: 1038次

作者: Foxet
开发时间: 3.11.2003
开发工具: Flash MX,文本编辑工具
调试环境: Flash Communication Server 1.0或以上
开发知识: 有MX as 和FCS基础(本文对命令的‘用法’不作分析)
对象: 想了解“FCS如何结合FLASH进行开发应用”的人
                                 
   

一、前言

   
         

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

-v`rd(@

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

E0[XU0e t9A`   我们这里就用FCS跟FLASH脚本编程结合起来,开发一个多人互动的应用,建议大家先看一下文件,知道有什么,接着看一遍本文,知道怎么回事,最后再结合文件,融会贯通。

Bs Y0n|
   
    构思    
        奥古多媒体.WwTKXM3Y(f

先来构思一下内容:

s2yi0?pZ PI 奥古多媒体/C4g4n@z&K

奥古多媒体MJ;xTW8{N;zG
首先,我们会有一个场境,上面有一些物件(例如树,屋之类的)。
z\ A0W jm0s 然后,当客人上我们的SWF,我们让他选择一个角色,填上自己的名字。
*Ci6M]1GI2jJn"sk 接着,角色出现在场景。奥古多媒体 mO f3x-HVVH%nY
再接着,有另外一些客人在地球不同地方也连上了,登陆后,他们也会有自己的角色,我在场景中可以看到他们,他们也可以看到我。奥古多媒体2C.n#z^5?mk5I;I:X
然后再接着,象RPG网络游戏一样,我们会有走动,也可以看到对方的走动,并且我们之间会有文字的对话,如果喜欢,也可以只按一键 就可以用语音对话(视频就先免了吧,我们已经有角色来代替我们的样子的出现了,但不排除以后再加进去)。
奥古多媒体6?4q+Z;Qg)n

A\|6x a,@
L/?k_n2A } 好了,我们心中已经有辐图像浮现出来了。

1i,wH&j(w

YSa)i![[9eg,V 奥古多媒体#C6n$_;p"C9n

   
       
         
    三、材料准备    
 

选材:

   
         

3M S(f1FlpK d本例子的素材选择很重要,决定我们的程序怎样写。奥古多媒体U Fo/zU3]7k,\L1{

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

奥古多媒体Z A4OsU7T e

可以把这些图片归成两类奥古多媒体4e7s4x R-q-b7~9G!Z
角色;这里我们要用几个不同的角色,每个角色几个方向的图片都要准备,可以是4面,8面,甚至是16面,处理差别不大(由于材料的限制,我只用了四面的),而每个方向至少要有两张图,来模拟该方向的动态效果
5_qnag;EG%Y 物件:静态图就可以了,需要的时候也可以用动态图奥古多媒体^+L0G ^-|1S!qh
接着,我们Firework或其他图形编辑软件将图片空白处转成透明,这样就得到素材了。

@gc;]f 奥古多媒体1zn7hzQwf%m%yp

 奥古多媒体^&T6T&h$J:[

   
 

理材:

   
         

7TO%x4I;W YvT将素材导入FLASH后,我们把不同物件的作成不同的MC, 对于数,屋,椅,我们处理如下(具体操作省) 奥古多媒体DK{o5^W3D

种类名称 Linkage Name MC Name
房子 room2 room2
小树 tree1 tree1
大树 tree2 tree2
椅子 sit1 sit1
邮筒 email email
垃圾箱 rul rul
奥古多媒体{ Z:~Gq-|.E

对于人物的处理,先建立一个mc:c1(所有的角色按照C1,C2,C3...),
1\7s;f_aL { a;yk c1内有4桢,每桢有一个表示方向的MC,MC名都是DIR,
6o2ad0yM e$|H t mc的分别代表四个方向:上下左右方向
S2hREV h2dP mc:c1up,c1down,c1left,c1right奥古多媒体l LtE1I;q
如果有多个方向图片,就多做个方向mc
F;C)q6@)J}se 每一个方向mc有3桢,是该方向的动作
奥古多媒体+e(ps.X a/p_&T

y[V)r'Xs/jceg Z-F"J 

3}E0[ h(_ u.t
   
   
     
          奥古多媒体G%jB]zC

好了,我们已经准备好材料了,接下来我们开始写程序.

:?#Y$ZB|7j`ABY 奥古多媒体 U*L"d4d"l2d'z x;P

 

+HRPM3DR)K#t?~

a3i@6{2`2y2Q N$e1F\ 

xa7|.N.bG$D!I
   
                               
   

四、编写程序:

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

可视对象:                程序:
b'S!W#g\J z1c 地图       --------- 数组地图(Map)
f J:w/BV7~ 物件(树之类的)  --------- 标记(Key) 奥古多媒体d x"xpaYC3mH3f
角色        --------- 互动

DKy {8q 奥古多媒体 o1w:p Z-|8U

需要通过FCS交换数据的部分
/?;X)Rck%O$P 角色踩点
g"a6q;ACjo#p~ 角色方向动作
4r7f6bz-[Wg m 音频
c2GTW?u~ 文字奥古多媒体T/M`%nP t&m!d#ug

-ux@|%Y 

K+qg-y n#Gvo]q0w@
   
   

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

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

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

z Mp!w'?*w"Wi J%` 奥古多媒体:n)uaXv2i:q%E

接下来要把数组建立起来,有的人喜欢会直接给出数组,但因为我们设地形为平坦,同时为了容易修改,我们用function建立,
5Vrr}5aU mapadd(startnx, startny, rxn, ryn, rx, ry)
M_W2vo+_%I 现在从库中拖出地图的图片放在场景适当的位置中,我们可以很容易读出视图格子起始(6,5),转化成数组map时要乘2,奥古多媒体u@LQ!y

oKOGSt,e

$HT)Cc$g/i7C
奥古多媒体GKT?y

 

/Jbgw*R
     
   

角色行走基础:

            奥古多媒体gSo)}XE*k

本来介绍完地图,顺理成章应该介绍上面的物件才对,但有些东西为了让大家好理解,先提上来说.奥古多媒体+o G%aX l-T&y}R8](r
我们这里用的角色控制是经典的键盘控制行走,先简单介绍一下
Q[t5}|4{"X*` (有游戏基础的可以略过这里)奥古多媒体V1ujWb#KbidY)I
我们用以下这两条命令进行方向键捕获:奥古多媒体OirbhX1s P
X轴方向的,左右两值相减,求出步行左右方向,步长为一
SdGuwV:~7Du var rl = (Key.isDown(Key.RIGHT)-Key.isDown(Key.LEFT));
3_s5?}+uW C*WxY Y轴方向的,左右两值相减,求出步行前后方向,步长为一
V)l+Gd LTu var ud = (Key.isDown(Key.DOWN)-Key.isDown(Key.UP));
L;V4CJ:i p | 接下来我们是要让人物在地图行走,奥古多媒体,tE.UbcL H4h)I k
随便拖一个角色进入场景,就拿c1吧,变量为_root.cha,奥古多媒体7a[#^(g}.W(}5D
让其在数组地图有对应的坐标奥古多媒体%C3k/ixR5O
_root.xpos,root.ypos奥古多媒体`1c]s6t*wy3h
并让其通过数组地图取了实际坐标
9{!g9D1s$PU8sk map[_root.xpos][root.ypos]奥古多媒体ssO`\ t E;g1x7C
请看下面的代码

$U*AN&jL@7rk

l MkMFJ'?-Qg奥古多媒体*A/MN iT?3? }

-xT8}BhdT.x

%Z{W V `(f)oR \ 奥古多媒体d-jES6D&` bY

现在角色可以在地图上行走,而不会超出地图.但不能进行网络上的互动
OAv5B'|O;SLY 要进行网络上的互动就要通过FCS....,我们从登陆开始入手
奥古多媒体"FYR_,f:i

@aY5AM%HU:\ 奥古多媒体3w:a_ z K,] a}

  服务端与客户端的对话
                             
                       
                             
           

@T(i,y@9vy8sQ+_'r s例子中我做了一个登陆平台(lib:LoginP)奥古多媒体!u0t@6S }v
当某一用户填了名字,选了角色,并按LOGIN,我们就可以得到两个变量,奥古多媒体E!my.s!H\~
并调用doConnect function

5z,B W}Nim(g-H 奥古多媒体#v`&_'w0u.w9u

奥古多媒体{2`SZ&aR rG F@

c!l!^3P2x 奥古多媒体9| G$F'Eg\

a^Y-u%e(Q ?9jzRX~ 奥古多媒体9Vx d ?BX|PD ^
奥古多媒体{]N,I6q4c z5}vfq

Aj2l ~c;B

4hE v QLT R[&H

HCu/s'gN7C4Lq奥古多媒体&z"HW7r+_)^&c3^$~Kr

GD%o*p!O;R f 奥古多媒体 yI'_1aB*azB

 

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

            奥古多媒体i&@7qm9Ml9o

现在把加入人物的 addcha function拿上来看看;从图中我们可以看到一个人物应该包括几部分,
{2F6I Hh%uX 一是角色本身的MC,二是人物对话框,三是登录名的标签

(P3XG7_9Zbwk

B7|E*g*t4r c;o
-nf'qw.|I"e
!P p2P N~ I^,m
奥古多媒体E)tyiKGZ/H

BsTJ.V9X这时候当用户发送文字"倒,你很傻",用chat_so.sent("showmsg",_root.chaname,"倒,你很傻") 奥古多媒体_SG{a,T
就可以各客户端包括自己调用showmsg."倒,你很傻"字样出现在对话框和又边的文字记录框
奥古多媒体0Z(B]%\TG's

奥古多媒体%N;u$zQug${wE*J

奥古多媒体G4My^Wz&A
奥古多媒体M%[ A4\a

     

再回到地图的行走

            奥古多媒体%kTUG!y amf

奥古多媒体C7ab4VV:O U0ht*L.?3AA
奥古多媒体x9BqDZ`(W5E${

uZi"i&s5o.R T现在大家可以启动FCS来调试一下,如果发现有不正常的工作,要注意的是,有些机械化的操作(例如建立一个MC,设变量),我这里省略了过程,大家可能以参考看我的文件奥古多媒体 fK+P|4h:j T,L-p2sX

奥古多媒体3[5D4V9P7N

 奥古多媒体6l2ZE |S{M'^/K

创建环境(添加物件)

 
           

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

5S*P:go,Vo

P _&y@$}rzv我们表示为:
SlS^B,d~ clip_ocu.tree = [[0, 4]];奥古多媒体K7R9t[(tZ(g6@
clip_ocu是收集各种类型占位属性的对象
奥古多媒体V NhD2E ?F;?;@&G$N

               
           

gwg5kBOTk4oj { 奥古多媒体*U!z*lH-H/H

&k%CT c3~q4HB可以看到clip_ocu.tree是一个二维数组,第一维表示Y轴,第二维表示X轴奥古多媒体/{N|-zUB%p@5o
这里的意思是在Y=0的位置,X的跨度范围从0到4的这些点都是占位点

s4n S8cCC 奥古多媒体r\a#Mg:eO

再拿另一种类"tree2"来看看:
i|%dxc0P \1I*j 这样的占位点我们应该怎样表示呢?
奥古多媒体N1[3{M:w)i:Z._H

奥古多媒体8p5os J p6VPmO@

 奥古多媒体D m,qyxu&JC1L

 
             
             
          奥古多媒体7O ` `/Loo KG)eS

 奥古多媒体RO![j/qY

奥古多媒体7TY(fG|'SLR

我们可以这样写奥古多媒体e3X |*C{q4H2U
clip_ocu.tree = [[0, 4],[0.4]];
MxO6\/g~`/D 表示在Y=0的位置,X的跨度范围从0到4,
x \-yg \y tg~O4X I 在Y=1的位置,X的跨度范围从0到4,奥古多媒体C5k5{!F`7XSRI T
这些点都是占位点

!C_+GR.f.X

3d"X H1t&rk由此可见,我们可以通过增加数组的长度来表示不同Y轴上连续的X坐标点,第二维数组所表示的跨度并不一定相等,也不一定要从0开始,例如:奥古多媒体)w$O\!K#s6u QK [8~.K_
clip_ocu.room2 = [[0, 11], [2, 15], [4, 19], [6, 22]]也是可以的,文件中的房屋就是这样的一个例子.
u$N\ y&X
:x*p,P2q3K7[b]$x
奥古多媒体uXE{}l"v@

,o.uVxc%?CB;e可能有人会问,为什么要搞这几个表啊,直接把物件拖到场景不是更好?奥古多媒体P H7Gu*y2Tn
其实这样做是为了能够方便修改和扩展,使我们只需对表操作就可以达到目的,同时为数学模型的建立提供良好的数据形式,例如我现在要多加个场景,我只需要调用相应的座位表,再addclips就可以完成操作了,再如,我要建立随机地图,那么可以先随机算出“网络”,再建表。奥古多媒体r {l`c"cmB
当然如果你只是想把这个应用做完就算了,不打算修改,扩展的话,那么你可以直接把物件拖到场景就ok了。

@Q+bP T:O
 

五、总结

      这篇文章到这里算是完了,但这个APP还有很多想象的空间,例如可以添加一些花巧的东西,验证,等级,踢人,动作之类的;也可以运用一些数学模型,如cameral,但要注意的是flash本身的功能限制,不要一味加入大量运算而使应用的可用性或可玩性降低,我比较倾向于把一些简单的运算给Flash,把一些复杂的留给数据库来做(如提供智能的数据),或者这时候大家已经想到前面我提到的网络RPG,社区之类的....奥古多媒体mN#PRO
还有的就是在这篇文章没提到的细节,大家可以参考一下我的源文件,如果有时间我也会以教程的方式作一点作补充。奥古多媒体X.w"D8?(}#k
希望这篇文章对大家有点用,同时预祝大家开发出出色的互动程序。
R M ~9P:fx C*H"y
 
  源程序下载
&s }$WC4B w ud"PA 奥古多媒体6o @6Gr4bzm)n@

字号: | 推荐给好友

 

评分:0

我来说两句

seccode