使用PM打开scene_tut.wpr,在这一步我们将为场景添加更多的东西。
4 a8 p. v- L5 d& V0 w5 G4 s+ r7 o8 u1 X& v+ m- p' y$ O
场景中的图像元素,都叫做实体(entities),可以理解为布景时用到的道具。在我们的场景中,背景图片就是一个实体(node列表里background前面有个傻脸,就代表这是个实体)。在上一章测试时,你会发现你的角色总是挡着家具,而现实中人走到桌子后面时是会被桌子挡住的。如果你想让某个物体能够遮挡住角色,你必须把它单独的作为一个实体创建出来(所有角色能与之互动的东西都需要作为实体被创建)。(提一句,教程里桌子和椅子都是直接绘制到地板上的,但我感觉实际制作时应该把空地板作为背景,桌子和椅子另外做两张图片,然后把桌椅做两个实体添加到场景里,这样如果以后要调整位置方便得多)# E# _2 R ~8 P, O# { D
6 {5 z8 L3 Y/ t现在我们将为场景添加一个实体“桌子”作为例子。& @ w1 h" O$ M2 y2 h9 I: S# n9 S4 ]
# [6 v) M. w# C+ ]/ [6 [
首先我们需要桌子的图片,教程已经在demo里的tutorial\gfx文件夹为你准备好了,使用ProjectMan在文件树为Myscene这个文件夹导入图片desk.bmp(方法见步骤一)。' X4 M1 w1 y5 o% j+ O+ V
4 D# j& A( Y) ~& V
在SceneEdit中打开我们的场景,在layer列表中选择main,点击Add entity(就是那个傻脸按钮)并选择Sprite entity。Sprite entity是拥有自己图像的实体,其他类型的实体会在以后讲解。- }2 [0 c* i+ _' p& U" w9 D$ j/ h
& E5 Y8 Z$ j+ r: P, D/ c% `- P ; T- r$ l- N3 D. X" ]- Z
8 X! P9 c! ?+ V. }! E现在一个新实体就创建好了。默认名字为new entity,并且在预览窗口里也只是个红框。在node列表里选择这个实体,之后在左下角的信息栏可以修改有关它的信息。在信息栏中把名字(name)改为desk,标题(caption)也可以改为desk(这样在游戏中鼠标移到桌子上的话,就会提示这是个desk)。接下来点击sprite栏后面的按钮(sprite是wme中的基本图像元素),在弹出窗口中找到scene\Myscene文件夹下的的desk.bmp并载入。你会发现桌子在右边的预览窗口出现了。
# o A9 S) Y' E# s
% P: Z9 Z) M+ b+ M6 H4 z6 A! i' u$ r使用鼠标拖动图片与背景的桌子重合,或者你可以在左下角的信息栏的pos栏中输入正确坐标432,327。
, U- `8 {: C# {$ l6 ^ b
1 T( W! b, a1 e6 R' e( c也可以使用键盘上的方向键来进行细微的调整,按住SHIFT再使用方向键移动的话每次移动5像素,空格键可以显示/隐藏当前所选实体(也可以由node列表里钩选小方框控制)0 p& _: v3 t2 \* ?5 z; @# f( y4 @
- b; ?" y) s+ p1 K- m. h
接下来看一眼你的node列表,应该像图片中这样,如果不是的话,使用node列表上的上下箭头来调整顺序。
' f) \, t. p6 R1 e' R4 G
. D& {# y9 K) K![]()
$ o" c2 |& G2 `3 M
8 ~) U; R: c& f' y' z5 Jnode列表的顺序是非常重要的!游戏引擎根据这个顺序来绘制场景中的东西,最上方的最先绘制。7 \9 E' e9 t+ G4 A6 `" Q2 b
目前的顺序应该是:
6 V; i m. B8 J% u: ?0 u: cbackground (entity). |) z q2 l. h: c" Y. O0 C
desk (entity)
; D/ R9 [0 B- ` Q- X( R8 I$ Xfloor (region)+ {; F& E% R$ U% j, k
9 m# h, r" h& C' m l
这样引擎在游戏运行时会这么工作:
, j" r# L, Q! M( A1 i: G' X先绘制背景图片( M: e# h2 f2 R
再绘制桌子的的图片
$ A% U- S( @4 a6 X最后绘制在floor框范围内的角色(这样角色永远显示在桌子和背景之上)# T$ P; y6 k2 c' c K& Q
(在node列表中有entity和region两类东西,实体entity是实际绘制到场景中的,而区域region只代表一个范围,引擎会绘制处于这个范围中的角色)1 L; L1 e) D/ Y8 {
& {/ [* M0 \2 g; M5 R9 d
如果你改变了顺序也就影响它们之间遮盖的效果,比如你把顺序改为:
. t5 S1 k' V- {) w5 N4 G7 ybackground (entity)
0 M$ z5 a+ C' o% M% z2 l2 ^floor (region)8 g% N! h5 `0 m, t
desk (entity)
- S; d: P/ J0 ]6 F' X6 w
" ~0 D3 Q8 y( C1 ^1 {运行时引擎先绘制背景图片
7 k) ?' u1 j$ r" w& |# @" ^) L3 W再绘制在floor框内的角色
0 F! m \& t9 @* {最后绘制桌子(这样桌子就会遮挡住角色了); V& l& F; p2 W4 s1 m
$ \' M9 N) N* |- H* d3 R$ Z而至于如何做到角色在桌子后方时被遮挡,在前方时则挡住桌子。将在步骤三讲解。 |