再发一篇,争取明天把9个步骤发完。
4 H0 m- j6 }- ]0 Q0 \4 ?9 @ 8 e( o; W1 e' i% d' J6 \! m
这一章将完成场景的粗略设计,在SceneEdit打开MyScene.scene。
3 h( I& h5 O8 q6 ?/ G ; v: b- \# G# k; L* H* v2 F4 H
[自由实体], R: P+ m( C, L' q$ j
, y( I4 U' W& j7 e$ R7 l P现在场景中的椅子仍然看起来像是画在地板上一样。之前我们使用创建desk实体和behind_desk区域这种方法实现了桌子的遮挡效果。这种方法是非常灵活的,对于大型物体和无规则形状的物体尤其有用。但对于小一点的东西我们可以使用更简单的方法:将它们创建为自由实体(free entities,希望有人提供更好的翻译- -)。接下来以椅子为例。4 s. D- P/ D3 W; t7 W* \9 W7 r
" J0 w- R) \7 l5 N- c
什么是自由实体?之前我们所使用的常规实体:比如背景和桌子,它们在绘制时是按照场景布局(即node列表中的顺序)来绘制的。而自由实体和角色一样,绘制顺序是由它们所处的位置决定的(换句话说,由它们处于哪个区域里决定。这样看来场景中的npc就应该作为自由实体)。接下来具体讲解。9 C$ {# B5 T4 M9 R, [7 y! |
6 g) G% V2 Z6 [3 I' B. ]首先,在ProjectMan中为Myscene文件夹导入椅子的图片,在“data\tutorial\gfx”选择chair.bmp并导入。
; j9 M2 w- E* V
7 c; F( i/ V: S' ]& L7 P
$ f6 r5 v/ u/ g5 @8 s5 ~" S返回SceneEdit。在layer列表中选择Free entities项,下面node列表会显示当前所有的自由实体,现在还是空的。点击Add entity并选择Add sprite entity。一个“new entity”就创建好了。将名称改为chair,标题也可以改为chair。
; q) t& k3 T7 V7 U" [, R; S" H( g$ ]3 n, Q! S1 j( l1 j
$ C! l: A8 |% Z& {0 _' e$ i! \. f: L![]()
p& @# ~+ Y3 ?8 ~) ?8 Z+ W
1 @# a) x& G, n+ K% o接下来为实体指定图像。点击sprite栏后面的“...”按钮选择之前导入的chair.bmp。将实体chair移动到场景中的位置:
* a+ `8 x# H, t9 f+ i; ]! b, |) }5 d) m: S: h3 D3 ~; J T
7 Q! {8 I, N0 l2 x- ^; t) T/ T
* i% \7 q9 j: O' ]
![]()
8 f; _ z- Q' J
h4 t6 E+ u) h) X8 X保存并测试一下。你会发现角色总是在椅子之上,原因是当一个区域内存在多个对象时(例如floor区域内存在角色和椅子两个对象),引擎按它们的纵坐标(即Y轴坐标)决定绘制顺序。角色的坐标已经被设定为由她的脚所站的位置决定了,但是椅子的坐标默认由图片左上角坐标决定(这样当角色与椅子重合时角色纵坐标总在椅子之下,引擎就总是先绘制椅子,再绘制角色了)。我们要做的就是让椅子的坐标也由椅子脚决定,方法是使用一个sprite而不是简单的BMP图像作为chair实体的图象。sprite在wme可以被视为包含了更多信息的图象,其中一项附加的信息就是焦点(hot spot),焦点可以指定sprite的基准点,实体所处的坐标由基准点决定。我们要做的就是将热点设在椅子脚上。
5 J( r' G7 N5 d2 Z( N
% [* k6 u6 K! v首先,为chair实体创建一个sprite。返回PM,右键点击Myscene文件夹并选择“Add->Add sprite…”命令。在弹出的模版选择窗口中,选择Empty sprite模版,并将名称改为chair。
% I1 d0 b2 K: z, W& @- R
* D, ~5 \/ }9 y" d# u2 n3 d$ f6 I/ _+ r& `$ ^ o( z
- l& x# H' V7 }7 P![]()
4 A, U9 U6 z1 L9 |+ g # T) K7 W" ~+ x) ?9 X _0 W' m
在MyScene文件夹中一个名为chair.sprite的新sprite创建好了。双击chair.sprite后PM会自动调用SpriteEdit工具帮助你编辑。现在这个sprite是空的,我们首先要添加一个帧(frame)来放椅子的图片(添加多个帧并设定一些信息后就是动画了)。点击Add frame(s)按钮并选择chair.bmp文件/ v; ^4 @, ~& A4 D
% F7 I; p3 j( S- P; {! S( M$ s& y& J: i4 O4 {) Z
~6 z+ V0 h( f+ I ! H( v' C- ]* D5 x: {+ _ r1 U
, M* U% n( [# Y3 F0 b5 l9 |! g
接下来需要改变焦点的位置。有两种方法:一是在右边的预览窗口里拖拽图片使焦点(就是那个红色十字)移动到椅子脚的位置,二是在左下角的信息栏中找到hot spot一栏填写坐标135,174。
2 D1 J6 K& y: p4 j) e& w; W
, F; s% O6 y1 A![]()
3 v0 E! a( B- V, B. q8 {![]()
, R0 @# {/ R" A
5 v# m0 ~0 ^% F: m7 }! C1 }
4 y/ l6 E" c4 L/ ]
3 K) t2 V7 W5 T% P8 Z) B4 p保存并返回SceneEdit。选择chair并更改chair的图象为新创建的chair.sprite文件。你会发现椅子的图象移动了,这是因为我们改变了图像的基准点,移动图像到正确位置。保存并测试游戏。
0 B+ D; ]! Y& Y4 b9 M4 z* M $ p+ C6 T; Q2 M( r0 X0 j% v N
效果应该如图所示。
4 a+ z# z% ~: [* s1 i% @ K' d. c5 t G& _/ `( X% M/ [( z
5 w( c+ x0 A2 |6 o' o! b
2 `9 h; t6 a/ R![]() ![]()
4 p9 E3 o9 r! t 7 h0 N1 D4 U/ d: ^( O' s2 ~
最后要做的就在椅子下增添一块障碍区域防止角色横穿,还有设几个路径点。/ g! T0 ?1 B* c" ]4 ^
: e3 E2 D' V! r& f& |
方法见步骤4和5,最后效果如下图:
7 @& v) _5 i; T. L. l
# ~( L$ u8 y1 p9 v3 K& O$ O
$ g1 _& f* E" a8 ~4 Q
! o3 d4 I5 M( G! ^ 0 _' n9 O, D$ F3 e$ U3 Z" u
; ~. S, R8 ` M
6 r3 k0 M& u- W3 p- N关于自由实体的部分结束了。
: u$ f8 O! r4 x" Q
, F8 b7 O, ^2 K ! a& F* Y3 e& O8 B- w- c
[比例线]
) y0 x" v+ t- Q* L9 _; k ) U/ \6 b4 |3 U1 O/ b
现在场景看起来貌似差不多了,但角色好像有点太小了,我们通过可以比例线(scale levels)改变角色的缩放效果。比例线在Scene中表示为一条绿线,在最左端标注了比例,例如现在场景里有两条比例线,中间一条70%,底下一条100%,这样角色从底部到中间行走过程中,比例逐渐由100%缩小至70%(在70%线之上时会默认恢复为100%大小),这样就实现了近大远小和不同场景人物比例不同。4 e8 P9 P5 q b
1 o" ]$ j2 h: p f1 R% N/ m
比例线最左端还有一个很扁的小方框,按住小方框并拖动就可以改变比例线的位置,右键点击小方框可以修改属性(properties,可以改变缩放比例和指定位置),或删除(remove)比例线。
F; }: F$ q. Z8 T( Y. k) l( Z2 p; C0 {, x9 j
% ` R( v% m7 e# `1 b
- C+ i+ s8 {0 t% P3 Z7 f 3 _( }; m V- I8 _, S- E* V
- x2 m/ Z) v$ I2 W
点击下图中的按钮可以添加比例线。(帮助文档使用的是老版本,新版本中者按钮旁边还有个按钮,可以添加纵向的比例线)2 u$ a. |. k. y7 J
3 D' d4 f# r9 h
3 H. `! W3 g: G( g7 w![]()
9 o8 C2 M* L# t. C + {& |% c$ G: M8 z3 I: J9 Q
之后把上方的比例线移至地板上端并将比例改为90%,下方的比例线则移至地板最下端并改为160%。* E0 [$ v/ Q# m& `
9 w; L$ \0 U: ]( W" i
* \* j& m2 M0 L5 y" U3 b( w3 C
4 m3 [$ d0 d* @: J' R你可能想知道如何设置到正确的比例,最好的方法是使用角色模型(actor placement tool),SceneEdit提供角色模型方便你编辑而不必频繁测试,如下图点击Place actor按钮。( s& H4 U5 r3 q" e6 c0 O, d0 j
- F: L2 s/ ?* Z) J2 a% K& t
) b" Q( ^0 q0 E& Q7 ?* @$ F( ~7 U' a0 F
![]()
7 z6 Y: j* W$ D: i n, K+ M
6 }0 F# a; Y9 j这时会弹出一个窗口让你选择使用哪个角色。在“data\actors\molly” 文件夹中找到molly.actor并载入。这时候你的鼠标就变成了一个角色模型,你可以移动鼠标到任何位置看看效果,这时点击右键角色会改变方向,点击左键会暂时将角色模型放下,以后再需要用时点击Place actor按钮就可以。
& R% B0 H/ G3 o4 }' } 7 |# f S" @3 {
[修饰区域]
7 ~' J" c* X! l0 V+ u, T+ }
2 n! s$ w/ |% d- L接下来我们可以添加一些小效果,比如当角色站在远处的小角落时让角色变暗一点。2 @( D: A& L& [, ~' M
8 ]& b8 U, d7 P, m我们可以添加一些特殊的区域来影响角色的颜色和缩放,这些区域被称为修饰区域(decoration regions)。8 G$ E& K/ W/ Q" U7 u
, E, P9 i* O ^& t. N在layer列表中选择main,并点击下图的按钮添加一个区域。0 C$ V$ M# y$ k# A9 \+ r. N
4 v" M& x# W4 y* ~, A2 [4 o- E3 C# P T( t/ Y! U- X
' }8 W8 `( s& `
( K/ _$ N0 N* W _/ x, g
2 m$ G" }4 G; b Y* Q9 h Y" M
将名称改为"shade",并将类型由layout改为Decoration。注意信息栏中的Clolor项,选择一种颜色后,在这个区域内的角色绘制时就会混合这种颜色。为了达到阴影的效果,我们指定为浅灰色。6 D( d( {2 I( V2 `0 j d" r
% [- L. Z; h2 ^& V
: V3 h1 Q) t4 V# S![]()
) j, ?2 T5 l3 z. X! H
$ H+ T2 @4 K) `改变scale项的话角色在区域内的话就会使用这个比例而不是比例线的,选0则不影响。7 ^0 H, ~' t- L3 o/ _
- T0 R% w' n* a$ V0 y7 q4 o! k- b注意,设定颜色后必须满足以下两个条件才能实现:' L3 {7 b6 j4 L) ~; _
1、游戏必须运行在加速模式中,兼容模式下无效: b3 B$ C0 r7 e+ e
2、对象必须将Colorable属性设为真
/ J3 l3 u5 I* Y+ f / U a) n4 v5 U$ U8 L& X
最后将区域移动到合适的位置并调整形状:
9 f x7 n. k" Y1 O& i. c P
( `: K3 K Q9 P$ y+ r# F( ^" P$ s & Z, ~5 @: f2 ?9 b
$ D8 g. l. d: h7 B
6 }7 _2 r8 f1 J! n. j% M
注意:修饰区域影响角色角色的绘制,所以必须将修饰区域设在node列表的末尾。7 k. s# k7 H' m7 m8 q
1 H2 a u1 l; c" q& G
你可以回PM测试一下或使用角色模型看看效果。9 R" a% e; ~; E+ q v6 x- ^* D
! p. o4 U9 E& @' U这一章结束了~ |