再发一篇,争取明天把9个步骤发完。4 m4 ^0 q4 X: |: c
- O( `4 Y7 k0 w1 q# \
这一章将完成场景的粗略设计,在SceneEdit打开MyScene.scene。
0 D# `6 _7 u' l' ] 4 ^2 `3 j3 W( W, V$ P
[自由实体]
5 Q' j9 b/ x6 ^5 u4 ]8 f
' F) u; u6 M8 V$ I$ g" ^现在场景中的椅子仍然看起来像是画在地板上一样。之前我们使用创建desk实体和behind_desk区域这种方法实现了桌子的遮挡效果。这种方法是非常灵活的,对于大型物体和无规则形状的物体尤其有用。但对于小一点的东西我们可以使用更简单的方法:将它们创建为自由实体(free entities,希望有人提供更好的翻译- -)。接下来以椅子为例。& }; \- S, u1 ~' w* K9 {# ^6 {
2 {& p# `" h% i- Y/ a" _4 L$ c什么是自由实体?之前我们所使用的常规实体:比如背景和桌子,它们在绘制时是按照场景布局(即node列表中的顺序)来绘制的。而自由实体和角色一样,绘制顺序是由它们所处的位置决定的(换句话说,由它们处于哪个区域里决定。这样看来场景中的npc就应该作为自由实体)。接下来具体讲解。
/ L+ m# Q1 ]' \- j* C% F1 J
- S9 k9 q, l) i( L0 r" }首先,在ProjectMan中为Myscene文件夹导入椅子的图片,在“data\tutorial\gfx”选择chair.bmp并导入。
& r. S- h% ?( v; W. _3 M9 ~ . Q. p6 n3 u5 A5 k
: _% ?- W- ]& x& c% F- \& k0 k, _3 A
返回SceneEdit。在layer列表中选择Free entities项,下面node列表会显示当前所有的自由实体,现在还是空的。点击Add entity并选择Add sprite entity。一个“new entity”就创建好了。将名称改为chair,标题也可以改为chair。
0 V9 C" C( f) |2 u- v1 x" q- O
. v# `; `2 I# W8 I( y. C1 x7 D9 X1 q0 i+ ]7 d- o
4 q& k% I D+ [/ K- P1 w
$ }4 l* V3 O+ k
接下来为实体指定图像。点击sprite栏后面的“...”按钮选择之前导入的chair.bmp。将实体chair移动到场景中的位置:5 J4 W$ [. P% |8 R
% j4 ]) z$ |2 _# v6 W
% y, e$ I% W- i1 V2 E7 Q" z$ K+ K
+ h% v3 D& A: x, c# q6 B" S0 P( k' S+ a
7 Y, V+ L" T2 E0 T9 ]' y
保存并测试一下。你会发现角色总是在椅子之上,原因是当一个区域内存在多个对象时(例如floor区域内存在角色和椅子两个对象),引擎按它们的纵坐标(即Y轴坐标)决定绘制顺序。角色的坐标已经被设定为由她的脚所站的位置决定了,但是椅子的坐标默认由图片左上角坐标决定(这样当角色与椅子重合时角色纵坐标总在椅子之下,引擎就总是先绘制椅子,再绘制角色了)。我们要做的就是让椅子的坐标也由椅子脚决定,方法是使用一个sprite而不是简单的BMP图像作为chair实体的图象。sprite在wme可以被视为包含了更多信息的图象,其中一项附加的信息就是焦点(hot spot),焦点可以指定sprite的基准点,实体所处的坐标由基准点决定。我们要做的就是将热点设在椅子脚上。
- s0 V. `7 ?6 y, ], u + l: U3 I5 D/ }6 a9 a `
首先,为chair实体创建一个sprite。返回PM,右键点击Myscene文件夹并选择“Add->Add sprite…”命令。在弹出的模版选择窗口中,选择Empty sprite模版,并将名称改为chair。
6 o2 z9 Q( z2 Y1 L% h- m+ S1 K: i# L# E' j
' `$ m! `, W, a. o
; R2 G. N* H- d' w# b. ]' H8 R4 u# i5 `
8 K; l ?! B/ A, X/ B在MyScene文件夹中一个名为chair.sprite的新sprite创建好了。双击chair.sprite后PM会自动调用SpriteEdit工具帮助你编辑。现在这个sprite是空的,我们首先要添加一个帧(frame)来放椅子的图片(添加多个帧并设定一些信息后就是动画了)。点击Add frame(s)按钮并选择chair.bmp文件) d1 ^+ E' y3 j( \7 M& O3 g! p
) f E4 B( c! O- e% B* A* X0 P
; w+ |* t! S2 x( V! H) T
" S" m4 }! t. d0 _+ V: C$ x* F& @
5 q& C' M# L& R- ~$ D( g4 T " z9 A& s& C1 d7 G
接下来需要改变焦点的位置。有两种方法:一是在右边的预览窗口里拖拽图片使焦点(就是那个红色十字)移动到椅子脚的位置,二是在左下角的信息栏中找到hot spot一栏填写坐标135,174。
, w/ q0 L- U4 K+ Y$ d
" b) X: [& L# g6 A. P/ B D. W
7 E$ F3 B! H2 |
9 A8 y* E8 y. h) v5 Q8 c* x+ Y: }# a" t# Z" X& B
) I/ M# {3 i3 }$ T- ]: T% C
! L! @2 [& D& ]
保存并返回SceneEdit。选择chair并更改chair的图象为新创建的chair.sprite文件。你会发现椅子的图象移动了,这是因为我们改变了图像的基准点,移动图像到正确位置。保存并测试游戏。2 v! U* I- J% D1 Z/ [: v8 C
7 g5 n$ Z: D' m! }) w效果应该如图所示。
9 h0 O. c2 B6 x* d ^' f' |8 z6 _# A/ w# g
5 [' n7 |, `: }1 r6 w% M0 {' G1 e' x" }- B7 S, E3 |/ N
* |. C2 a! H9 K c5 v " A/ ^9 K' t; d7 V1 Y" g5 C
最后要做的就在椅子下增添一块障碍区域防止角色横穿,还有设几个路径点。
* A/ Z# s2 ]1 L6 B$ o 0 {9 B: ]3 p5 l% P1 p8 y8 n9 o
方法见步骤4和5,最后效果如下图:6 ^7 \# f$ T6 e g4 u. l3 e1 d# B- v
- @ s: N- u+ F. r, j: V9 X
" w. t* a" @0 ^7 s5 [* T' ~
1 I. e: q, F2 i- m' [9 s$ @( Y0 a; m
1 d- }5 @' S! i. X: ^+ f
) Y0 X& X& e: }. g1 ]) {
关于自由实体的部分结束了。* q% l% R5 c, B" q2 c
3 u( J/ @9 P# X9 @ 8 l/ ]- i% |0 T* {+ @
[比例线]) a- h( @- L( @' a! k
2 _1 F- n- o; L: V% a& L
现在场景看起来貌似差不多了,但角色好像有点太小了,我们通过可以比例线(scale levels)改变角色的缩放效果。比例线在Scene中表示为一条绿线,在最左端标注了比例,例如现在场景里有两条比例线,中间一条70%,底下一条100%,这样角色从底部到中间行走过程中,比例逐渐由100%缩小至70%(在70%线之上时会默认恢复为100%大小),这样就实现了近大远小和不同场景人物比例不同。
9 P. ^! J, X$ L6 U1 }8 ~$ r
B, Q3 F4 r( F2 Q比例线最左端还有一个很扁的小方框,按住小方框并拖动就可以改变比例线的位置,右键点击小方框可以修改属性(properties,可以改变缩放比例和指定位置),或删除(remove)比例线。
4 V5 W- X' z4 l9 o. G. }9 y
% f& Z9 ?1 ]! ]) o. C
' |) W* h3 y& d8 I7 }5 f9 S
5 g e/ v2 y- |( v m4 F& A* S$ b6 z& X& {
; g! U6 {& x) I% H2 K6 A8 q4 m3 P
点击下图中的按钮可以添加比例线。(帮助文档使用的是老版本,新版本中者按钮旁边还有个按钮,可以添加纵向的比例线)
& S) [* o c+ q! A" p6 u
; h0 [* C8 I3 f; z
8 L. V* f" P* A3 A; K6 n E" k
: {, l$ U* [$ K4 U
. q4 s w) [1 a7 G之后把上方的比例线移至地板上端并将比例改为90%,下方的比例线则移至地板最下端并改为160%。
. F* O& F8 b3 h* s
. `& C/ [& {3 Y. j# b+ o( e m- ]/ _+ }
1 P9 B K2 C) q) G
你可能想知道如何设置到正确的比例,最好的方法是使用角色模型(actor placement tool),SceneEdit提供角色模型方便你编辑而不必频繁测试,如下图点击Place actor按钮。" Y3 B5 \5 A* M7 N7 Y$ J
$ h$ x" u3 [8 e5 ]& \ y: H7 v
$ S) ^ {, G8 P* Y
, f$ z/ L+ T5 {6 |# Q. n' H6 L2 Q0 U8 o# q* } q2 D! O' p
" t: R u- [: o0 s8 M
这时会弹出一个窗口让你选择使用哪个角色。在“data\actors\molly” 文件夹中找到molly.actor并载入。这时候你的鼠标就变成了一个角色模型,你可以移动鼠标到任何位置看看效果,这时点击右键角色会改变方向,点击左键会暂时将角色模型放下,以后再需要用时点击Place actor按钮就可以。
) H* y0 t9 X$ t) p
! j; I* H0 E3 [/ P [修饰区域]
- Q6 |5 L8 D! f# z! E: a
5 A# `, [+ e# C4 m; m% v1 v接下来我们可以添加一些小效果,比如当角色站在远处的小角落时让角色变暗一点。
1 p4 P( o" D2 @% v1 c5 S 9 g: j0 I* Z, o& `: p2 }6 w- z2 Y
我们可以添加一些特殊的区域来影响角色的颜色和缩放,这些区域被称为修饰区域(decoration regions)。
8 U1 j9 E* n s/ s+ _2 I) w
- V0 i# L9 k( g" p+ w( Y7 o' p, f在layer列表中选择main,并点击下图的按钮添加一个区域。
$ v7 K4 x5 X( u, L! Z u1 o
" b7 M8 f$ I! H2 M- L" K
* p( M; N- o$ {& k' b/ W5 X: B! Y
- w. @ Y% g4 O# H1 N0 V7 h! p: h
9 b2 L1 C9 m- ?. [( l$ x
将名称改为"shade",并将类型由layout改为Decoration。注意信息栏中的Clolor项,选择一种颜色后,在这个区域内的角色绘制时就会混合这种颜色。为了达到阴影的效果,我们指定为浅灰色。
' g+ u& _! `" a: y2 d0 }0 K* k3 q* p
7 ~! K! B% b& D) o J; i
7 J# u! V# N6 l" D5 |$ v/ r% y* B. L7 ]* P' ]. R
6 Y" X) o9 b. I改变scale项的话角色在区域内的话就会使用这个比例而不是比例线的,选0则不影响。
4 B: J' l* A( b: U* {/ w
- Y- z! s% D8 p6 q' P注意,设定颜色后必须满足以下两个条件才能实现:6 U E" C: }3 E* N' ^6 z0 P. k
1、游戏必须运行在加速模式中,兼容模式下无效
5 x8 M/ A& V! s4 @" q; i2、对象必须将Colorable属性设为真
9 m" g+ D( l$ I. [& j
( I3 @. G' x9 G8 f' o最后将区域移动到合适的位置并调整形状:
0 C1 n' D" Z; u4 l1 p
5 V5 x7 J* {+ g- t2 i. Z3 U
& W5 R$ f0 F7 s ~, E7 N8 }* n8 y. h
8 j2 p O$ j$ Q# M+ U) o6 j
注意:修饰区域影响角色角色的绘制,所以必须将修饰区域设在node列表的末尾。$ w! s+ v: B1 h* R
0 Y! P1 `% Q- a( |6 x4 j, ~, Z
你可以回PM测试一下或使用角色模型看看效果。9 q* ?, @8 M) B& n
( b5 c# K0 P. u; w* U这一章结束了~ |