使用PM打开scene_tut.wpr,在这一步我们将为场景添加更多的东西。$ D* E1 L3 k" P7 v4 T9 Q7 z6 x
. u0 W0 f; I1 i% }& e1 `0 r
场景中的图像元素,都叫做实体(entities),可以理解为布景时用到的道具。在我们的场景中,背景图片就是一个实体(node列表里background前面有个傻脸,就代表这是个实体)。在上一章测试时,你会发现你的角色总是挡着家具,而现实中人走到桌子后面时是会被桌子挡住的。如果你想让某个物体能够遮挡住角色,你必须把它单独的作为一个实体创建出来(所有角色能与之互动的东西都需要作为实体被创建)。(提一句,教程里桌子和椅子都是直接绘制到地板上的,但我感觉实际制作时应该把空地板作为背景,桌子和椅子另外做两张图片,然后把桌椅做两个实体添加到场景里,这样如果以后要调整位置方便得多)
) |3 g+ F" _8 D+ s; k- a/ ~( q3 {& p! Z* b
现在我们将为场景添加一个实体“桌子”作为例子。: j+ e; Y: c: C _ _
; Q. g& e; o' f+ S0 X首先我们需要桌子的图片,教程已经在demo里的tutorial\gfx文件夹为你准备好了,使用ProjectMan在文件树为Myscene这个文件夹导入图片desk.bmp(方法见步骤一)。5 x+ K& ]1 J# g7 s
* ^% w5 \* S; |3 R9 h* E: s* V在SceneEdit中打开我们的场景,在layer列表中选择main,点击Add entity(就是那个傻脸按钮)并选择Sprite entity。Sprite entity是拥有自己图像的实体,其他类型的实体会在以后讲解。- J* v. ]: E0 U8 }6 ~
: ~& ~: I) U/ T2 M6 D
, Y* |, [1 p1 H F; A
' {/ ?. k5 }, R$ }$ L" o现在一个新实体就创建好了。默认名字为new entity,并且在预览窗口里也只是个红框。在node列表里选择这个实体,之后在左下角的信息栏可以修改有关它的信息。在信息栏中把名字(name)改为desk,标题(caption)也可以改为desk(这样在游戏中鼠标移到桌子上的话,就会提示这是个desk)。接下来点击sprite栏后面的按钮(sprite是wme中的基本图像元素),在弹出窗口中找到scene\Myscene文件夹下的的desk.bmp并载入。你会发现桌子在右边的预览窗口出现了。) k6 }' A! M$ e# Q2 N: I4 Q0 }
* Q* F ?, J- g8 V
使用鼠标拖动图片与背景的桌子重合,或者你可以在左下角的信息栏的pos栏中输入正确坐标432,327。
4 h. x/ U7 w+ v* d N, I3 b* d
! x# C! ?1 u. W% C& S也可以使用键盘上的方向键来进行细微的调整,按住SHIFT再使用方向键移动的话每次移动5像素,空格键可以显示/隐藏当前所选实体(也可以由node列表里钩选小方框控制)
3 y# Z; g0 G5 O" g' {( k( I/ h8 ^2 M7 J# M
接下来看一眼你的node列表,应该像图片中这样,如果不是的话,使用node列表上的上下箭头来调整顺序。
! l1 E# y+ q ?4 u" }) a. T5 {( e
( y+ q+ e. L/ Z/ t$ G$ M( j- Q' h- d* K0 O9 A# k/ z z/ R
node列表的顺序是非常重要的!游戏引擎根据这个顺序来绘制场景中的东西,最上方的最先绘制。
) v& g7 \* F0 R! r! y2 G& J目前的顺序应该是:! @5 N- r; D H! v* S1 E
background (entity)
/ I2 Z! q4 d+ d, j& r) ~desk (entity)* B {4 j6 h# N( W* U
floor (region): P# a; y3 W2 z) V; J! I1 p' C
6 T; Q# w9 U; ^
这样引擎在游戏运行时会这么工作:/ J E) t/ g0 q! K- _* V; E
先绘制背景图片9 S! C1 b) L0 {9 ?- z! ~
再绘制桌子的的图片1 W4 r3 u9 g" T i3 _2 y
最后绘制在floor框范围内的角色(这样角色永远显示在桌子和背景之上)4 f; A! R; C0 D" @2 y: K/ u
(在node列表中有entity和region两类东西,实体entity是实际绘制到场景中的,而区域region只代表一个范围,引擎会绘制处于这个范围中的角色), ?# M( C' t4 `
: C+ I+ U8 B7 L q
如果你改变了顺序也就影响它们之间遮盖的效果,比如你把顺序改为:/ |5 N- i; n' |' I& k4 h+ `
background (entity) E) S9 j7 F# }4 J6 _; C/ A5 m
floor (region)' U& m4 h3 J) `7 K. l0 b l# x5 }
desk (entity)( @& z/ Y9 ~; N) R- W* ~. d; ^
" z$ ~: V& b- I4 k$ c% Q) i
运行时引擎先绘制背景图片
* w) Y2 n; |3 }( B! s& f& I( |8 V' f- P再绘制在floor框内的角色
0 Z. v$ f6 D% a7 e$ _; W( |最后绘制桌子(这样桌子就会遮挡住角色了)
# T/ j* `4 I& u- f3 @4 K
! ~- p- C$ n# U8 j7 c而至于如何做到角色在桌子后方时被遮挡,在前方时则挡住桌子。将在步骤三讲解。 |