上一篇 | 下一篇

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

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

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

一、前言

   
         

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

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

J1q` e4}]8B

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

#{sp^5e;A$b$Q7jL
   
    构思    
        奥古多媒体 Ir"{L)}7g

先来构思一下内容:

2W]'|Zl:b-tMCC 奥古多媒体 mkG,].y0]*vP


+j;b&K5@~"S0Y;p;bo 首先,我们会有一个场境,上面有一些物件(例如树,屋之类的)。
H.yNT:B 然后,当客人上我们的SWF,我们让他选择一个角色,填上自己的名字。奥古多媒体J6u1D` fc.jp@5Fu'y e
接着,角色出现在场景。奥古多媒体 }`Xu:vg^
再接着,有另外一些客人在地球不同地方也连上了,登陆后,他们也会有自己的角色,我在场景中可以看到他们,他们也可以看到我。
6S q$}@;fZB 然后再接着,象RPG网络游戏一样,我们会有走动,也可以看到对方的走动,并且我们之间会有文字的对话,如果喜欢,也可以只按一键 就可以用语音对话(视频就先免了吧,我们已经有角色来代替我们的样子的出现了,但不排除以后再加进去)。
奥古多媒体'o|tl\\

奥古多媒体O0]]*sp,bn%J1p


td$zb#Dq tk 好了,我们心中已经有辐图像浮现出来了。
奥古多媒体 `2H6|b7u.Qy2zr {

奥古多媒体"z Q6UupQ5wI

 

g:i}`Y:aIq3J4g
   
       
         
    三、材料准备    
 

选材:

   
         

IO"r.P-{本例子的素材选择很重要,决定我们的程序怎样写。

,U`$g2q~W7dSz 奥古多媒体YS'vA e q

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

5P`F klr 奥古多媒体.YaXFuwx

可以把这些图片归成两类
Sxtd7BXI"MBp 角色;这里我们要用几个不同的角色,每个角色几个方向的图片都要准备,可以是4面,8面,甚至是16面,处理差别不大(由于材料的限制,我只用了四面的),而每个方向至少要有两张图,来模拟该方向的动态效果
'Uxbe8M$KuD'` 物件:静态图就可以了,需要的时候也可以用动态图
/rflM.V 接着,我们Firework或其他图形编辑软件将图片空白处转成透明,这样就得到素材了。
奥古多媒体Y x4Snw+FV1x'@

I4k+q%|do{4Qa 奥古多媒体L.~3~^F

   
 

理材:

   
          奥古多媒体)h[U:o4E![;_0r

将素材导入FLASH后,我们把不同物件的作成不同的MC, 对于数,屋,椅,我们处理如下(具体操作省) 奥古多媒体Dm?$J!h/xlms

种类名称 Linkage Name MC Name
房子 room2 room2
小树 tree1 tree1
大树 tree2 tree2
椅子 sit1 sit1
邮筒 email email
垃圾箱 rul rul
奥古多媒体7_Zd0]W'O5|(wRC:Tn

对于人物的处理,先建立一个mc:c1(所有的角色按照C1,C2,C3...),
$Q0_u6ky#Y%X c1内有4桢,每桢有一个表示方向的MC,MC名都是DIR,
g1JW@P2P;H mc的分别代表四个方向:上下左右方向奥古多媒体Y8XQm] I-fr9GJrd
mc:c1up,c1down,c1left,c1right奥古多媒体3j,M0[ uFUf
如果有多个方向图片,就多做个方向mc
\F3q*r3| E Ai j 每一个方向mc有3桢,是该方向的动作
奥古多媒体6t/n1aM7St$H

奥古多媒体E,SpCKN o

 奥古多媒体qX CN.@^ U quC

   
   
     
          奥古多媒体8u![W;sl'C3}

好了,我们已经准备好材料了,接下来我们开始写程序.奥古多媒体 f mf,d JS&~E*M

M;wE2WP2o&}e 奥古多媒体6P3[M!I8_n

#}7lw@+xw [9A 

c9o,I!]6K1Z
   
                               
   

四、编写程序:

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

可视对象:                程序:
w%mv2IJ.L 地图       --------- 数组地图(Map)奥古多媒体c~9Q~;{
物件(树之类的)  --------- 标记(Key) 
8ciR2T7vW G 角色        --------- 互动

N&ZA E8J[x}O Jfd

&m?R`:q5e)|需要通过FCS交换数据的部分
C,g7yw Xn z)|y:{F 角色踩点奥古多媒体/g#[lx&ei~#~,n0u
角色方向动作奥古多媒体Hov3ED)j
音频奥古多媒体aBHwA'j9AK&y/@Z
文字奥古多媒体\:sAj+URgq hd

~EzY'DG7O1k.[n 奥古多媒体^0Qv:dB$e3y)F%m

   
   

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

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

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

0Z@+Us1G o 奥古多媒体s0y1Fmo+d~ w-u_

接下来要把数组建立起来,有的人喜欢会直接给出数组,但因为我们设地形为平坦,同时为了容易修改,我们用function建立,
U9E6?7f5x9[Dl mapadd(startnx, startny, rxn, ryn, rx, ry)奥古多媒体Sf6q(^3]AUH
现在从库中拖出地图的图片放在场景适当的位置中,我们可以很容易读出视图格子起始(6,5),转化成数组map时要乘2,奥古多媒体|S g1t!zB i

;ASs4d?%a:C7I奥古多媒体8WR[/Ky.u[$w i!g)G

奥古多媒体2rQ I6}8LPb.n4y

 奥古多媒体4Cd9CLIHgB

     
   

角色行走基础:

           

-r2PV4ZBI/b本来介绍完地图,顺理成章应该介绍上面的物件才对,但有些东西为了让大家好理解,先提上来说.
b!bQ"J4xP 我们这里用的角色控制是经典的键盘控制行走,先简单介绍一下奥古多媒体(A5D_4Zv/QE
(有游戏基础的可以略过这里)
6ke'Q(]lR.v_n] 我们用以下这两条命令进行方向键捕获:
6V(bf9F Cvt:A-F ^ X轴方向的,左右两值相减,求出步行左右方向,步长为一奥古多媒体sV6d%M;cI,nI'g-C
var rl = (Key.isDown(Key.RIGHT)-Key.isDown(Key.LEFT));奥古多媒体G5j:Z.Vi'@[(f@
Y轴方向的,左右两值相减,求出步行前后方向,步长为一
Zd&_ WNIM var ud = (Key.isDown(Key.DOWN)-Key.isDown(Key.UP));
s]{d*]|e 接下来我们是要让人物在地图行走,
(X@3xrD!xb 随便拖一个角色进入场景,就拿c1吧,变量为_root.cha,奥古多媒体 prcnl:HOk1l z#B
让其在数组地图有对应的坐标
5H A;}z6@^UA\:a:p _root.xpos,root.ypos
m B.t-^P DW 并让其通过数组地图取了实际坐标奥古多媒体;w_D.Nx9m-y;c
map[_root.xpos][root.ypos]奥古多媒体8v(FW8]*F#|
请看下面的代码
奥古多媒体7cN8f.S.ju%Z+`

奥古多媒体K2F]"K(t u1@Y


tu2A%h"s9w$sy 奥古多媒体6N*e T#E9GCNL
奥古多媒体XFh*j,os}LM

hYY5w@k现在角色可以在地图上行走,而不会超出地图.但不能进行网络上的互动
%?7t-D,CW4c-j 要进行网络上的互动就要通过FCS....,我们从登陆开始入手

*z;I,qV C5W0rV 奥古多媒体E h+K!cM,?#_-b&O

 

Z Xf'YE!K
  服务端与客户端的对话
                             
                       
                             
           

kj/qT|P!E*m例子中我做了一个登陆平台(lib:LoginP)
m,p*Jl}!z'S J 当某一用户填了名字,选了角色,并按LOGIN,我们就可以得到两个变量,
6\FGe@ tQ 并调用doConnect function
奥古多媒体L y }@H1c

奥古多媒体;Kr.KzD-l|K


nn:in%D A7m(W 奥古多媒体}[.U5Hc j

Q2l|Svw&d'h\B 奥古多媒体;nE+|)RT5Hf(D
奥古多媒体~T6yw,r*U&K9c
奥古多媒体&\3n w[?R
奥古多媒体0HB+N!u$R

@Y#HMUx r 奥古多媒体 l}5Z+mgS {X

-{z;]+y$}

U9C-j{&f|["@j 

4l[k9X\
 

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

            奥古多媒体uk)c a S.@!}

现在把加入人物的 addcha function拿上来看看;从图中我们可以看到一个人物应该包括几部分,
5_[:hBB 一是角色本身的MC,二是人物对话框,三是登录名的标签
奥古多媒体 BP a6xN"C

奥古多媒体 M'`5tf*Ybl H] o J


,} M9uB0O ?'?rX!]
5ry8vli3B] E

!S&Nd0MIlV

4w5X {8R}N(U这时候当用户发送文字"倒,你很傻",用chat_so.sent("showmsg",_root.chaname,"倒,你很傻") 奥古多媒体3Fd7t1uQ"W7{Z
就可以各客户端包括自己调用showmsg."倒,你很傻"字样出现在对话框和又边的文字记录框

6E8C3tJlR4h+y 奥古多媒体/MK@3V]Rcy

奥古多媒体3t3jg2cG;Z"H

g.l&{3aH(A8u3I"y\
     

再回到地图的行走

           

jmr(`4m!S VGg奥古多媒体O2i;U/X1|P ArPC

y!XR,L%w-\|,ur

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

~P3C/`0[4f 奥古多媒体,\hdm,R2P|

 

`rc:`:F.b.v!E

创建环境(添加物件)

 
            奥古多媒体+} QB~M&Bs+L f(|tr

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

Qtl6X3c/|

1lD;VS bqR@我们表示为:奥古多媒体0tu,z5|yz'Km
clip_ocu.tree = [[0, 4]];奥古多媒体U^tP \ i
clip_ocu是收集各种类型占位属性的对象
奥古多媒体%\v%d c Q.u0e/l

               
            奥古多媒体*f:|(J.h]9Xq*g$fg5V

 奥古多媒体4]c4b)DE}U|

奥古多媒体5@jY/h[ [yc

可以看到clip_ocu.tree是一个二维数组,第一维表示Y轴,第二维表示X轴
~LL%b)R,j 这里的意思是在Y=0的位置,X的跨度范围从0到4的这些点都是占位点
奥古多媒体w9~k/_{5v~4~u

MjmZh?%b再拿另一种类"tree2"来看看:奥古多媒体,H w `mx|^
这样的占位点我们应该怎样表示呢?

.T_@s_&zkd^xH

^:E:qQS%In 

+\D-D"B#G*\E1G*V x7Y*vA
 
             
             
          奥古多媒体.\E+gf `EA _T`

 奥古多媒体'cdf1Id}5pc

(AH+X[3a.a \TT我们可以这样写
`D Ph"{m clip_ocu.tree = [[0, 4],[0.4]];
2IA,a4Fs\ 表示在Y=0的位置,X的跨度范围从0到4,奥古多媒体#s'EzA.hN
在Y=1的位置,X的跨度范围从0到4,
Cc]R d;w l 这些点都是占位点

xRlK7Ps-A

@kD6vyBfA由此可见,我们可以通过增加数组的长度来表示不同Y轴上连续的X坐标点,第二维数组所表示的跨度并不一定相等,也不一定要从0开始,例如:
}Q l)R0j9t clip_ocu.room2 = [[0, 11], [2, 15], [4, 19], [6, 22]]也是可以的,文件中的房屋就是这样的一个例子.奥古多媒体n^&i)S L[|.r Gu
奥古多媒体3BOTam!J Yq|

a$Wn(Ad:S7`L 奥古多媒体$F6Z8Fc0ww'l

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

%U|6D3U LJ` [f)H;V C
 

五、总结

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

l(pK'm6K[+ce\*B

字号: | 推荐给好友

 

评分:0

我来说两句

seccode


音乐
落叶 画心 放生 天亮了 牡丹江 那滋味 擦肩而过 怀念过去 北京欢迎你 突然好想你 吻的太逼真 说好的幸福呢 坐上火车去拉萨 如果爱能早些说出来
愚爱 心碎 稻香 带我走 醉赤壁 魔杰座 我还想她 为你而活 一定要爱你 等爱的玫瑰 原谅我一次 越单纯越幸福 最后一次的温柔 给我一首歌的时间
白狐 光荣 火花 下雨天 小酒窝 樱花草 为你写诗 无可取代 无情的温柔 寂寞才说爱 忘不掉的伤 爱上你是个错 陪你一起看草原 地球人都知道我爱你
城府 假如 花海 兰亭序 爱太痛 舍不得 你若成风 女人如烟 外滩十八号 我们的纪念 摇滚怎么了 和寂寞说分手 爱上你是我的错 爱情里没有谁对谁错