| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
一、前言
|
|
|
| |
|
|
|
|
奥古多媒体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 pr2~~w/W
|
|
|
| |
|
 |
|
|
| |
|
|
|
|
| |
|
三、材料准备 |
|
|
|
|
选材:
|
|
|
|
|
|
|
|
|
奥古多媒体6dIj,s x5wz%I S[K 本例子的素材选择很重要,决定我们的程序怎样写。 c2gbBos
y T#zbT0
奥古多媒体e-F(J M r*V一开始,我们先要决定材料的大小,视角,这个对我们的程序有很大的影响,大小比例要一致,这就决定我们需要的是一套完整的图片,视角也要一致(除了角色本身),这就决定我们还必须从这套完整的图片中挑选,因为我们看一个场景时只能看到一个方向,要么全是45,要么全是60度,如果你把一些不同角度的图片摆在一起,除了不协调外,程序上处理层次(层次指:每种物件因为位置不同都会有不同深度,一个物件会遮住另一物件)也会变得无所适从(注意:如果不是用数组地图可能没有的这个问题),只要视角能统一,无论是30度,45度还是n度,处理过程都基本一致,是没有难度的差别,(这里初学者可能会听得一头雾水,可以先往下看,在实践中思考)在这里我选了几张不太好的位图(找很辛苦),奥古多媒体)i!`G%Z&b%G
x0O?rG$K3}d0可以把这些图片归成两类 iq-IO y
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+Y V(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|n nL!~E 奥古多媒体'`:G+M8@G
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vF.E8n8`#U/N$q6D
Z0好了,我们已经准备好材料了,接下来我们开始写程序.奥古多媒体HjBb4~R
奥古多媒体mDU:zfRc 奥古多媒体CtUS$F*v
0g1Mf B9FBmA!@0 奥古多媒体3s4rW2Up1jc!DT!i
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
四、编写程序:
|
| |
|
|
|
|
|
写的程序必须跟素材挂钩,但同时也要有自己的独立性,也就是写的程序必须适应你收集的素材,例如前面说到的视角,具有自己的独立性是指,写完这个应用后,如果要换素材,或者要扩展,程序不需要作出大举动的修改,所以我们写程序的时候要留有一着,说不定一段日子后我们要写一只网络RPG游戏,或者是写一个社区,我们把代码拿出来,可以容易地在远来基础上来改.奥古多媒体 iBD1b6fS+O!P(Q
好,现在来看看素材跟程序对应的关系:
lbY:f(ot0可视对象: 程序: KF&it:O8U0
地图 --------- 数组地图(Map) 5g"hh*KF;Sr3RX5C0
物件(树之类的) --------- 标记(Key) P;fM)y&r0
角色 --------- 互动 m-]lPn
d0
奥古多媒体)SD{t.Jk需要通过FCS交换数据的部分 bW-o-KsB2J@plY0
角色踩点 \DYo&g&d)s0
角色方向动作奥古多媒体SqE[ R.cP5Q/DU
音频奥古多媒体mD7px1np)L
文字奥古多媒体qt-j#Q?e"r o
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]/Ed
现在从库中拖出地图的图片放在场景适当的位置中,我们可以很容易读出视图格子起始(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
(有游戏基础的可以略过这里)奥古多媒体RA2Q3P4F 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,Uhs
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]AID!~;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
ke U O0
奥古多媒体*g m0T;k;H/~2E$Fp+A *`$H;F2nBd7a"eK0
|
|
|
| |
服务端与客户端的对话 |
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
'x#D5as,EJ _6Pt N?l0例子中我做了一个登陆平台(lib:LoginP) .W:MBW!on0
当某一用户填了名字,选了角色,并按LOGIN,我们就可以得到两个变量, p&` \Z'~2| d0
并调用doConnect function奥古多媒体e et9fAr?
$q&pY_+N0 D*w3p`Wl0
 sa;pbH
{0
 q6| uy8EB
o3~[+G)K0
奥古多媒体2]S/sr
z6F3nL
奥古多媒体lH%H!t7M&a1P9v{
 Ax&|~eGhm$]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
奥古多媒体oiv]"T,g这时候当用户发送文字"倒,你很傻",用chat_so.sent("showmsg",_root.chaname,"倒,你很傻")
奥古多媒体7M?#{.L*jD5P-C
就可以各客户端包括自己调用showmsg."倒,你很傻"字样出现在对话框和又边的文字记录框 ?-E~t6e0
奥古多媒体m r3k
]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[NML:J u$y&m+b0
奥古多媒体`m @t/^6eZ我们表示为:奥古多媒体&Z7P0m%VZ'H#O,^ W
clip_ocu.tree = [[0, 4]];奥古多媒体LhX H\Dq\8p
clip_ocu是收集各种类型占位属性的对象 yi Sag({`7j |1S0
|
|
|
| |
|
|
|
|
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
奥古多媒体%f}*E|+?{ 奥古多媒体5C$C8OQZDm
-]0e8MwT0可以看到clip_ocu.tree是一个二维数组,第一维表示Y轴,第二维表示X轴
|