使用PM打开scene_tut.wpr,在这一步我们将为场景添加更多的东西。& g `) \+ s% Z& w) T
: s! t9 H4 B! m. x* s8 L场景中的图像元素,都叫做实体(entities),可以理解为布景时用到的道具。在我们的场景中,背景图片就是一个实体(node列表里background前面有个傻脸,就代表这是个实体)。在上一章测试时,你会发现你的角色总是挡着家具,而现实中人走到桌子后面时是会被桌子挡住的。如果你想让某个物体能够遮挡住角色,你必须把它单独的作为一个实体创建出来(所有角色能与之互动的东西都需要作为实体被创建)。(提一句,教程里桌子和椅子都是直接绘制到地板上的,但我感觉实际制作时应该把空地板作为背景,桌子和椅子另外做两张图片,然后把桌椅做两个实体添加到场景里,这样如果以后要调整位置方便得多)7 g$ {4 h1 u1 J! {1 v
# g& _2 p* X% k0 m: B* D
现在我们将为场景添加一个实体“桌子”作为例子。" e! B8 u. U4 V4 q2 M
( Z' E8 b" N) ]) ]1 v
首先我们需要桌子的图片,教程已经在demo里的tutorial\gfx文件夹为你准备好了,使用ProjectMan在文件树为Myscene这个文件夹导入图片desk.bmp(方法见步骤一)。
1 a+ y/ O( i' e
4 D2 ]8 I1 Q* D* ^6 t6 @在SceneEdit中打开我们的场景,在layer列表中选择main,点击Add entity(就是那个傻脸按钮)并选择Sprite entity。Sprite entity是拥有自己图像的实体,其他类型的实体会在以后讲解。
; d. X- K3 {1 w+ Q: y6 @5 K$ q2 V5 n$ V7 f& Y6 o
$ D3 g0 Z) b% b; O7 f9 V' Z1 e0 g) g( k& z; n$ @6 V
现在一个新实体就创建好了。默认名字为new entity,并且在预览窗口里也只是个红框。在node列表里选择这个实体,之后在左下角的信息栏可以修改有关它的信息。在信息栏中把名字(name)改为desk,标题(caption)也可以改为desk(这样在游戏中鼠标移到桌子上的话,就会提示这是个desk)。接下来点击sprite栏后面的按钮(sprite是wme中的基本图像元素),在弹出窗口中找到scene\Myscene文件夹下的的desk.bmp并载入。你会发现桌子在右边的预览窗口出现了。
' h4 \# u) F- @$ y2 A
8 x- H# e( p2 Z. z3 O, h使用鼠标拖动图片与背景的桌子重合,或者你可以在左下角的信息栏的pos栏中输入正确坐标432,327。4 ~5 e+ V3 s4 y& u. B3 o; v$ _& n
7 L* B! i6 O5 j1 D/ a" `
也可以使用键盘上的方向键来进行细微的调整,按住SHIFT再使用方向键移动的话每次移动5像素,空格键可以显示/隐藏当前所选实体(也可以由node列表里钩选小方框控制)- M, f( R) n7 h B7 P
2 q& R7 `4 q+ R接下来看一眼你的node列表,应该像图片中这样,如果不是的话,使用node列表上的上下箭头来调整顺序。
& {/ B' D s- J+ v7 T3 I( E
% Y* O/ l* l S& M0 l; }! g4 P. n* M8 k% x6 o
- F a2 X% l% ~. P' M+ B6 k: u4 onode列表的顺序是非常重要的!游戏引擎根据这个顺序来绘制场景中的东西,最上方的最先绘制。$ c7 g( G: W: |
目前的顺序应该是:4 x* n# R" I2 q+ X0 Q% W7 \
background (entity)" U U: s# |( ?9 o6 i! K8 a4 B. Q
desk (entity)" L M3 s1 ^+ L7 ~& q+ i
floor (region)
2 w( _3 R9 u) p6 Z' E9 P& M% B. f- d% F' ]+ Z' {% j
这样引擎在游戏运行时会这么工作:0 k& J' r' [4 q2 W
先绘制背景图片
9 o. f5 O# K0 l. i' {" [/ ~再绘制桌子的的图片1 p4 F) \4 K. p g" h" K5 k
最后绘制在floor框范围内的角色(这样角色永远显示在桌子和背景之上)
. X/ j& F6 }- T6 n' D% T# H7 ~(在node列表中有entity和region两类东西,实体entity是实际绘制到场景中的,而区域region只代表一个范围,引擎会绘制处于这个范围中的角色)
: ]* I4 O0 J i# l6 Z- o* h% E+ G
如果你改变了顺序也就影响它们之间遮盖的效果,比如你把顺序改为:' L/ \$ x5 a& l9 L {1 m$ _
background (entity)( K+ I" E* G7 |* ] V4 X( B
floor (region)
7 s+ B; C- }6 p, E; }" q+ x! xdesk (entity)
$ v& j; a) k H+ D1 e
: P1 x5 x' S, U) G2 y4 s" k运行时引擎先绘制背景图片% o0 |: m1 H0 I3 ^1 g
再绘制在floor框内的角色+ R1 }2 k: [0 [1 t3 s. f" u) m( _
最后绘制桌子(这样桌子就会遮挡住角色了)( I, W) z$ D e4 U L
; J9 W$ R7 c# v' Y
而至于如何做到角色在桌子后方时被遮挡,在前方时则挡住桌子。将在步骤三讲解。 |