再发一篇,争取明天把9个步骤发完。
$ H8 G! q: j/ x3 s7 f: |
9 T/ w G! J1 z. h2 r' ?/ s# S9 f这一章将完成场景的粗略设计,在SceneEdit打开MyScene.scene。8 A8 q( L3 y' ?3 A I: e7 Z
/ j1 `) R1 o$ Y
[自由实体]% N+ v$ n# |! L, r
& @1 M2 u: ~! K! |( U现在场景中的椅子仍然看起来像是画在地板上一样。之前我们使用创建desk实体和behind_desk区域这种方法实现了桌子的遮挡效果。这种方法是非常灵活的,对于大型物体和无规则形状的物体尤其有用。但对于小一点的东西我们可以使用更简单的方法:将它们创建为自由实体(free entities,希望有人提供更好的翻译- -)。接下来以椅子为例。0 T. E3 g5 Y5 U# {6 [' W f, t
3 l3 D+ l; h( \6 _什么是自由实体?之前我们所使用的常规实体:比如背景和桌子,它们在绘制时是按照场景布局(即node列表中的顺序)来绘制的。而自由实体和角色一样,绘制顺序是由它们所处的位置决定的(换句话说,由它们处于哪个区域里决定。这样看来场景中的npc就应该作为自由实体)。接下来具体讲解。8 @7 t+ ]7 i8 s& m& m2 Q8 ^
' m" b9 w0 c# c, ^- O8 P( c1 h首先,在ProjectMan中为Myscene文件夹导入椅子的图片,在“data\tutorial\gfx”选择chair.bmp并导入。
1 U4 C1 J- W/ _. H6 w" c 8 b+ Y5 \0 s7 ?
3 K9 Y2 B. F+ a; o# Q! m* H
返回SceneEdit。在layer列表中选择Free entities项,下面node列表会显示当前所有的自由实体,现在还是空的。点击Add entity并选择Add sprite entity。一个“new entity”就创建好了。将名称改为chair,标题也可以改为chair。
! W: c+ m% M$ v: P% Z/ z! W7 q4 d# h6 j! t9 a' y6 @
$ B4 ^7 L! ? y0 m, @6 M! e( U
+ C3 D/ g1 v/ Q H3 X1 o
; |3 r* t1 W7 C
接下来为实体指定图像。点击sprite栏后面的“...”按钮选择之前导入的chair.bmp。将实体chair移动到场景中的位置:8 |0 H) M1 E ~+ _
/ I- G8 G$ I- M2 L2 p1 s+ g% r( E& o
l: ~" [7 }/ C7 M
6 Z- S5 k6 O& Y9 h2 h- X+ F$ Q 4 u, M6 q% L1 v1 h4 G) {
) c7 O* s% t U8 D
保存并测试一下。你会发现角色总是在椅子之上,原因是当一个区域内存在多个对象时(例如floor区域内存在角色和椅子两个对象),引擎按它们的纵坐标(即Y轴坐标)决定绘制顺序。角色的坐标已经被设定为由她的脚所站的位置决定了,但是椅子的坐标默认由图片左上角坐标决定(这样当角色与椅子重合时角色纵坐标总在椅子之下,引擎就总是先绘制椅子,再绘制角色了)。我们要做的就是让椅子的坐标也由椅子脚决定,方法是使用一个sprite而不是简单的BMP图像作为chair实体的图象。sprite在wme可以被视为包含了更多信息的图象,其中一项附加的信息就是焦点(hot spot),焦点可以指定sprite的基准点,实体所处的坐标由基准点决定。我们要做的就是将热点设在椅子脚上。
5 F* F1 Q; T T8 @" j. A $ ]& j a7 L5 H: g" U
首先,为chair实体创建一个sprite。返回PM,右键点击Myscene文件夹并选择“Add->Add sprite…”命令。在弹出的模版选择窗口中,选择Empty sprite模版,并将名称改为chair。 1 D0 Y# ^/ N: {
9 Q$ J8 ]. o/ u( `. z1 k
( \+ e' H6 L. J! s' R% [ v/ z; N
5 f7 v4 H% \: W. [0 L![]()
& f7 ]/ t* O3 N4 t
: k! C3 O3 O8 N2 J在MyScene文件夹中一个名为chair.sprite的新sprite创建好了。双击chair.sprite后PM会自动调用SpriteEdit工具帮助你编辑。现在这个sprite是空的,我们首先要添加一个帧(frame)来放椅子的图片(添加多个帧并设定一些信息后就是动画了)。点击Add frame(s)按钮并选择chair.bmp文件3 g$ a* U; Y* u8 Y [
?" I+ w/ [9 F4 b. T" J$ G/ V' ~6 h2 y
& |/ }; p4 \6 H; y6 ~/ }; { h$ m, _6 z7 c
# V( K. @+ T/ i; k8 _
; W/ `, c) X5 M& j! k/ J
接下来需要改变焦点的位置。有两种方法:一是在右边的预览窗口里拖拽图片使焦点(就是那个红色十字)移动到椅子脚的位置,二是在左下角的信息栏中找到hot spot一栏填写坐标135,174。
9 Q N' I. c6 K4 m* k' A L+ Y7 r/ c2 O4 b# j2 V, f
![]()
z* D* h) C5 m' M![]()
' R! d v3 O7 L, q* u3 s4 T( W8 D$ t& q
! n6 k/ ]$ e0 z) ?
8 Q( R. _4 _' V {9 e3 b保存并返回SceneEdit。选择chair并更改chair的图象为新创建的chair.sprite文件。你会发现椅子的图象移动了,这是因为我们改变了图像的基准点,移动图像到正确位置。保存并测试游戏。
* F9 V* L: f$ P( P% D* Q 5 e- ]1 f# _1 u
效果应该如图所示。
: V0 A1 w; B. Y! j* o: A! u$ @; W b1 Y
1 H O5 H& d3 r- N# x0 r7 Y9 k. f3 Z& |. \4 Y0 L# _
![]() 4 V/ ~/ H8 q$ c
$ y$ Z1 P, ~( D) K0 {) l最后要做的就在椅子下增添一块障碍区域防止角色横穿,还有设几个路径点。
3 }" ]* u+ H0 ?" s( g( R
5 ~" r& V2 C, c# v方法见步骤4和5,最后效果如下图:
3 i/ i& Z$ k0 N7 \1 N
7 n9 L" _* ^! b* o9 a, f5 E9 t- P8 F$ e6 _0 [8 j
5 ]1 ]* o( @: V& s& x4 N, l9 W2 [+ d
![]()
1 t0 |0 V) H3 U: x- ], ~$ {1 Z ?6 E/ ?. Z" s
( d) k6 g4 A0 @$ @! c关于自由实体的部分结束了。) d5 x6 L) H, {8 j3 |- N: ]
, A0 ]2 t4 O ~2 _# a
( Q3 D3 K) p' T5 Z$ R0 \[比例线], l& h" s9 p) n3 n4 n' F: K" Y
4 \6 S; M: _ [: D* B
现在场景看起来貌似差不多了,但角色好像有点太小了,我们通过可以比例线(scale levels)改变角色的缩放效果。比例线在Scene中表示为一条绿线,在最左端标注了比例,例如现在场景里有两条比例线,中间一条70%,底下一条100%,这样角色从底部到中间行走过程中,比例逐渐由100%缩小至70%(在70%线之上时会默认恢复为100%大小),这样就实现了近大远小和不同场景人物比例不同。( t8 V+ }0 ~ |* F, r, A: n8 z5 [8 m
) [8 Q. {* |: s' ^+ c比例线最左端还有一个很扁的小方框,按住小方框并拖动就可以改变比例线的位置,右键点击小方框可以修改属性(properties,可以改变缩放比例和指定位置),或删除(remove)比例线。
, }* v8 G6 F) K' d- `) f9 p) a2 R% }: m4 M* r& ~3 [ W8 j
* I3 p6 f* [0 _+ U' u% n
% n/ `; P( T% F+ R - Q/ C- Z- E% B0 G' H
8 L* d/ @* w& h, h6 g2 q3 @点击下图中的按钮可以添加比例线。(帮助文档使用的是老版本,新版本中者按钮旁边还有个按钮,可以添加纵向的比例线)0 s; ~6 {& p( X3 r; e( H! u) B
5 _0 P8 m# K7 u9 _# v! t9 G9 `# Z) o- L% h
8 A9 c0 Y+ [$ i3 ]
O7 b* v. c4 M之后把上方的比例线移至地板上端并将比例改为90%,下方的比例线则移至地板最下端并改为160%。3 D; K* S) B- F5 Q# P5 S7 j
/ }, e8 a) F& v( ~
+ {, T- i8 g% v; z" ~" ?- ]
9 G* E; b. ~& I5 H* y$ j
你可能想知道如何设置到正确的比例,最好的方法是使用角色模型(actor placement tool),SceneEdit提供角色模型方便你编辑而不必频繁测试,如下图点击Place actor按钮。
* I% Y* @; U1 X1 ~4 T& ^% X$ m/ D, K9 Z( E+ H \
& q! w& g( X$ u9 ~# y8 X% }
* B) L5 S' X2 z x6 V; q
![]()
) Q2 W; p$ n$ ] * v3 p4 O. b8 |# _
这时会弹出一个窗口让你选择使用哪个角色。在“data\actors\molly” 文件夹中找到molly.actor并载入。这时候你的鼠标就变成了一个角色模型,你可以移动鼠标到任何位置看看效果,这时点击右键角色会改变方向,点击左键会暂时将角色模型放下,以后再需要用时点击Place actor按钮就可以。; D' f8 f- \( f
; _' E' I) N1 I ~+ ^( v% R [修饰区域]
0 T6 a' C5 R& A4 }7 t( W
4 I/ @& d# C" E2 C4 N! K2 d3 A$ t接下来我们可以添加一些小效果,比如当角色站在远处的小角落时让角色变暗一点。
. E7 e' [1 D% o" ]% S) g
5 }* b! a0 E- I8 I9 m我们可以添加一些特殊的区域来影响角色的颜色和缩放,这些区域被称为修饰区域(decoration regions)。
9 t5 D, n$ k4 n R6 H3 @, p+ d* _& f f' r4 }' \, h
在layer列表中选择main,并点击下图的按钮添加一个区域。( K) c# ^' Q: {" |: r' M
+ {. R* Q$ @+ R$ i: o" L3 Z" s2 D1 x1 H) v
7 ^% J7 H, ~7 h) U; Q9 i0 L8 V8 O" {: J6 B4 c, u4 ?. a
![]()
. t% |: {6 D, g4 u# F( _
: v4 k/ [% i6 C- ^: c2 i+ P4 V/ k% |将名称改为"shade",并将类型由layout改为Decoration。注意信息栏中的Clolor项,选择一种颜色后,在这个区域内的角色绘制时就会混合这种颜色。为了达到阴影的效果,我们指定为浅灰色。
& W. T& {1 h4 O, V- y
) a" m' a- A, f* L6 Y/ U
3 h$ ?4 X2 G, _& F ' b7 f3 t+ {1 t
' S7 P: R4 M; v& L
改变scale项的话角色在区域内的话就会使用这个比例而不是比例线的,选0则不影响。
8 M3 `3 U; N+ `0 ], W+ m; O & ]# W7 E* J% Z# v7 i0 i& O( }
注意,设定颜色后必须满足以下两个条件才能实现:
6 F# l. q# `4 c4 r3 U% ~: b- D# @/ _/ C1、游戏必须运行在加速模式中,兼容模式下无效5 B* {0 r4 K" s6 e
2、对象必须将Colorable属性设为真
/ f2 {; b4 Y6 u- ^ 7 Q2 w1 o. n1 w! e8 k
最后将区域移动到合适的位置并调整形状:' t) ?( J0 p8 P, A) x
- @$ K+ k, _# i: z+ h" d8 N# \
6 b0 ^* d: M4 I) ?% z0 ~, ]
& {1 ~0 Q1 J; h* W6 [4 n5 P* q" ]5 _
3 d) }( C# i0 D: ~
注意:修饰区域影响角色角色的绘制,所以必须将修饰区域设在node列表的末尾。; O1 W! S, F- `; G: f! Q
' I+ V+ \9 E' r你可以回PM测试一下或使用角色模型看看效果。
% ?' P9 K' b/ [9 Q$ g) X9 q7 e 4 Y. t4 N9 E9 x; p6 f& M
这一章结束了~ |