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

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

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

一、前言

   
          奥古多媒体V&fd}w+x M

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

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

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

y!mMgO0
   
    构思    
        奥古多媒体C(E$aW/W!he

先来构思一下内容:

(W iWmV T6CP0 奥古多媒体4FA/yNi1wq-n


.K&WZR'L J;? h0 首先,我们会有一个场境,上面有一些物件(例如树,屋之类的)。奥古多媒体~bZ\MH(d/ZuIU
然后,当客人上我们的SWF,我们让他选择一个角色,填上自己的名字。
\e|I2P*O0 接着,角色出现在场景。
.yb C;Rrd0 再接着,有另外一些客人在地球不同地方也连上了,登陆后,他们也会有自己的角色,我在场景中可以看到他们,他们也可以看到我。奥古多媒体%S1vI!xq%Cca
然后再接着,象RPG网络游戏一样,我们会有走动,也可以看到对方的走动,并且我们之间会有文字的对话,如果喜欢,也可以只按一键 就可以用语音对话(视频就先免了吧,我们已经有角色来代替我们的样子的出现了,但不排除以后再加进去)。

qm_W0U.t7qo0

.S9n]\)x0奥古多媒体IuW+n!z2SU
好了,我们心中已经有辐图像浮现出来了。

O#M hc4F7rf\t0 奥古多媒体{a+e+t\P2F _6?@

 奥古多媒体9J p r2~~w/W

   
       
         
    三、材料准备    
 

选材:

   
          奥古多媒体6dIj,s x5w z%IS[K

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

c2gbBos y T#zbT0 奥古多媒体 e-F(JM r*V

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

x0O?rG$K3}d0可以把这些图片归成两类
iq-IOy o d `0 角色;这里我们要用几个不同的角色,每个角色几个方向的图片都要准备,可以是4面,8面,甚至是16面,处理差别不大(由于材料的限制,我只用了四面的),而每个方向至少要有两张图,来模拟该方向的动态效果
zL0R}h)`r7U3O~0 物件:静态图就可以了,需要的时候也可以用动态图
'J g6z.E D*VQt0 接着,我们Firework或其他图形编辑软件将图片空白处转成透明,这样就得到素材了。

G2Z#OE XZ9fb!C.H0 奥古多媒体p(\JtN9Sd

 奥古多媒体%A4G K#@!{"_

   
 

理材:

   
         

0RN n,c|0将素材导入FLASH后,我们把不同物件的作成不同的MC, 对于数,屋,椅,我们处理如下(具体操作省) 奥古多媒体&a1mQD zK9c

种类名称 Linkage Name MC Name
房子 room2 room2
小树 tree1 tree1
大树 tree2 tree2
椅子 sit1 sit1
邮筒 email email
垃圾箱 rul rul
奥古多媒体-} P+YV(Va k5H4L]:bt

对于人物的处理,先建立一个mc:c1(所有的角色按照C1,C2,C3...),奥古多媒体 AX2a#[7X"[,{
c1内有4桢,每桢有一个表示方向的MC,MC名都是DIR,奥古多媒体BjB!\(m&J^ E `^$h
mc的分别代表四个方向:上下左右方向奥古多媒体w _8Zg;A
mc:c1up,c1down,c1left,c1right
-I7r&aL`0l0 如果有多个方向图片,就多做个方向mc奥古多媒体A)x$x"nqZ/]0w
每一个方向mc有3桢,是该方向的动作

4m0eM9q/E,paL0 奥古多媒体;b2|nnL!~E

 奥古多媒体'`:G+M8@G

   
   
     
         

vF.E8n8`#U/N$q6D Z0好了,我们已经准备好材料了,接下来我们开始写程序.奥古多媒体HjBb4~R

奥古多媒体 mDU:zfRc

 奥古多媒体CtUS$F*v

0g1MfB9FBmA!@0 奥古多媒体3s4rW2Up1jc!DT!i

   
                               
   

四、编写程序:

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

lbY:f(ot0可视对象:                程序:
KF&it:O8U0 地图       --------- 数组地图(Map)
5g"hh*K F;Sr3RX5C0 物件(树之类的)  --------- 标记(Key) 
P;fM)y&r0 角色        --------- 互动

m-] lPn d0 奥古多媒体)SD{t.Jk

需要通过FCS交换数据的部分
bW-o-K sB2J@plY0 角色踩点
\DYo&g&d)s0 角色方向动作奥古多媒体 SqE[ R.cP5Q/DU
音频奥古多媒体mD7px1np)L
文字奥古多媒体qt-j#Q? e"ro

3_1@#}L*dMo0 奥古多媒体JQFVt5s2H)O{'B|&i

   
   

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

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

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

})~N0@/w{j%os0 奥古多媒体%S\@ A-E

接下来要把数组建立起来,有的人喜欢会直接给出数组,但因为我们设地形为平坦,同时为了容易修改,我们用function建立,
"D\!bJ^0 mapadd(startnx, startny, rxn, ryn, rx, ry)奥古多媒体%f(p:i0W:E;Ik]/E d
现在从库中拖出地图的图片放在场景适当的位置中,我们可以很容易读出视图格子起始(6,5),转化成数组map时要乘2,

&x{IHv0Jm0 奥古多媒体(q%P _$`Fp"m'V_

奥古多媒体+u9@][hb o

奥古多媒体$ko,`+`!EQv&hM

 

4S3T` ^dY%[v~0
     
   

角色行走基础:

            奥古多媒体 Ky*B%F8MWr

本来介绍完地图,顺理成章应该介绍上面的物件才对,但有些东西为了让大家好理解,先提上来说.奥古多媒体i0]8vml)w
我们这里用的角色控制是经典的键盘控制行走,先简单介绍一下
xu/@)|c z'mj0 (有游戏基础的可以略过这里)奥古多媒体R A2Q3P4F kd2{o
我们用以下这两条命令进行方向键捕获:
)X@&yTD-r!s0 X轴方向的,左右两值相减,求出步行左右方向,步长为一
0Q/G9H3[6X6kF H0 var rl = (Key.isDown(Key.RIGHT)-Key.isDown(Key.LEFT));奥古多媒体7G3S,] O%j xY%_}
Y轴方向的,左右两值相减,求出步行前后方向,步长为一奥古多媒体Y-F,Uh s
var ud = (Key.isDown(Key.DOWN)-Key.isDown(Key.UP));奥古多媒体A [ j(EN-mv#pC
接下来我们是要让人物在地图行走,
!OWT)h0g0 随便拖一个角色进入场景,就拿c1吧,变量为_root.cha,
X `Ga&s7]0 让其在数组地图有对应的坐标
9F.]8nyuY m:ZS0 _root.xpos,root.ypos奥古多媒体3UJFcSE
并让其通过数组地图取了实际坐标
(r2X$BfAW!C0 map[_root.xpos][root.ypos]
e]A ID!~;A0 请看下面的代码

g8H `|8r:Ny?KO0 奥古多媒体@:XO7R\


!Gft/|S0 奥古多媒体n8D V0Vm xF

mp@ NH0

E6vGf,Ni mo q0现在角色可以在地图上行走,而不会超出地图.但不能进行网络上的互动奥古多媒体4B,N$K"O-^9s[F
要进行网络上的互动就要通过FCS....,我们从登陆开始入手

];@p]'Z keU O0 奥古多媒体*g m0T;k;H/~2E$Fp+A

 

*`$H;F2nBd7a"eK0
  服务端与客户端的对话
                             
                       
                             
           

'x#D5as,EJ _6Pt N?l0例子中我做了一个登陆平台(lib:LoginP)
.W:M BW!on0 当某一用户填了名字,选了角色,并按LOGIN,我们就可以得到两个变量,
p&`\Z'~2| d0 并调用doConnect function
奥古多媒体eet9fAr?

$q&pY_+N0
D*w3p`Wl0
sa;pbH {0
q6|uy8EB o3~[+G)K0 奥古多媒体2]S/sr z6F3nL
奥古多媒体lH%H!t7M&a1P9v{

Ax&|~eG hm$]h0
;?Y]#[Ik@K&TUq0

2o$XQA8Q0

K4P\'b,v7N.Cb+`U0

R_*b|;vqz0 奥古多媒体[n_Z$RRM8|U

 

yP,y`X0
 

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

           

!@y$grm$d)v`0现在把加入人物的 addcha function拿上来看看;从图中我们可以看到一个人物应该包括几部分,奥古多媒体+Nl5MVARQ7f0]5k
一是角色本身的MC,二是人物对话框,三是登录名的标签

#ih6n5R6^A.`g2T0

v*@Skl e.AS$t0奥古多媒体+^:nJ/N/Z

?7di$N[`6L"h0

Qx-\d;{cq0 奥古多媒体oi v ]"T,g

这时候当用户发送文字"倒,你很傻",用chat_so.sent("showmsg",_root.chaname,"倒,你很傻") 奥古多媒体7M?#{.L*jD5P-C
就可以各客户端包括自己调用showmsg."倒,你很傻"字样出现在对话框和又边的文字记录框

?-E~t6e0 奥古多媒体mr3k ]IO;^

奥古多媒体nS$j!R)I2R
奥古多媒体I D$i&us in x

     

再回到地图的行走

           

CMs]t0
`/|8{#Jm;O0
奥古多媒体/Q.n6TdR8EA#D+A

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

-J/Dl,[#}hy0 奥古多媒体6x_6\Z#crf)|7f

 奥古多媒体HMFu q c

创建环境(添加物件)

 
           

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

0[N ML:J u$y&m+b0 奥古多媒体`m @t/^6eZ

我们表示为:奥古多媒体&Z7P0m%VZ'H#O,^W
clip_ocu.tree = [[0, 4]];奥古多媒体L hXH\Dq\8p
clip_ocu是收集各种类型占位属性的对象

yi Sag({`7j |1S0
               
            奥古多媒体%f}*E|+?{

 奥古多媒体5C$C8OQZDm

-]0e8MwT0可以看到clip_ocu.tree是一个二维数组,第一维表示Y轴,第二维表示X轴
z#`1T5Mn&Iw*R0 这里的意思是在Y=0的位置,X的跨度范围从0到4的这些点都是占位点
奥古多媒体$p3kx|y*|1EN)r

(L fJ2u].h5s0再拿另一种类"tree2"来看看:奥古多媒体0Oj(gx \#d8Zl:d
这样的占位点我们应该怎样表示呢?

t/?'\*|1i rh$C^l+T0

s2Q1^Ant L_0 奥古多媒体:q;Q+w,S8Fq F4E;EC

 
             
             
         

9J`&Q7Jm2Xa;H bw0 

%O5R7apgg8EN0k h0 奥古多媒体"Kk)QuDAT:ht

我们可以这样写
9V(j].\ p9P&c&UX0 clip_ocu.tree = [[0, 4],[0.4]];
*P2W!R-aj/P(g t0 表示在Y=0的位置,X的跨度范围从0到4,
BaMVf$b0 在Y=1的位置,X的跨度范围从0到4,
8| x;W'x+zF3_%Ft)\0 这些点都是占位点
奥古多媒体@3t2c(G{*Z%G)Z3J5z

6Q Y+N`E.pB,e0由此可见,我们可以通过增加数组的长度来表示不同Y轴上连续的X坐标点,第二维数组所表示的跨度并不一定相等,也不一定要从0开始,例如:
g&qm?0X(h3q0 clip_ocu.room2 = [[0, 11], [2, 15], [4, 19], [6, 22]]也是可以的,文件中的房屋就是这样的一个例子.
KV A}i pch0
L,U'{5GL_0
奥古多媒体:I,? iV≻IR

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

P&\J,m7D@~0
 

五、总结

      这篇文章到这里算是完了,但这个APP还有很多想象的空间,例如可以添加一些花巧的东西,验证,等级,踢人,动作之类的;也可以运用一些数学模型,如cameral,但要注意的是flash本身的功能限制,不要一味加入大量运算而使应用的可用性或可玩性降低,我比较倾向于把一些简单的运算给Flash,把一些复杂的留给数据库来做(如提供智能的数据),或者这时候大家已经想到前面我提到的网络RPG,社区之类的....
-R bvs ] tx0 还有的就是在这篇文章没提到的细节,大家可以参考一下我的源文件,如果有时间我也会以教程的方式作一点作补充。
Tce_n!s+p0 希望这篇文章对大家有点用,同时预祝大家开发出出色的互动程序。奥古多媒体-}(K-? {&r2[n7jS
 
  源程序下载 奥古多媒体A"n*{0\Ki
奥古多媒体u#]B]!o5H ME)F
顶:15 踩:11
对本文中的事件或人物打分:
当前平均分:0.09 (45次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.29 (52次打分)
【已经有47人表态】
8票
感动
5票
路过
4票
高兴
5票
难过
7票
搞笑
7票
愤怒
5票
无聊
6票
同情
上一篇 下一篇

网络资源


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