再发一篇,争取明天把9个步骤发完。% c( U6 t& D% N2 V& s1 M% \2 t. U
1 ]- h7 ~( i7 s+ R' @这一章将完成场景的粗略设计,在SceneEdit打开MyScene.scene。
. }2 F `. [5 L9 X7 p% X . C: [* ^/ [3 J' y3 `" K( Z
[自由实体]
+ [& s5 m& \0 E# t+ \' H+ C . V; q( k' W6 c5 H( ]6 N0 M
现在场景中的椅子仍然看起来像是画在地板上一样。之前我们使用创建desk实体和behind_desk区域这种方法实现了桌子的遮挡效果。这种方法是非常灵活的,对于大型物体和无规则形状的物体尤其有用。但对于小一点的东西我们可以使用更简单的方法:将它们创建为自由实体(free entities,希望有人提供更好的翻译- -)。接下来以椅子为例。
# A) j5 z0 ?) w. y A3 n0 R # k5 ?' O) W d6 _- P+ R) K4 u. S/ |
什么是自由实体?之前我们所使用的常规实体:比如背景和桌子,它们在绘制时是按照场景布局(即node列表中的顺序)来绘制的。而自由实体和角色一样,绘制顺序是由它们所处的位置决定的(换句话说,由它们处于哪个区域里决定。这样看来场景中的npc就应该作为自由实体)。接下来具体讲解。
9 N7 n% q% K( A w+ N' N5 Y 6 H' K& K2 _/ w$ N$ ~: @
首先,在ProjectMan中为Myscene文件夹导入椅子的图片,在“data\tutorial\gfx”选择chair.bmp并导入。
- n" B7 p5 C. R0 Y; c% S$ p" N" S* E 1 f" D# K' b, g+ \+ u7 ^3 m: y
: b( U' A5 N+ g8 C; L# z) {返回SceneEdit。在layer列表中选择Free entities项,下面node列表会显示当前所有的自由实体,现在还是空的。点击Add entity并选择Add sprite entity。一个“new entity”就创建好了。将名称改为chair,标题也可以改为chair。
' G1 [, S, ]7 k% S, p% A7 L. H) i& s5 o
* T% K' x# d6 t/ F, g8 e' l, f 0 s \5 F6 a m! o i3 [. v4 T# W
, X1 W& m3 v/ Z- Y+ H9 }# s. r
接下来为实体指定图像。点击sprite栏后面的“...”按钮选择之前导入的chair.bmp。将实体chair移动到场景中的位置:# G8 b1 P8 m( x
! H8 ~! _& h" \
3 b; o q/ [5 y6 ? E9 z" j6 v
, Q; R& e: t, S3 c& y) ` & g3 p" v# T* ?
$ n5 _2 z% ~' T5 F保存并测试一下。你会发现角色总是在椅子之上,原因是当一个区域内存在多个对象时(例如floor区域内存在角色和椅子两个对象),引擎按它们的纵坐标(即Y轴坐标)决定绘制顺序。角色的坐标已经被设定为由她的脚所站的位置决定了,但是椅子的坐标默认由图片左上角坐标决定(这样当角色与椅子重合时角色纵坐标总在椅子之下,引擎就总是先绘制椅子,再绘制角色了)。我们要做的就是让椅子的坐标也由椅子脚决定,方法是使用一个sprite而不是简单的BMP图像作为chair实体的图象。sprite在wme可以被视为包含了更多信息的图象,其中一项附加的信息就是焦点(hot spot),焦点可以指定sprite的基准点,实体所处的坐标由基准点决定。我们要做的就是将热点设在椅子脚上。5 R5 E* {% Q5 Y* n% j7 {5 x
) y; w+ c, q; K# h3 e; N首先,为chair实体创建一个sprite。返回PM,右键点击Myscene文件夹并选择“Add->Add sprite…”命令。在弹出的模版选择窗口中,选择Empty sprite模版,并将名称改为chair。 0 J2 N, m G2 o& Y( j- L* W3 @
5 e, }- t" J" p+ D" n" h0 d
2 O7 [# `$ ~1 b: m
& V( B* y7 Q1 o$ M c a![]()
. I t) T W2 [9 ^, ]+ T 6 n2 ?# }4 c; }9 a1 v7 X$ l
在MyScene文件夹中一个名为chair.sprite的新sprite创建好了。双击chair.sprite后PM会自动调用SpriteEdit工具帮助你编辑。现在这个sprite是空的,我们首先要添加一个帧(frame)来放椅子的图片(添加多个帧并设定一些信息后就是动画了)。点击Add frame(s)按钮并选择chair.bmp文件. G9 y& T6 u y: o
' ?# Q) z9 Q+ S7 _& r5 K& b1 _, d
9 Z/ }, y0 i0 Z; f3 R- O5 B$ x+ m3 z3 O0 l3 \) j+ F
% y/ ?6 Z; e0 k! \, N6 l3 X$ n
( E2 c3 j4 \% {
接下来需要改变焦点的位置。有两种方法:一是在右边的预览窗口里拖拽图片使焦点(就是那个红色十字)移动到椅子脚的位置,二是在左下角的信息栏中找到hot spot一栏填写坐标135,174。: u: Q1 }% m& p5 n( e- l
; ?: p6 \9 M! _% H# p: s ) V* T. _ g6 w8 ?4 K
, Y; T, S6 l4 A$ ^% q8 K4 Q
3 h" @( p4 n! X- d8 j
$ T: n# E6 @; P8 f' S: g/ I ) `1 u t$ T; O" r5 W# ?4 D! U; W
保存并返回SceneEdit。选择chair并更改chair的图象为新创建的chair.sprite文件。你会发现椅子的图象移动了,这是因为我们改变了图像的基准点,移动图像到正确位置。保存并测试游戏。. p+ V5 @1 v; m0 i
8 J" l1 y! @" f* l' s) a
效果应该如图所示。
) _+ Y+ }& [. ~
1 F( y/ }4 j- h$ t9 L+ _* E! e, s: y4 U4 G2 z' f) V, u
f3 p. i" Q$ X8 c0 {
![]() 8 v8 {* R: o( a5 G o2 U1 J* j0 _
+ ^( A5 C( f6 L# c% E0 @6 n: F
最后要做的就在椅子下增添一块障碍区域防止角色横穿,还有设几个路径点。( J m( M2 [% N- ~1 O i0 _& v0 t
$ J4 y+ U0 E* p" a" ?9 i
方法见步骤4和5,最后效果如下图:
) N8 n% T& W7 o# o4 s& @7 q% [
" B6 O }# }; M0 x9 W- s. |
' p& E% [6 B0 ^" ] d8 L! i: w6 b) [8 f* M5 s2 W: c
* q: [8 b# g+ [" D; R4 |( g, U- Y
% D, L% d. V% A$ Q. b2 m) H N. |' f! g
关于自由实体的部分结束了。9 t* c1 M4 Q' l$ T
# u7 W# F. t o1 c& D
; e% i# G& H$ M' T* M7 K& X
[比例线]; Q2 O2 {& R: X( c: z
% e. D: w" P2 N7 h9 E
现在场景看起来貌似差不多了,但角色好像有点太小了,我们通过可以比例线(scale levels)改变角色的缩放效果。比例线在Scene中表示为一条绿线,在最左端标注了比例,例如现在场景里有两条比例线,中间一条70%,底下一条100%,这样角色从底部到中间行走过程中,比例逐渐由100%缩小至70%(在70%线之上时会默认恢复为100%大小),这样就实现了近大远小和不同场景人物比例不同。
3 j) ^% @ z% [( ~6 D$ u" |, M 3 b: h0 y; D2 k6 M
比例线最左端还有一个很扁的小方框,按住小方框并拖动就可以改变比例线的位置,右键点击小方框可以修改属性(properties,可以改变缩放比例和指定位置),或删除(remove)比例线。/ S" x2 L6 S; m/ V
: r. O4 s/ I$ N, {* e1 T1 @/ c% N
* N' v" }! u) {* O; G' ?5 U5 b7 o
, n( f& d3 n+ R- P2 k( ~- g" h
% w2 ?) a0 F; v( H. f1 r' c3 [
点击下图中的按钮可以添加比例线。(帮助文档使用的是老版本,新版本中者按钮旁边还有个按钮,可以添加纵向的比例线)
) [. V1 f) X1 V) h5 B% N3 }9 D0 F) q! g$ c0 b7 k4 U
( o8 j! |- w7 l
![]()
9 T# E+ _ c4 h- p h, C . z' @( h6 x: W; ^; I7 L5 S9 i
之后把上方的比例线移至地板上端并将比例改为90%,下方的比例线则移至地板最下端并改为160%。% {6 P/ Y( J) f" p3 v: N2 A
: [8 M3 C" W* F8 p* W9 ^ . m( H. e/ y8 f9 m6 Q
, r& ]( { B; c% d
你可能想知道如何设置到正确的比例,最好的方法是使用角色模型(actor placement tool),SceneEdit提供角色模型方便你编辑而不必频繁测试,如下图点击Place actor按钮。3 Q7 b$ @& h) U7 z# X
; T0 b" x5 O0 x
. f+ ~1 K' C! g" R# z6 |, Q" R0 B! e& n5 T1 O" C, ^
![]()
) {3 \/ o( Q8 @+ l" R+ W, M
, U. _& A- |8 _这时会弹出一个窗口让你选择使用哪个角色。在“data\actors\molly” 文件夹中找到molly.actor并载入。这时候你的鼠标就变成了一个角色模型,你可以移动鼠标到任何位置看看效果,这时点击右键角色会改变方向,点击左键会暂时将角色模型放下,以后再需要用时点击Place actor按钮就可以。8 V' K, v: q2 Y# g
/ {6 J3 B6 c9 E' d4 H2 u. O
[修饰区域]
+ q3 @9 m, b' ?/ \2 | . u4 [2 m' b- i- y
接下来我们可以添加一些小效果,比如当角色站在远处的小角落时让角色变暗一点。* }& Y# S5 \3 K" g0 H8 S
/ Z6 `- x, K# |* Y我们可以添加一些特殊的区域来影响角色的颜色和缩放,这些区域被称为修饰区域(decoration regions)。. U) n6 A/ w" e* O9 ?) K
J: d/ e% w7 E
在layer列表中选择main,并点击下图的按钮添加一个区域。
( I( |9 Y+ `: C; `% l" c4 a. r$ Q/ B, O" f8 L' ?/ K' \- S& n
; p( q) \, J8 m
8 Q5 b# _! |; m) j % o1 b( N/ G- q7 X" f$ _ e
3 \! p1 W+ B' ~" C7 j- l) |
将名称改为"shade",并将类型由layout改为Decoration。注意信息栏中的Clolor项,选择一种颜色后,在这个区域内的角色绘制时就会混合这种颜色。为了达到阴影的效果,我们指定为浅灰色。. y% y# [2 p/ \, e4 j0 X
' o4 f2 J, f9 o2 V* {( k
! f5 L {% q% j8 U1 ]2 S" ^! g ! ^# X2 \2 `9 @8 ~5 y o+ h1 T
( W/ c( m9 ^! G$ T# } p, ~! x. J/ k9 O改变scale项的话角色在区域内的话就会使用这个比例而不是比例线的,选0则不影响。" [- Q+ }, h$ a0 d4 C
/ C8 T; ]5 m9 S7 q h+ H注意,设定颜色后必须满足以下两个条件才能实现:! j2 n; a V) j$ R
1、游戏必须运行在加速模式中,兼容模式下无效2 R- m f% V- S& V- X& Q
2、对象必须将Colorable属性设为真5 g2 n3 O! n) @# M1 Z
8 N: C, d/ i. E$ W最后将区域移动到合适的位置并调整形状:) D; O: I3 w3 v |
) [* b" z8 R% d1 O ; R/ j! C. {: y3 d& d# z9 V ^; P
6 O/ Z- l$ E( o/ ] I+ f* A5 h3 H0 V& l* F
注意:修饰区域影响角色角色的绘制,所以必须将修饰区域设在node列表的末尾。
* p% I7 O: K; |( X- ]% s% P
9 @0 ^& ^7 C5 A2 r+ w. G6 [& j% Z你可以回PM测试一下或使用角色模型看看效果。: f1 Q% p0 K0 N+ b! b* V
0 v1 g) E& ?2 z$ r+ {9 M; {这一章结束了~ |