| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
一、前言
|
|
|
| |
|
|
|
|
奥古多媒体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^+lQ.H $xZN0v O{0
首先,我们会有一个场境,上面有一些物件(例如树,屋之类的)。 1HQ#|lI CJ/J0
然后,当客人上我们的SWF,我们让他选择一个角色,填上自己的名字。 *gy)oPI&T
d0
接着,角色出现在场景。奥古多媒体Ly+J`.dq7LN2K
再接着,有另外一些客人在地球不同地方也连上了,登陆后,他们也会有自己的角色,我在场景中可以看到他们,他们也可以看到我。 o+r;A*E8z.U*tpg0
然后再接着,象RPG网络游戏一样,我们会有走动,也可以看到对方的走动,并且我们之间会有文字的对话,如果喜欢,也可以只按一键 就可以用语音对话(视频就先免了吧,我们已经有角色来代替我们的样子的出现了,但不排除以后再加进去)。奥古多媒体KyP`\KS
奥古多媒体)l2E'L/B:QThEfz :`8w0x|R:C"A&K4|0
好了,我们心中已经有辐图像浮现出来了。奥古多媒体h7odh%_
~
奥古多媒体d/|+ZRI et 奥古多媒体Pd!fT"P:O
O_h@
|
|
|
| |
|
 |
|
|
| |
|
|
|
|
| |
|
三、材料准备 |
|
|
|
|
选材:
|
|
|
|
|
|
|
|
|
奥古多媒体\\9C@9a^N'ic/w 本例子的素材选择很重要,决定我们的程序怎样写。 }O'Cr]k w{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'fpGw0将素材导入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 LYcW
bQO0
'ru4f W/{-i0 J.qm(ZE6ev0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
四、编写程序:
|
| |
|
|
|
|
|
写的程序必须跟素材挂钩,但同时也要有自己的独立性,也就是写的程序必须适应你收集的素材,例如前面说到的视角,具有自己的独立性是指,写完这个应用后,如果要换素材,或者要扩展,程序不需要作出大举动的修改,所以我们写程序的时候要留有一着,说不定一段日子后我们要写一只网络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{D p需要通过FCS交换数据的部分奥古多媒体JC,Ve;`b g\
角色踩点 :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^Gi8i/L0 奥古多媒体V}"x7UP#A
hdGw)xLt0 U k$yb)Cu3vY'_:sB9l0
|
|
|
|
| |
|
角色行走基础:
|
|
|
| |
|
|
|
|
|
奥古多媒体)mg Es Poh
Q+k s 本来介绍完地图,顺理成章应该介绍上面的物件才对,但有些东西为了让大家好理解,先提上来说.奥古多媒体Tc*E$AM0H3F_
我们这里用的角色控制是经典的键盘控制行走,先简单介绍一下奥古多媒体Y/S:E`2v7]S
(有游戏基础的可以略过这里)奥古多媒体)qZ pj#C$dzC
我们用以下这两条命令进行方向键捕获: R#uD!Wkl6F,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,奥古多媒体)B GSw'_d6I
xMX
让其在数组地图有对应的坐标奥古多媒体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'aua kY(@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$zLr
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
 4tA8R8c N*^0
奥古多媒体tbQNyB(Bf;y V
奥古多媒体U~0NX'z这时候当用户发送文字"倒,你很傻",用chat_so.sent("showmsg",_root.chaname,"倒,你很傻")
'az,H @z
a$HJ
R;v+J0
就可以各客户端包括自己调用showmsg."倒,你很傻"字样出现在对话框和又边的文字记录框 Y~x5T3GO0
&k |