再发一篇,争取明天把9个步骤发完。
- _! l) @+ R& W 8 b& D" {" ]8 @; }: V
这一章将完成场景的粗略设计,在SceneEdit打开MyScene.scene。
# @; K1 u5 c! S$ \& m s
* j0 X. H4 k+ M[自由实体]
* V$ j/ E) m& u7 } - B3 t* r$ P3 u
现在场景中的椅子仍然看起来像是画在地板上一样。之前我们使用创建desk实体和behind_desk区域这种方法实现了桌子的遮挡效果。这种方法是非常灵活的,对于大型物体和无规则形状的物体尤其有用。但对于小一点的东西我们可以使用更简单的方法:将它们创建为自由实体(free entities,希望有人提供更好的翻译- -)。接下来以椅子为例。
+ _6 _% {! ?% Q3 N5 \' T
2 a; X7 G1 Z! W# Y5 n: o5 a' S8 J; e什么是自由实体?之前我们所使用的常规实体:比如背景和桌子,它们在绘制时是按照场景布局(即node列表中的顺序)来绘制的。而自由实体和角色一样,绘制顺序是由它们所处的位置决定的(换句话说,由它们处于哪个区域里决定。这样看来场景中的npc就应该作为自由实体)。接下来具体讲解。" g$ l* { z" o& N$ J2 m
2 ^" i; t% o" n# ~5 z: d* ]
首先,在ProjectMan中为Myscene文件夹导入椅子的图片,在“data\tutorial\gfx”选择chair.bmp并导入。
- E' B% D0 a" L% K8 G, u! B
+ n& g+ e/ }+ N5 d% s( K8 t6 }: Y5 F8 x/ ~8 [+ |
返回SceneEdit。在layer列表中选择Free entities项,下面node列表会显示当前所有的自由实体,现在还是空的。点击Add entity并选择Add sprite entity。一个“new entity”就创建好了。将名称改为chair,标题也可以改为chair。 ' o+ \% o2 C1 Y6 G p5 g/ S
0 l7 e; }' z& \ f9 d6 O
3 p" N4 {9 k, X t& @2 _
, g" u# b# ]1 ^* M" X& [) Y2 Z; ? 6 V6 T7 p X5 O
接下来为实体指定图像。点击sprite栏后面的“...”按钮选择之前导入的chair.bmp。将实体chair移动到场景中的位置:# E4 ` o3 c" \2 d. F4 ^
8 X$ [4 O1 U/ A; H* N0 M
8 P, D X3 a' z1 i. ?$ s$ W7 W. F+ T; s5 z
g3 e1 o9 A( z: \0 Y
4 ~# W7 I+ `: r0 O- l. S保存并测试一下。你会发现角色总是在椅子之上,原因是当一个区域内存在多个对象时(例如floor区域内存在角色和椅子两个对象),引擎按它们的纵坐标(即Y轴坐标)决定绘制顺序。角色的坐标已经被设定为由她的脚所站的位置决定了,但是椅子的坐标默认由图片左上角坐标决定(这样当角色与椅子重合时角色纵坐标总在椅子之下,引擎就总是先绘制椅子,再绘制角色了)。我们要做的就是让椅子的坐标也由椅子脚决定,方法是使用一个sprite而不是简单的BMP图像作为chair实体的图象。sprite在wme可以被视为包含了更多信息的图象,其中一项附加的信息就是焦点(hot spot),焦点可以指定sprite的基准点,实体所处的坐标由基准点决定。我们要做的就是将热点设在椅子脚上。
! C4 z% ^! c, [8 y& S% x$ F
: `! I l& w3 J1 W首先,为chair实体创建一个sprite。返回PM,右键点击Myscene文件夹并选择“Add->Add sprite…”命令。在弹出的模版选择窗口中,选择Empty sprite模版,并将名称改为chair。 $ I6 ?% _+ I Q
6 L! e: W+ H _6 b8 q1 J7 f6 X% @* a3 w$ `8 z
! U% t) S/ ] c8 X9 ^6 E; ~* J) k p6 |9 \. N3 H$ Y! S% }( G% h
! L Q+ F# U2 y
在MyScene文件夹中一个名为chair.sprite的新sprite创建好了。双击chair.sprite后PM会自动调用SpriteEdit工具帮助你编辑。现在这个sprite是空的,我们首先要添加一个帧(frame)来放椅子的图片(添加多个帧并设定一些信息后就是动画了)。点击Add frame(s)按钮并选择chair.bmp文件9 t D% O$ B2 {. O- V8 Y
# `/ B0 S: }: m m( K0 I' O! U/ t" F7 z
5 j, y, J) A: I) F7 ?$ j1 ^& L2 _" y1 J+ c6 ~' W: O4 V
) c6 Y1 {( L0 R, `5 E接下来需要改变焦点的位置。有两种方法:一是在右边的预览窗口里拖拽图片使焦点(就是那个红色十字)移动到椅子脚的位置,二是在左下角的信息栏中找到hot spot一栏填写坐标135,174。
8 i# d/ l+ l& d. G( I( u% Q4 E
: V, ]5 T# g$ K" @2 y( C8 A4 z5 |9 L5 P9 p3 \, g) _
0 P3 y" Z1 j; u, `$ ?, b" L
3 q3 u, E' y: S4 n1 O% H8 \7 F( B( [& c) @/ s6 Y/ R3 d
+ a5 K+ R4 \: p: v保存并返回SceneEdit。选择chair并更改chair的图象为新创建的chair.sprite文件。你会发现椅子的图象移动了,这是因为我们改变了图像的基准点,移动图像到正确位置。保存并测试游戏。
1 w2 f% u6 ?2 U b9 ~- @' x$ `8 ?
0 h2 ]/ N" `$ H1 z# X效果应该如图所示。6 O9 }' `# T7 R Y6 v# ~) F8 z
+ r" T0 m6 C% o1 s( E
2 @( F2 {8 D' @; l- O
; k) D6 a4 n4 u3 }1 Q8 b
. E2 ]9 o0 T9 [% V
( H; C8 W! y X$ ]% k
最后要做的就在椅子下增添一块障碍区域防止角色横穿,还有设几个路径点。
* S/ ?6 t* f8 D$ k" J, L: B3 d
- ~) E1 [) {: a* |' `- d5 ?, V方法见步骤4和5,最后效果如下图:) ^; W- N w( F
0 Z0 C/ q8 ^! p0 u
2 z/ ]$ |: y. G3 A+ [& l2 i+ v, M
: I: V& }3 N6 l! V
. [( ^' o! s( v5 I. @/ Z- q: M8 k/ q% C
1 u, t7 w# u5 f$ f- L, Z$ l0 D9 P关于自由实体的部分结束了。
+ v8 ?8 A, k; w! p
, Z; n0 G" x+ h6 t* \# S
% @. z: f( e* _7 ~9 Z1 }; }[比例线]
$ n: R- N& M4 m : T8 I$ j# h+ @' h8 I+ K
现在场景看起来貌似差不多了,但角色好像有点太小了,我们通过可以比例线(scale levels)改变角色的缩放效果。比例线在Scene中表示为一条绿线,在最左端标注了比例,例如现在场景里有两条比例线,中间一条70%,底下一条100%,这样角色从底部到中间行走过程中,比例逐渐由100%缩小至70%(在70%线之上时会默认恢复为100%大小),这样就实现了近大远小和不同场景人物比例不同。% f5 }. f$ h- r2 V, K
( r: {1 a9 w9 c( N
比例线最左端还有一个很扁的小方框,按住小方框并拖动就可以改变比例线的位置,右键点击小方框可以修改属性(properties,可以改变缩放比例和指定位置),或删除(remove)比例线。# {9 |* a% \( R- l! p3 A4 o
2 |( \2 h: a K" y) H0 Y- F) K" q8 F0 V4 P
5 x4 n0 v% I% a0 d- u
' L( ]* c- x: U' L & U0 g9 `1 i7 v; I5 v
点击下图中的按钮可以添加比例线。(帮助文档使用的是老版本,新版本中者按钮旁边还有个按钮,可以添加纵向的比例线)
/ D) g. a7 s9 j! f+ T$ {" k- i# c7 v4 f3 {
. D/ N, S6 i$ b; V% w
2 g4 ]9 i$ Y. z4 q2 J5 h
6 g) X* Y. C. h之后把上方的比例线移至地板上端并将比例改为90%,下方的比例线则移至地板最下端并改为160%。
2 G* p9 Z$ f) g( C 0 W1 E) o2 U/ b' V# w+ X2 i: ]/ w
2 V: c9 a# s( g2 L9 f6 ~
* H0 q) C* i: K4 z( v你可能想知道如何设置到正确的比例,最好的方法是使用角色模型(actor placement tool),SceneEdit提供角色模型方便你编辑而不必频繁测试,如下图点击Place actor按钮。 C- T, a3 S: z1 D0 t
- S4 N8 }9 O; L6 f! ?1 B/ s
; ?# k% [ X4 s0 Z; @, i
* w# X! m$ p9 d2 E. m1 X9 o' U: C: r: T. Z+ T& o! o# [
" a1 E% y- ?$ U" V) I+ T
这时会弹出一个窗口让你选择使用哪个角色。在“data\actors\molly” 文件夹中找到molly.actor并载入。这时候你的鼠标就变成了一个角色模型,你可以移动鼠标到任何位置看看效果,这时点击右键角色会改变方向,点击左键会暂时将角色模型放下,以后再需要用时点击Place actor按钮就可以。# m+ M6 m1 i" ^7 G; y. Q' D2 V
; b( U9 A" b4 v& n: u8 U! Y1 g5 ` [修饰区域]* k* `6 V* o* q& Y1 ?" c( Y* `
& i+ e* p( m, t9 k- `- }接下来我们可以添加一些小效果,比如当角色站在远处的小角落时让角色变暗一点。% [& K# q6 Q [% g7 ^
3 f4 N( z/ v- e# j+ I) q
我们可以添加一些特殊的区域来影响角色的颜色和缩放,这些区域被称为修饰区域(decoration regions)。
# O0 Q5 |9 U- c9 T C / r! U5 u$ @9 `1 a! }
在layer列表中选择main,并点击下图的按钮添加一个区域。
( N5 Q7 S. q! e) o5 c1 [/ a$ E& m2 q0 n6 Q
u! v& y' [" `5 I
& W$ [: }8 O% L1 Y% D
. F( E% ?2 f3 I6 ^" i# L 9 f& L+ S# P8 E; j- \6 q! w# V( [
将名称改为"shade",并将类型由layout改为Decoration。注意信息栏中的Clolor项,选择一种颜色后,在这个区域内的角色绘制时就会混合这种颜色。为了达到阴影的效果,我们指定为浅灰色。
# h3 k5 B1 @2 E4 s; W/ D$ W6 D5 f6 a
4 e9 B0 T4 {! O
6 R9 p, |/ A, T$ ]0 q! Y; u$ [
* |( }* o& p5 f- ~# C* P' X1 E改变scale项的话角色在区域内的话就会使用这个比例而不是比例线的,选0则不影响。
5 R' @, M8 R: @
4 [0 i+ F- T! A8 a i注意,设定颜色后必须满足以下两个条件才能实现:
, D/ ]; A1 U, H4 S K' F; U0 C7 ?1、游戏必须运行在加速模式中,兼容模式下无效 K" z2 K- ^" l b b3 C
2、对象必须将Colorable属性设为真, v2 {9 v3 s8 D* n1 e7 k* E
3 o- u* K0 e( f最后将区域移动到合适的位置并调整形状:
6 ^( L5 i4 y' ?2 V' E3 b! F: b% S, c; G) s* y* C
/ K y1 Q, {( q% @
8 Q" J9 k6 e; C3 o R) a( C+ c+ }1 D$ y% q" _" Z
注意:修饰区域影响角色角色的绘制,所以必须将修饰区域设在node列表的末尾。" b- s. e- ~3 a3 n& u3 F
$ _( S, {, ^3 q* a7 G' A/ ], p
你可以回PM测试一下或使用角色模型看看效果。
C5 q# `# V6 i- U! E6 K & ]5 d# c. |7 Q+ G3 H6 Q' c
这一章结束了~ |