再发一篇,争取明天把9个步骤发完。! K" a9 m4 n) p& Z+ M, X8 T9 |
d9 A! E" o4 v9 ?3 |+ ~
这一章将完成场景的粗略设计,在SceneEdit打开MyScene.scene。( [4 A8 R S4 i4 P
* H' Y- ^' ]! U% F3 w n
[自由实体]
' C2 i E2 ~6 k/ @" Z k" X
! }3 v0 i2 M4 e现在场景中的椅子仍然看起来像是画在地板上一样。之前我们使用创建desk实体和behind_desk区域这种方法实现了桌子的遮挡效果。这种方法是非常灵活的,对于大型物体和无规则形状的物体尤其有用。但对于小一点的东西我们可以使用更简单的方法:将它们创建为自由实体(free entities,希望有人提供更好的翻译- -)。接下来以椅子为例。
, k! E$ Y( R; z) s, F% ^# v- z # b0 K6 w) r3 i7 K/ L
什么是自由实体?之前我们所使用的常规实体:比如背景和桌子,它们在绘制时是按照场景布局(即node列表中的顺序)来绘制的。而自由实体和角色一样,绘制顺序是由它们所处的位置决定的(换句话说,由它们处于哪个区域里决定。这样看来场景中的npc就应该作为自由实体)。接下来具体讲解。
! b" ]$ c0 |5 v3 f8 T% A0 [ u9 @4 h0 F' ?' e' E: z
首先,在ProjectMan中为Myscene文件夹导入椅子的图片,在“data\tutorial\gfx”选择chair.bmp并导入。9 ^, M$ X/ h, ^3 c2 g
, g/ T; [- C0 ]- X+ [2 S4 e
7 S3 h# u9 t1 R, \9 ]0 r6 F- ~
返回SceneEdit。在layer列表中选择Free entities项,下面node列表会显示当前所有的自由实体,现在还是空的。点击Add entity并选择Add sprite entity。一个“new entity”就创建好了。将名称改为chair,标题也可以改为chair。
. k4 |9 z3 k3 i# x v& X
: R3 M6 n' b6 t- `, W0 \- }9 @$ v3 \; o7 B! e) N5 K8 o
+ w4 [8 j4 E* [ }. j$ ~
8 K) S3 Z% P2 R x
接下来为实体指定图像。点击sprite栏后面的“...”按钮选择之前导入的chair.bmp。将实体chair移动到场景中的位置:$ t5 X6 b9 ]) r
2 u2 \: w' n4 R$ } d3 H- W, a0 S4 G0 H e/ r( J3 L
6 Y5 j- ^. b! N6 J; c* T0 e, E; b
9 S7 i% N _- a! n & `; M+ d/ ~3 v' ]4 Z* }
保存并测试一下。你会发现角色总是在椅子之上,原因是当一个区域内存在多个对象时(例如floor区域内存在角色和椅子两个对象),引擎按它们的纵坐标(即Y轴坐标)决定绘制顺序。角色的坐标已经被设定为由她的脚所站的位置决定了,但是椅子的坐标默认由图片左上角坐标决定(这样当角色与椅子重合时角色纵坐标总在椅子之下,引擎就总是先绘制椅子,再绘制角色了)。我们要做的就是让椅子的坐标也由椅子脚决定,方法是使用一个sprite而不是简单的BMP图像作为chair实体的图象。sprite在wme可以被视为包含了更多信息的图象,其中一项附加的信息就是焦点(hot spot),焦点可以指定sprite的基准点,实体所处的坐标由基准点决定。我们要做的就是将热点设在椅子脚上。
' ]1 w) ~8 P7 T9 @6 x7 w9 a
% a' ]+ X" [- G4 W4 l首先,为chair实体创建一个sprite。返回PM,右键点击Myscene文件夹并选择“Add->Add sprite…”命令。在弹出的模版选择窗口中,选择Empty sprite模版,并将名称改为chair。 P* |; w( C! K+ a/ P3 n
- |1 [- M, v0 s# j4 C1 S% }; a R
! ~+ c% l1 G0 x
]7 ^; e7 W) y" M! u9 ]% d- G% f: Y$ @; z2 \) v& X
; i: { ?, w$ P
在MyScene文件夹中一个名为chair.sprite的新sprite创建好了。双击chair.sprite后PM会自动调用SpriteEdit工具帮助你编辑。现在这个sprite是空的,我们首先要添加一个帧(frame)来放椅子的图片(添加多个帧并设定一些信息后就是动画了)。点击Add frame(s)按钮并选择chair.bmp文件- p! p3 u7 j3 k# X" w
( ~( o" p* `8 i9 q" Q
0 q! ]2 I' ^7 E( J4 b
# N! q3 W6 ?0 a( k' E' T' p
+ s2 k: S) _% F5 S3 ~# b " h1 c6 S3 \0 A+ `% S0 H
接下来需要改变焦点的位置。有两种方法:一是在右边的预览窗口里拖拽图片使焦点(就是那个红色十字)移动到椅子脚的位置,二是在左下角的信息栏中找到hot spot一栏填写坐标135,174。
, P5 N8 X$ o& J4 t2 n8 Z& a$ J# I& `: S1 }
! l7 |5 F+ @% Q+ s! P, a' y' e
% Y) L9 V( j6 i b5 z) \# L( N( G( C* Z# |! V. e
/ U3 |. }" q1 F
5 R. `/ z: }! Y# R
保存并返回SceneEdit。选择chair并更改chair的图象为新创建的chair.sprite文件。你会发现椅子的图象移动了,这是因为我们改变了图像的基准点,移动图像到正确位置。保存并测试游戏。
( U+ |3 [2 r& i- y2 G
" u7 q9 }* h% b效果应该如图所示。6 `$ ^. i0 h/ l1 r/ P! E# E, J
: N. c+ ?" G" R, X2 ^
5 ]* k/ z% J& k/ u1 B7 w c6 N" {5 {1 R* r" ?$ t! @+ C$ i
' e; X0 E! h& N
' p+ F3 @1 Z1 e- F- o, {
最后要做的就在椅子下增添一块障碍区域防止角色横穿,还有设几个路径点。" J! j' J9 A K# I; |% I
" B7 }4 d3 N) m& a1 ^+ P. [( c/ K
方法见步骤4和5,最后效果如下图:
$ A- u- Q/ L3 L
" V8 n8 h% U; v Q2 e u" ^4 g% j. V' N3 F n) ^8 @7 a- N9 [
( m: ]- ]6 b1 D6 ^# r; N0 [ ~: F% m
+ G1 T0 \# H: Y; y
7 _. J, {, V5 p& y% @
关于自由实体的部分结束了。
+ J) r/ f! ] e% O W0 r Z' Q5 t- I' Y7 N& p& L" M
J) S9 @( J/ v) u$ E U& m
[比例线]
, G4 A/ e2 ]" \- M& L4 N
, C! l* N6 ~' q S现在场景看起来貌似差不多了,但角色好像有点太小了,我们通过可以比例线(scale levels)改变角色的缩放效果。比例线在Scene中表示为一条绿线,在最左端标注了比例,例如现在场景里有两条比例线,中间一条70%,底下一条100%,这样角色从底部到中间行走过程中,比例逐渐由100%缩小至70%(在70%线之上时会默认恢复为100%大小),这样就实现了近大远小和不同场景人物比例不同。/ p& r) B, ?0 L3 I' ]
+ `) j$ G9 {, t( D- C/ m2 ]5 C) _比例线最左端还有一个很扁的小方框,按住小方框并拖动就可以改变比例线的位置,右键点击小方框可以修改属性(properties,可以改变缩放比例和指定位置),或删除(remove)比例线。! Q) \" @ P; v7 @( Q$ ^* j5 T
. x/ q4 Q/ M& D
+ H! _( c1 ?; _- `6 v( w/ `
; |) ~7 n" n/ _7 _; x
. W; _& [7 s4 L# |$ Y
! g; J' ]) b) G; B& q) I3 o点击下图中的按钮可以添加比例线。(帮助文档使用的是老版本,新版本中者按钮旁边还有个按钮,可以添加纵向的比例线)' o1 _+ R3 r2 W2 b7 f- J
6 T/ b9 z. S+ P2 y$ H9 k# }, j
( C3 F: ^4 }0 \8 c
0 |9 J+ Z: E9 w% C% I* e2 C" E9 I
" D( E- M+ c# s之后把上方的比例线移至地板上端并将比例改为90%,下方的比例线则移至地板最下端并改为160%。
* F; ~: P, h8 j( i' q; A1 r4 @/ V
, A8 E5 \: t2 O' t6 b( g. q, q, _5 C+ w$ |' v
# t3 H. X9 y! f0 q; V0 |+ {6 G你可能想知道如何设置到正确的比例,最好的方法是使用角色模型(actor placement tool),SceneEdit提供角色模型方便你编辑而不必频繁测试,如下图点击Place actor按钮。( l( {% _( s! p# g) S
% g8 l( r R& E8 f6 B) q
, n+ K# {2 R ~3 @
5 P' |4 ^1 {5 y* M Y
* w9 }# @, Z) F 9 z( n+ a- G$ |3 `* K3 t: l
这时会弹出一个窗口让你选择使用哪个角色。在“data\actors\molly” 文件夹中找到molly.actor并载入。这时候你的鼠标就变成了一个角色模型,你可以移动鼠标到任何位置看看效果,这时点击右键角色会改变方向,点击左键会暂时将角色模型放下,以后再需要用时点击Place actor按钮就可以。
" F5 m" G2 X; G6 G6 S 5 D; J1 }( ~9 g/ ]% R% o
[修饰区域]. f/ Q, t; o6 h: v, n
: m6 t% n9 l* k/ Q& y; O
接下来我们可以添加一些小效果,比如当角色站在远处的小角落时让角色变暗一点。
' P9 f0 i( V" E& q$ O9 [: ? 0 u0 {. u& q1 Q9 y9 x
我们可以添加一些特殊的区域来影响角色的颜色和缩放,这些区域被称为修饰区域(decoration regions)。
& u9 L+ f) ~4 d$ s) [# |8 w ' `1 o& H' B5 i* b
在layer列表中选择main,并点击下图的按钮添加一个区域。& @6 q8 |/ r# N: v
0 J. x3 D7 w$ w/ K6 A1 l
/ ]/ B# u& p) D4 \, C$ w! V, Y" H j: o! P E0 M
+ _0 Q3 s. L: O$ ?4 H0 V
/ z! p& n9 V3 i* Y4 m将名称改为"shade",并将类型由layout改为Decoration。注意信息栏中的Clolor项,选择一种颜色后,在这个区域内的角色绘制时就会混合这种颜色。为了达到阴影的效果,我们指定为浅灰色。
, I# X6 }" A( |5 n1 {' Y
: k5 H. u1 P' x, ~% A+ g7 ?: M: c) l5 G/ ~
7 D% g+ y! Y; l4 L+ U
) v+ W& t( \ o+ ^5 F( p) h改变scale项的话角色在区域内的话就会使用这个比例而不是比例线的,选0则不影响。; _$ l8 w! @: T# {" I* S9 H# o
0 a' P! F' \/ H0 [+ x注意,设定颜色后必须满足以下两个条件才能实现:
8 U# h7 Z# k. m% L2 w1、游戏必须运行在加速模式中,兼容模式下无效
" O% c8 w( z: j6 u& B) l3 V2、对象必须将Colorable属性设为真
% n4 d+ F: @+ c; P
4 N0 i9 Y0 T9 b1 Y最后将区域移动到合适的位置并调整形状:
) T; P! \2 v1 H: A0 L( F6 \) y: k# p: V
& D) _# }9 k, K4 m6 A# H) {: @- }% L$ J
% Z1 q" V9 w8 z I
; C& g# k4 X& X) S) G3 l
注意:修饰区域影响角色角色的绘制,所以必须将修饰区域设在node列表的末尾。8 Q1 v4 |3 e- C' e9 S: v, J! Q
9 y! w! R& e7 n9 {你可以回PM测试一下或使用角色模型看看效果。
j; ]" ~+ A% _; V
" E8 ~9 }3 K ]& B* w& }# i这一章结束了~ |