| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
一、前言
|
|
|
| |
|
|
|
|
2|xr3E2v'~{_ 说到网络上的文字、视频、音频等涉及通讯应用的开发,大多会想到用java(C++也可以),没错,java在这方面的确很强大的,但门槛高,需要有好的编程基础,就算会写,也得花不少时间,更不必说设计者开发这样的应用时要遇到多大的困难了......奥古多媒体
bp'`L{
h7`1T/J c)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'ye
接着,角色出现在场景。奥古多媒体}`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`Fklr
奥古多媒体.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 Aij
每一个方向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游戏,或者是写一个社区,我们把代码拿出来,可以容易地在远来基础上来改. |
F I}.W"\j k
好,现在来看看素材跟程序对应的关系:
奥古多媒体J)}"m
{2Fk8G可视对象: 程序: w%mv2IJ.L
地图 --------- 数组地图(Map)奥古多媒体c~9Q~;{
物件(树之类的) --------- 标记(Key) 8ciR2T7vWG
角色 --------- 互动 N&ZA
E8J[x}O Jfd
&m?R `:q5e)|需要通过FCS交换数据的部分 C,g7ywXn z)|y:{F
角色踩点奥古多媒体/g#[lx&ei~#~,n0u
角色方向动作奥古多媒体Hov3ED)j
音频奥古多媒体aBHw A'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,奥古多媒体|Sg1t!zB i
;ASs4d?%a:C7I 奥古多媒体8W R[/Ky.u[$w
i!g)G
奥古多媒体2rQI6}8LPb.n4y 奥古多媒体4Cd9CLIH gB
|
|
|
|
| |
|
角色行走基础:
|
|
|
| |
|
|
|
|
|
-r2PV4ZBI/b本来介绍完地图,顺理成章应该介绍上面的物件才对,但有些东西为了让大家好理解,先提上来说. b!bQ"J4xP
我们这里用的角色控制是经典的键盘控制行走,先简单介绍一下奥古多媒体(A5D_4Zv/Q E
(有游戏基础的可以略过这里) 6ke'Q(]lR.v_n]
我们用以下这两条命令进行方向键捕获: 6V(bf9F
C vt: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*eT#E9GCNL
奥古多媒体X Fh*j,os}LM
hYY5w@k现在角色可以在地图上行走,而不会超出地图.但不能进行网络上的互动 %?7t-D,CW4c-j
要进行网络上的互动就要通过FCS....,我们从登陆开始入手 *z;I,qVC5W0rV
奥古多媒体E
h+K!cM,?#_-b&O Z Xf'YE!K
|
|
|
| |
服务端与客户端的对话 |
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
kj/qT|P!E*m例子中我做了一个登陆平台(lib:LoginP) m,p*Jl}!z'SJ
当某一用户填了名字,选了角色,并按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
aS.@!} 现在把加入人物的 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
奥古多媒体/M K@3V]Rcy奥古多媒体3t3jg2cG;Z"H
g.l&{3aH(A8u3I"y\
|
|
|
| |
|
|
再回到地图的行走
|
| |
|
|
|
|
|
jmr(`4m!SVG g 奥古多媒体O2i;U/X1|PArPC
 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
cQ.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*Vx7Y*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
这些点都是占位点 xRl K7Ps-A
@kD6vyBfA由此可见,我们可以通过增加数组的长度来表示不同Y轴上连续的X坐标点,第二维数组所表示的跨度并不一定相等,也不一定要从0开始,例如: }Q
l)R0j9t
clip_ocu.room2 = [[0, 11], [2, 15], [4, 19], [6, 22]]也是可以的,文件中的房屋就是这样的一个例子.奥古多媒体n^&i)SL[|.r
Gu
奥古多媒体3BOTam!JYq|
a$Wn(Ad:S7`L
奥古多媒体$F6Z8Fc0ww'l可能有人会问,为什么要搞这几个表啊,直接把物件拖到场景不是更好?奥古多媒体8e4c?{5_n+u
其实这样做是为了能够方便修改和扩展,使我们只需对表操作就可以达到目的,同时为数学模型的建立提供良好的数据形式,例如我现在要多加个场景,我只需要调用相应的座位表,再addclips就可以完成操作了,再如,我要建立随机地图,那么可以先随机算出“网络”,再建表。 $c3_!sPb%x'?f
当然如果你只是想把这个应用做完就算了,不打算修改,扩展的话,那么你可以直接把物件拖到场景就ok了。 %U|6D3U
LJ`[f)H;VC
|
|
|
|
|
五、总结
|
|
|
|
|
|
|
这篇文章到这里算是完了,但这个APP还有很多想象的空间,例如可以添加一些花巧的东西,验证,等级,踢人,动作之类的;也可以运用一些数学模型,如cameral,但要注意的是flash本身的功能限制,不要一味加入大量运算而使应用的可用性或可玩性降低,我比较倾向于把一些简单的运算给Flash,把一些复杂的留给数据库来做(如提供智能的数据),或者这时候大家已经想到前面我提到的网络RPG,社区之类的....奥古多媒体.|N%O}2_W
还有的就是在这篇文章没提到的细节,大家可以参考一下我的源文件,如果有时间我也会以教程的方式作一点作补充。
N Pk`h"w J
希望这篇文章对大家有点用,同时预祝大家开发出出色的互动程序。奥古多媒体!of$a6Gj ~
|
|
|
|