再发一篇,争取明天把9个步骤发完。
4 h( H0 L% V: B/ q
8 a! t2 P! W7 q$ V/ d这一章将完成场景的粗略设计,在SceneEdit打开MyScene.scene。
6 y9 o2 _& B0 e+ I9 T, u8 `+ d
: s, e/ Q% U3 K' E8 ?' m9 O[自由实体]
% W8 \% l0 S& g) D/ B
' C( v0 l) n9 ^4 s; }6 ?* M- s现在场景中的椅子仍然看起来像是画在地板上一样。之前我们使用创建desk实体和behind_desk区域这种方法实现了桌子的遮挡效果。这种方法是非常灵活的,对于大型物体和无规则形状的物体尤其有用。但对于小一点的东西我们可以使用更简单的方法:将它们创建为自由实体(free entities,希望有人提供更好的翻译- -)。接下来以椅子为例。
2 N" W# O! Z) @6 k& R2 N
, P- Z/ x$ `( J9 f( d9 r2 [6 o {什么是自由实体?之前我们所使用的常规实体:比如背景和桌子,它们在绘制时是按照场景布局(即node列表中的顺序)来绘制的。而自由实体和角色一样,绘制顺序是由它们所处的位置决定的(换句话说,由它们处于哪个区域里决定。这样看来场景中的npc就应该作为自由实体)。接下来具体讲解。
9 B( Y, D' W2 f# {% E# d- g9 F5 H
0 E: ^7 l/ n9 N$ i# c首先,在ProjectMan中为Myscene文件夹导入椅子的图片,在“data\tutorial\gfx”选择chair.bmp并导入。
( T2 p w) x6 J2 f/ q* v4 s 4 l: S7 h2 V4 Q5 k7 H- p
$ {* e0 h" J4 K; n" v, g- V
返回SceneEdit。在layer列表中选择Free entities项,下面node列表会显示当前所有的自由实体,现在还是空的。点击Add entity并选择Add sprite entity。一个“new entity”就创建好了。将名称改为chair,标题也可以改为chair。
1 R6 l1 f, U; B: Q; p |- |5 `: H& B T# [ `- g
3 \0 T3 E8 d5 r# e4 R( E3 q
0 }9 s) ?) u- S" A8 R) Q
2 d& ]2 H+ N+ Z) a接下来为实体指定图像。点击sprite栏后面的“...”按钮选择之前导入的chair.bmp。将实体chair移动到场景中的位置:# H# O7 W3 Z$ b; X/ n
/ x: A- ^8 N; b. F% X; i" K
; Z# h" i/ Q2 q7 V% {$ X+ m9 ~
4 }4 u7 v3 q) z i0 b; e2 M+ v5 Z) _
' O9 `% T$ k5 W6 ? ! `1 U( h" ~1 {6 Z2 Z
保存并测试一下。你会发现角色总是在椅子之上,原因是当一个区域内存在多个对象时(例如floor区域内存在角色和椅子两个对象),引擎按它们的纵坐标(即Y轴坐标)决定绘制顺序。角色的坐标已经被设定为由她的脚所站的位置决定了,但是椅子的坐标默认由图片左上角坐标决定(这样当角色与椅子重合时角色纵坐标总在椅子之下,引擎就总是先绘制椅子,再绘制角色了)。我们要做的就是让椅子的坐标也由椅子脚决定,方法是使用一个sprite而不是简单的BMP图像作为chair实体的图象。sprite在wme可以被视为包含了更多信息的图象,其中一项附加的信息就是焦点(hot spot),焦点可以指定sprite的基准点,实体所处的坐标由基准点决定。我们要做的就是将热点设在椅子脚上。4 F; m; l: n0 x6 [0 j& k( b
9 ~' E8 J& t, h8 m1 a$ B& x首先,为chair实体创建一个sprite。返回PM,右键点击Myscene文件夹并选择“Add->Add sprite…”命令。在弹出的模版选择窗口中,选择Empty sprite模版,并将名称改为chair。
. b z2 j& q- i9 P6 r+ x
2 @$ J. o8 `5 A
! H, U6 v! A X" q# w2 ]0 C; |+ Z! p- O! ^, L
! B9 A Q H; }
, p) X; f: H1 `6 Q& U* P: ~在MyScene文件夹中一个名为chair.sprite的新sprite创建好了。双击chair.sprite后PM会自动调用SpriteEdit工具帮助你编辑。现在这个sprite是空的,我们首先要添加一个帧(frame)来放椅子的图片(添加多个帧并设定一些信息后就是动画了)。点击Add frame(s)按钮并选择chair.bmp文件& w! O. b" y9 S: u/ h* A
9 e! f j3 H0 w
9 w7 T+ t% t2 s$ _* Z) k# Q K
0 \7 M( ~7 y m7 W- I+ W* s4 P: L- ~: V) L# C) m I
/ @# m8 z* I7 T o3 E j' i4 |
接下来需要改变焦点的位置。有两种方法:一是在右边的预览窗口里拖拽图片使焦点(就是那个红色十字)移动到椅子脚的位置,二是在左下角的信息栏中找到hot spot一栏填写坐标135,174。/ k% F8 ~. V1 ~9 `; U* z# D( z
4 c7 M9 Q1 x& g: N
0 f3 n4 D. u8 y3 Z) Z# w" I" }9 K& e4 a- M3 G
( y4 n6 b+ |3 \3 j |
7 q4 W5 y& t, N
0 W5 A- Y8 h& M! X& c& ]保存并返回SceneEdit。选择chair并更改chair的图象为新创建的chair.sprite文件。你会发现椅子的图象移动了,这是因为我们改变了图像的基准点,移动图像到正确位置。保存并测试游戏。
! I3 L0 w& n7 M: V; L. _ 2 {- x m' F3 f9 T9 h
效果应该如图所示。, F9 S4 ^1 ~" I9 U$ d! N
* b) M% k+ O4 X3 |- e
% S; I8 R( p& i4 N1 l
8 _5 Y$ W- r3 l6 t7 [
6 B$ G. e9 G. ~8 N, ]* `6 Y% j- e
# P2 w, M$ m# G最后要做的就在椅子下增添一块障碍区域防止角色横穿,还有设几个路径点。
/ ~& ^& g4 |% W" s ( ^# ?& o; _; l1 V* i5 {8 k0 x
方法见步骤4和5,最后效果如下图:
. s. e+ i( W6 q. l, q+ J2 _, B5 f$ T" U, h3 Z. h
6 B: `1 Y$ b/ K& }& u
7 i: O$ c) Q% Z4 m' A" E' e+ z4 l5 q# i$ h( t5 {# n8 Z
; o6 @! }! o( m: H) L; @
% K! Z; C7 `& ]9 c& q8 ]关于自由实体的部分结束了。# ~. r# h) Z. ~9 F
+ W+ G+ V) C2 g+ s
. j8 q. Y- f, f; [6 X y+ n[比例线]
/ }" {( V& |% e" b( T b# Y4 Z0 O; u/ [
现在场景看起来貌似差不多了,但角色好像有点太小了,我们通过可以比例线(scale levels)改变角色的缩放效果。比例线在Scene中表示为一条绿线,在最左端标注了比例,例如现在场景里有两条比例线,中间一条70%,底下一条100%,这样角色从底部到中间行走过程中,比例逐渐由100%缩小至70%(在70%线之上时会默认恢复为100%大小),这样就实现了近大远小和不同场景人物比例不同。
0 |4 F* n$ ^5 D: B
0 O- R Y3 h8 g# Z: g比例线最左端还有一个很扁的小方框,按住小方框并拖动就可以改变比例线的位置,右键点击小方框可以修改属性(properties,可以改变缩放比例和指定位置),或删除(remove)比例线。 b9 n& M$ A9 O* ~- i! g
1 F }+ _& K! e6 I! z4 N3 }- ?% H/ {. i7 d! Y
& I8 P. F" u' @" k2 g) N9 G
# R) c S$ ^& {9 y8 r ) F9 g' k# \+ M7 \0 E+ O
点击下图中的按钮可以添加比例线。(帮助文档使用的是老版本,新版本中者按钮旁边还有个按钮,可以添加纵向的比例线)
, T3 `/ j; Z0 I" x j
9 l9 I6 `& t8 f8 z" {, P, ^# a9 L0 Y
+ k% V. E. F; m+ n/ _7 Z ) G% \9 S2 w# B; G5 v/ @' u
之后把上方的比例线移至地板上端并将比例改为90%,下方的比例线则移至地板最下端并改为160%。& I- Q& d- f* L, d2 H0 {
% h. D7 F* [- A9 ?% a% v9 Y7 \
9 p3 g; g- ^( k! H
( B" @! S+ z8 Q* H" U5 J你可能想知道如何设置到正确的比例,最好的方法是使用角色模型(actor placement tool),SceneEdit提供角色模型方便你编辑而不必频繁测试,如下图点击Place actor按钮。
' n2 H2 X9 ?0 z. L9 O9 n
' {3 \4 D3 q# l4 [9 i, T m
, J. G( n; k+ e. z- b$ a
' Z* w8 \7 s' l/ b8 C- R
5 j5 p+ K9 Q8 F/ q9 d 3 r' h1 g- g# N: F
这时会弹出一个窗口让你选择使用哪个角色。在“data\actors\molly” 文件夹中找到molly.actor并载入。这时候你的鼠标就变成了一个角色模型,你可以移动鼠标到任何位置看看效果,这时点击右键角色会改变方向,点击左键会暂时将角色模型放下,以后再需要用时点击Place actor按钮就可以。; ^! s2 }. w% h, }% @% m
0 S! q! J/ g3 ?% ~& b [修饰区域]& J1 B# T, m) g7 M/ O3 `
\6 g# P$ p$ L) @接下来我们可以添加一些小效果,比如当角色站在远处的小角落时让角色变暗一点。; u" o$ \) x+ p$ F5 |' ^. R
1 x0 l: B) _! B Z$ z6 v2 {$ t0 \1 `
我们可以添加一些特殊的区域来影响角色的颜色和缩放,这些区域被称为修饰区域(decoration regions)。
4 P5 b# F' h O. T! q; t6 p- Y
# p& U. X) I2 @. b6 ^$ r在layer列表中选择main,并点击下图的按钮添加一个区域。4 E. z" v9 E9 M! G1 M7 W/ x
: d y' n; j/ _4 o4 G$ G3 r0 k* p2 x) }
& B: r5 r) f) r; U7 l% u* x: S& {6 o, q' _, R6 C
" O' f, d' ]. a5 ^4 s将名称改为"shade",并将类型由layout改为Decoration。注意信息栏中的Clolor项,选择一种颜色后,在这个区域内的角色绘制时就会混合这种颜色。为了达到阴影的效果,我们指定为浅灰色。: W1 g" p3 _& O1 a9 r
0 v6 m6 y. _& l4 B% `( l
2 Z3 c5 k, z w! g4 \1 h4 D8 u, x* j T
6 n6 W( {% [1 H$ { n2 Q3 L7 e5 o" {改变scale项的话角色在区域内的话就会使用这个比例而不是比例线的,选0则不影响。, e3 h. l$ j+ E3 I+ U
' r! W9 i% _' a ~1 g注意,设定颜色后必须满足以下两个条件才能实现:2 t# u6 t e6 s
1、游戏必须运行在加速模式中,兼容模式下无效
5 u8 U0 N6 g3 d% b" P2、对象必须将Colorable属性设为真
8 I1 `$ {2 d. f
. I8 c/ i4 L f4 k: p最后将区域移动到合适的位置并调整形状:9 c5 m9 L, G" ?$ ]& S; t
/ c9 w" I$ o8 ?# Z4 n, x3 G# B7 s8 S' [, T$ d6 K
, ]) _! i% Y; ^* w
6 f: Y) X& y, `注意:修饰区域影响角色角色的绘制,所以必须将修饰区域设在node列表的末尾。
3 y/ I3 w7 V7 [ 2 u9 X1 T9 u) L/ B* Y% o% V6 c
你可以回PM测试一下或使用角色模型看看效果。5 t* ^- k/ {0 ?9 @6 \3 N0 d
+ O$ P' V J7 n/ [这一章结束了~ |