|
wintermute学习笔记[7]--搭建场景步骤六:自由实体、比例线、修饰区域
再发一篇,争取明天把9个步骤发完。
. j1 O" H* x: t' W
, R# k r) ]& t' r7 }这一章将完成场景的粗略设计,在SceneEdit打开MyScene.scene。
- {8 i8 a2 S3 B! h 4 K* ^+ _, K/ P" a' Z
[自由实体]- k' ^( w' l9 v! p, i: M, w; L
9 `3 u9 V0 c& X+ J+ v" f# n现在场景中的椅子仍然看起来像是画在地板上一样。之前我们使用创建desk实体和behind_desk区域这种方法实现了桌子的遮挡效果。这种方法是非常灵活的,对于大型物体和无规则形状的物体尤其有用。但对于小一点的东西我们可以使用更简单的方法:将它们创建为自由实体(free entities,希望有人提供更好的翻译- -)。接下来以椅子为例。6 N: Y/ F# {/ T" c1 s, P9 ~
8 T6 H/ x4 W2 m: O
什么是自由实体?之前我们所使用的常规实体:比如背景和桌子,它们在绘制时是按照场景布局(即node列表中的顺序)来绘制的。而自由实体和角色一样,绘制顺序是由它们所处的位置决定的(换句话说,由它们处于哪个区域里决定。这样看来场景中的npc就应该作为自由实体)。接下来具体讲解。
3 Q- r" Y: E9 L2 [1 A
' D6 w4 i0 i. C# r首先,在ProjectMan中为Myscene文件夹导入椅子的图片,在“data\tutorial\gfx”选择chair.bmp并导入。
0 m8 `. e& A e9 F& z/ e+ i
1 \- _- j" D; q0 h# s! ]
/ Y) m2 R0 x- B. I+ W' ?0 o' ?! L返回SceneEdit。在layer列表中选择Free entities项,下面node列表会显示当前所有的自由实体,现在还是空的。点击Add entity并选择Add sprite entity。一个“new entity”就创建好了。将名称改为chair,标题也可以改为chair。
# {1 Y8 `# E" H9 S! Q/ f; c N! Q7 M. J+ ]9 G. F. E
2 G- c" a1 B7 q! h( ?
& |4 C, t. J$ u7 j
9 v0 A: k5 c7 P9 J& L7 i接下来为实体指定图像。点击sprite栏后面的“...”按钮选择之前导入的chair.bmp。将实体chair移动到场景中的位置:
, A9 w9 j- v# H3 D; z
# ]# T6 @; t9 D
( l7 {2 P' G9 ~. z* b7 h, r$ u- I7 l. s) Y0 n
* j$ I4 P- f& x$ G9 V) L
% U7 J$ m7 H8 h9 V
保存并测试一下。你会发现角色总是在椅子之上,原因是当一个区域内存在多个对象时(例如floor区域内存在角色和椅子两个对象),引擎按它们的纵坐标(即Y轴坐标)决定绘制顺序。角色的坐标已经被设定为由她的脚所站的位置决定了,但是椅子的坐标默认由图片左上角坐标决定(这样当角色与椅子重合时角色纵坐标总在椅子之下,引擎就总是先绘制椅子,再绘制角色了)。我们要做的就是让椅子的坐标也由椅子脚决定,方法是使用一个sprite而不是简单的BMP图像作为chair实体的图象。sprite在wme可以被视为包含了更多信息的图象,其中一项附加的信息就是焦点(hot spot),焦点可以指定sprite的基准点,实体所处的坐标由基准点决定。我们要做的就是将热点设在椅子脚上。
# \6 g0 |7 g6 \8 J 8 R& f Z u) R
首先,为chair实体创建一个sprite。返回PM,右键点击Myscene文件夹并选择“Add->Add sprite…”命令。在弹出的模版选择窗口中,选择Empty sprite模版,并将名称改为chair。
/ s8 N8 T# ^* d% `0 X
U" ~# S5 g/ _. I5 w0 y9 n
2 O$ ^; R; }8 b4 V" Z( h9 W$ G
0 o( [ ^& R3 q
* Q% L8 `3 Y2 m在MyScene文件夹中一个名为chair.sprite的新sprite创建好了。双击chair.sprite后PM会自动调用SpriteEdit工具帮助你编辑。现在这个sprite是空的,我们首先要添加一个帧(frame)来放椅子的图片(添加多个帧并设定一些信息后就是动画了)。点击Add frame(s)按钮并选择chair.bmp文件
9 V0 F1 e' M9 A/ T' g
3 k0 a$ Y9 _ b. h& L; r1 `5 B3 c5 G- b% j1 A
: W$ }2 O- U7 }( H
' H- S* f( q$ I, C
6 @, q L# E# E7 }; E9 Q; H9 v9 c接下来需要改变焦点的位置。有两种方法:一是在右边的预览窗口里拖拽图片使焦点(就是那个红色十字)移动到椅子脚的位置,二是在左下角的信息栏中找到hot spot一栏填写坐标135,174。& x8 k; o' _6 l M. l
' y, y4 h, r! d, F4 J$ l# F: C) U5 |" M; e+ ?$ s/ _. \* V
8 u' `) }; [2 M6 X
, i2 |6 k8 b. C
4 J: m" y7 J( \1 j5 w# e7 y; S 7 A& q# z9 `. V% n
保存并返回SceneEdit。选择chair并更改chair的图象为新创建的chair.sprite文件。你会发现椅子的图象移动了,这是因为我们改变了图像的基准点,移动图像到正确位置。保存并测试游戏。: c3 {/ V6 i6 L9 `
% q/ r7 a9 U; ^! O8 \) J
效果应该如图所示。; s2 X3 L' |% ^
; n* Q$ D4 x# ^% q+ H/ Y
. d/ z* p! q% K. E
& g& {& b, @4 |. |) b8 s" N; K$ K. }
- ]7 O. ?3 E! X0 H1 j2 X' A
最后要做的就在椅子下增添一块障碍区域防止角色横穿,还有设几个路径点。' z2 L2 X6 e4 f b( r1 O
0 N, W' o3 P5 ]' K
方法见步骤4和5,最后效果如下图:5 |1 T7 j/ |5 H3 h
4 L& | V3 b, h0 v& d) y; I6 V3 d3 b
9 b, y8 h! s0 m* x% x, T0 B
0 l3 i2 X2 u1 W" \: N0 T+ h( o. n% B
! ?+ e3 v$ V+ y" [% g. ?9 ~关于自由实体的部分结束了。. G. }6 c" }" h! B8 W3 H
) c6 t/ L( l( y* f6 P$ T 6 C5 \. [- M9 y# K5 H( ^
[比例线]
7 M- P( S+ @+ w$ X" E7 j2 k 3 Z8 D" y7 ], R. N
现在场景看起来貌似差不多了,但角色好像有点太小了,我们通过可以比例线(scale levels)改变角色的缩放效果。比例线在Scene中表示为一条绿线,在最左端标注了比例,例如现在场景里有两条比例线,中间一条70%,底下一条100%,这样角色从底部到中间行走过程中,比例逐渐由100%缩小至70%(在70%线之上时会默认恢复为100%大小),这样就实现了近大远小和不同场景人物比例不同。
% B9 v: d) p5 E- r
; j; R) N" [$ j2 j# L比例线最左端还有一个很扁的小方框,按住小方框并拖动就可以改变比例线的位置,右键点击小方框可以修改属性(properties,可以改变缩放比例和指定位置),或删除(remove)比例线。
1 Z P; U, h6 U1 o) V
: H% R$ z+ j0 m( O
( P$ ^% }# ~" Y. c: v5 r1 d1 K7 A1 j; h3 \0 Y
R. Q2 F3 k( X6 ?
# v# v9 J2 Y* S, I# G7 L) E
点击下图中的按钮可以添加比例线。(帮助文档使用的是老版本,新版本中者按钮旁边还有个按钮,可以添加纵向的比例线)
; ~8 f& D& l& C( G8 c5 l
2 F( f8 L$ t2 S1 c' j) W& [, n. Z/ u- C8 L* c! e
) K7 Y; i5 r( R5 q9 z2 N
; s7 X8 F/ s1 ~ b, m ^5 |之后把上方的比例线移至地板上端并将比例改为90%,下方的比例线则移至地板最下端并改为160%。
7 @0 O% o7 ^ x `2 S 5 x; [0 r2 E1 j/ ?
$ `! c) |% r; J) Z2 b* E7 Q5 I
- Y8 ]% |) D6 E4 [ F你可能想知道如何设置到正确的比例,最好的方法是使用角色模型(actor placement tool),SceneEdit提供角色模型方便你编辑而不必频繁测试,如下图点击Place actor按钮。
& L+ ~( H, A, L- _* v% x
8 w) x6 l; [7 D+ [3 k' O3 o& M: @* c9 n& q2 s+ J8 E x
8 M* ~) [9 `( g2 a4 d1 x0 r, G/ ^
0 Y6 W# k$ I% P6 | 7 h9 T# Y- ?2 @# i
这时会弹出一个窗口让你选择使用哪个角色。在“data\actors\molly” 文件夹中找到molly.actor并载入。这时候你的鼠标就变成了一个角色模型,你可以移动鼠标到任何位置看看效果,这时点击右键角色会改变方向,点击左键会暂时将角色模型放下,以后再需要用时点击Place actor按钮就可以。
2 N% N$ J) J4 C! g' n7 [
! e$ ]; w( Y+ ^' v4 M* t) G [修饰区域]% c& K9 d- w, B$ g/ r
: x K7 H5 O! k/ L. a+ I3 ?接下来我们可以添加一些小效果,比如当角色站在远处的小角落时让角色变暗一点。: B4 O; |" m) u2 l
8 Z$ ~7 K4 k$ D! ]+ S3 W* V我们可以添加一些特殊的区域来影响角色的颜色和缩放,这些区域被称为修饰区域(decoration regions)。2 u9 Y! p0 d5 j- [& U# w$ M# R
0 N# r) l! Y" v! K1 Z1 I2 c在layer列表中选择main,并点击下图的按钮添加一个区域。
, _. ?; _3 M; y. o" ]& a& G
1 @9 n9 x( r$ L+ L8 }; B% ]( d4 V; k, d
# z% p. z% v9 k* U
0 {* F2 z' q7 L/ N/ K( Q" H) ]
( d3 }3 q5 n* m" O4 x- P6 x# o4 H将名称改为"shade",并将类型由layout改为Decoration。注意信息栏中的Clolor项,选择一种颜色后,在这个区域内的角色绘制时就会混合这种颜色。为了达到阴影的效果,我们指定为浅灰色。
8 D9 e, D# k. p7 f5 i9 u6 C% C
( U6 f5 o# |, E% |: \' V; K6 p& y+ P9 S2 g, e
- {8 Y3 @9 c* l% g! Q0 x9 D$ y ' Z7 B9 e7 ]# z3 x% m0 U# a7 H& M
改变scale项的话角色在区域内的话就会使用这个比例而不是比例线的,选0则不影响。% }; f! t% j8 b1 ?/ M: R
& N J6 F3 e1 @. U6 ~2 i注意,设定颜色后必须满足以下两个条件才能实现:
0 J! b) I; p3 G/ j1 p7 }1、游戏必须运行在加速模式中,兼容模式下无效
* a: W$ A# B0 l* M+ M2、对象必须将Colorable属性设为真3 a/ h8 h: q6 _1 A) \
4 P4 g. {1 q7 v1 ?* A0 d3 c
最后将区域移动到合适的位置并调整形状:% O2 z5 ]8 o: M" g7 O
$ ] j& K& u; T( M' u# C
1 H0 L/ Y' v) e$ J4 R: U % \/ ?' X3 @$ V2 w# B4 V0 P: z
7 _6 H0 s' Z; a8 @' Z5 B
注意:修饰区域影响角色角色的绘制,所以必须将修饰区域设在node列表的末尾。
+ V @, A# M7 F. N ( e# C# v3 a; h
你可以回PM测试一下或使用角色模型看看效果。+ R. I) N- W$ X8 \5 E$ s. Z
' w, B5 e/ y8 W) P% V6 e5 }% c这一章结束了~ |
|