再发一篇,争取明天把9个步骤发完。
* U) T5 H$ `- ?0 ~% n& e
$ _9 m. r+ V1 `这一章将完成场景的粗略设计,在SceneEdit打开MyScene.scene。% X/ h' _) K5 M6 E& j
% r: N B5 @3 E" ?8 Y
[自由实体]
) Q( G* G% J% f5 R* v
) {) n0 F2 d3 @. O9 t现在场景中的椅子仍然看起来像是画在地板上一样。之前我们使用创建desk实体和behind_desk区域这种方法实现了桌子的遮挡效果。这种方法是非常灵活的,对于大型物体和无规则形状的物体尤其有用。但对于小一点的东西我们可以使用更简单的方法:将它们创建为自由实体(free entities,希望有人提供更好的翻译- -)。接下来以椅子为例。' z* t! |3 }4 y5 \- ?) R& y; h
6 w9 E! l) Z; V! e
什么是自由实体?之前我们所使用的常规实体:比如背景和桌子,它们在绘制时是按照场景布局(即node列表中的顺序)来绘制的。而自由实体和角色一样,绘制顺序是由它们所处的位置决定的(换句话说,由它们处于哪个区域里决定。这样看来场景中的npc就应该作为自由实体)。接下来具体讲解。* c% e _! [' p7 S5 R5 t
! `- O- t/ |, ~6 e' @
首先,在ProjectMan中为Myscene文件夹导入椅子的图片,在“data\tutorial\gfx”选择chair.bmp并导入。
8 P7 X4 x x+ I" y A! Z0 s; `6 C " O" m) H% s& v" o5 b
# o5 m. z& R l% ?+ D返回SceneEdit。在layer列表中选择Free entities项,下面node列表会显示当前所有的自由实体,现在还是空的。点击Add entity并选择Add sprite entity。一个“new entity”就创建好了。将名称改为chair,标题也可以改为chair。 Y. C* Y; q8 L9 F1 ~1 O3 J$ S. Q0 U2 [
8 _, C1 |) d' H) v3 I( M% O
, s8 I6 p& x& V9 Z" j: |8 k4 {
![]()
. d. A8 W. Q1 `- t4 G
, H( s7 F6 S0 Z& C: ]1 G接下来为实体指定图像。点击sprite栏后面的“...”按钮选择之前导入的chair.bmp。将实体chair移动到场景中的位置:
& S0 ? @- |8 o1 c
) \* z2 H7 Z2 L* Z3 r& [3 Q- ~9 x; v: p0 p% @( q: m" A" A. {
; U7 }5 r. M( X# R
![]()
Y0 {5 D9 M! n9 d: t
8 {* y% \2 p8 W, U. O保存并测试一下。你会发现角色总是在椅子之上,原因是当一个区域内存在多个对象时(例如floor区域内存在角色和椅子两个对象),引擎按它们的纵坐标(即Y轴坐标)决定绘制顺序。角色的坐标已经被设定为由她的脚所站的位置决定了,但是椅子的坐标默认由图片左上角坐标决定(这样当角色与椅子重合时角色纵坐标总在椅子之下,引擎就总是先绘制椅子,再绘制角色了)。我们要做的就是让椅子的坐标也由椅子脚决定,方法是使用一个sprite而不是简单的BMP图像作为chair实体的图象。sprite在wme可以被视为包含了更多信息的图象,其中一项附加的信息就是焦点(hot spot),焦点可以指定sprite的基准点,实体所处的坐标由基准点决定。我们要做的就是将热点设在椅子脚上。
& ~' |: t2 @' p. J' w % b5 G$ W- j( t! I* V
首先,为chair实体创建一个sprite。返回PM,右键点击Myscene文件夹并选择“Add->Add sprite…”命令。在弹出的模版选择窗口中,选择Empty sprite模版,并将名称改为chair。 ( g6 p/ M- s% q2 u4 H7 `
) F% s5 l" G- D2 u% t k* q" c! c
7 ]( _1 _# H0 e! u+ s5 j
2 p0 @8 k8 L2 W* l f4 z![]()
$ ~! r2 @7 A9 j P- z) a3 G9 |/ {; M f
在MyScene文件夹中一个名为chair.sprite的新sprite创建好了。双击chair.sprite后PM会自动调用SpriteEdit工具帮助你编辑。现在这个sprite是空的,我们首先要添加一个帧(frame)来放椅子的图片(添加多个帧并设定一些信息后就是动画了)。点击Add frame(s)按钮并选择chair.bmp文件 Y; ]6 Q, d* ^7 n F
3 F4 ~+ z" C7 t6 s9 i& R( a" q
m3 k1 k6 w$ Z, ]' n
! R H( V. x8 z7 B- n 8 |& w A4 ?# z! R/ S, m$ X7 }
" D4 g, H3 r1 Q接下来需要改变焦点的位置。有两种方法:一是在右边的预览窗口里拖拽图片使焦点(就是那个红色十字)移动到椅子脚的位置,二是在左下角的信息栏中找到hot spot一栏填写坐标135,174。
1 l( m/ m# o7 y4 B! P3 v1 U; z1 e9 l+ M5 A/ y' P
; U! S3 s1 W1 E( C( @
![]()
; S2 \1 [8 h- N k" n# `# [6 o. F1 j5 X
2 O( U N* o- O1 w0 X2 [6 h
Z5 ?; I6 c' u6 O n
保存并返回SceneEdit。选择chair并更改chair的图象为新创建的chair.sprite文件。你会发现椅子的图象移动了,这是因为我们改变了图像的基准点,移动图像到正确位置。保存并测试游戏。
9 b& d+ \) w: K ! G! |* `, Y9 V& B4 Z) X& F9 Z
效果应该如图所示。+ Q% G% T! U, z0 z6 p
! R1 Y( W: n: v
2 }- W7 }, C( A1 O+ x2 `" e) h: z" e* O1 Y: }0 F0 T
![]() ![]()
. @: s: D4 b& W- i1 p7 h& k
4 n! z' N* x/ Q8 A* {) j最后要做的就在椅子下增添一块障碍区域防止角色横穿,还有设几个路径点。, _; C7 z) s# N b( u4 W( r6 t
2 ^3 U; I; a+ D方法见步骤4和5,最后效果如下图:
D* j' f+ I0 H6 E
" K: w3 [7 C, u! |. ^+ o5 K, ^
- b5 r& v% p, a S% V+ K# @( J2 W/ i& d' l
: c, P- O( _& O( K$ ?; V0 S- }
! \8 z5 B8 |/ L* m L% }' Z% u8 `+ K- k
" ^" n( z$ _2 F
关于自由实体的部分结束了。3 b; i- Q! J4 x0 b& n
( N6 t" D/ g/ A+ s9 _# B
8 i# ^* J& ~% E[比例线]
: E4 F4 ?9 j$ [# O
4 O* P+ k! n4 R+ `现在场景看起来貌似差不多了,但角色好像有点太小了,我们通过可以比例线(scale levels)改变角色的缩放效果。比例线在Scene中表示为一条绿线,在最左端标注了比例,例如现在场景里有两条比例线,中间一条70%,底下一条100%,这样角色从底部到中间行走过程中,比例逐渐由100%缩小至70%(在70%线之上时会默认恢复为100%大小),这样就实现了近大远小和不同场景人物比例不同。9 C b" c" w& }) Y' x. A4 O0 j+ V. l
2 R; P7 N4 K2 Y3 ~2 }4 \
比例线最左端还有一个很扁的小方框,按住小方框并拖动就可以改变比例线的位置,右键点击小方框可以修改属性(properties,可以改变缩放比例和指定位置),或删除(remove)比例线。6 B0 @) {. j$ N u6 p9 i3 H
& Y. y/ u8 ^7 m# [) d4 v- Q
- t7 \$ C- j! o' L& h+ F) |( |
![]()
( u% z* ?8 g& n% x
+ v5 d/ U8 m, H点击下图中的按钮可以添加比例线。(帮助文档使用的是老版本,新版本中者按钮旁边还有个按钮,可以添加纵向的比例线)4 A/ O5 O! D3 _" t' B0 d0 R6 k% H
: M# V ]# C4 C1 ?5 x7 [- q9 p
- m J5 k9 G) ?- I . }. R: f% F- c9 P2 { ?1 c
# |" l+ L7 O6 j, {8 u7 j. C( f之后把上方的比例线移至地板上端并将比例改为90%,下方的比例线则移至地板最下端并改为160%。
! z7 @1 {- Y o2 T4 x* r" o2 ^ 3 U2 W% k$ c/ u$ v
6 i! K8 b" F7 x3 {+ a Z+ J) [' `. _
# L# q! j+ Z5 ^4 @% ]+ U你可能想知道如何设置到正确的比例,最好的方法是使用角色模型(actor placement tool),SceneEdit提供角色模型方便你编辑而不必频繁测试,如下图点击Place actor按钮。$ |' S, w% f9 @- O1 v& u* N+ O
; z4 |- C' Y) u3 R# R. e# _
9 Q" T7 f; O/ ^4 B
/ E! z, ?7 X+ X! N8 M4 K( F) {+ p
![]()
6 d# W# H u0 k * V2 ]( U; F% ^+ ?6 w
这时会弹出一个窗口让你选择使用哪个角色。在“data\actors\molly” 文件夹中找到molly.actor并载入。这时候你的鼠标就变成了一个角色模型,你可以移动鼠标到任何位置看看效果,这时点击右键角色会改变方向,点击左键会暂时将角色模型放下,以后再需要用时点击Place actor按钮就可以。, Q7 h9 o7 y- w3 P# i
. m% V0 c& h; y [修饰区域]
* o! I& @' q! r . P/ _1 Q9 t6 s9 A5 f* y
接下来我们可以添加一些小效果,比如当角色站在远处的小角落时让角色变暗一点。
2 E4 D1 n T5 a5 \ I) o+ W0 C4 l F1 I z# e
我们可以添加一些特殊的区域来影响角色的颜色和缩放,这些区域被称为修饰区域(decoration regions)。
: x$ n c3 V3 B+ K# E* p
! f6 L: S/ V6 W# @在layer列表中选择main,并点击下图的按钮添加一个区域。
% r+ g$ s' d) _8 G, W: z* y! A2 S
9 B9 Y" j. p# z- R3 d
" H X$ ?+ C- s$ E) y+ v; i* F! u! r0 j. x
+ x% x- L; b+ \" h2 z% Q
) y: j* r' A8 ^- p& Z5 v
将名称改为"shade",并将类型由layout改为Decoration。注意信息栏中的Clolor项,选择一种颜色后,在这个区域内的角色绘制时就会混合这种颜色。为了达到阴影的效果,我们指定为浅灰色。
C% v3 A9 n, [, S) p% X7 p# T, w/ c3 N2 t" w9 p. g* h- Y C; Y0 V
9 B5 ]- S& z7 m Q. ~) q' a. \
, y5 O% g) F! Z2 D! _3 v* b改变scale项的话角色在区域内的话就会使用这个比例而不是比例线的,选0则不影响。
' E9 a' r) @2 g/ b9 a
# l5 n0 B! {3 p3 [+ X注意,设定颜色后必须满足以下两个条件才能实现:4 ? \7 [3 p, J2 \6 h! @" n
1、游戏必须运行在加速模式中,兼容模式下无效
. a+ l. S# ^ Z7 _) n2 w+ p' i2、对象必须将Colorable属性设为真
) V2 u1 m: _. w" v
% D |4 S/ V9 P5 E/ E最后将区域移动到合适的位置并调整形状:# I: J; r; F# t( w7 j& G
" k5 X, H6 I9 ^$ u9 X- D; a6 |: t5 C
1 _. _% ^# @ g) _: }+ Q# x0 M
( T; V8 S; t. b. ^/ j$ D6 ^/ [" w: N" G
注意:修饰区域影响角色角色的绘制,所以必须将修饰区域设在node列表的末尾。
9 W- u9 C D. V+ \
& T7 F4 F+ c/ Y6 O, x4 D- g5 b& {你可以回PM测试一下或使用角色模型看看效果。, ~7 L# Z% O4 z3 ^! J7 n0 g
; j$ ?3 F1 n( c4 A v, `5 w这一章结束了~ |