使用PM打开scene_tut.wpr,在这一步我们将为场景添加更多的东西。* A& S$ u; ?# |8 |
' O/ N/ ~3 X& P3 m# y# _: K场景中的图像元素,都叫做实体(entities),可以理解为布景时用到的道具。在我们的场景中,背景图片就是一个实体(node列表里background前面有个傻脸,就代表这是个实体)。在上一章测试时,你会发现你的角色总是挡着家具,而现实中人走到桌子后面时是会被桌子挡住的。如果你想让某个物体能够遮挡住角色,你必须把它单独的作为一个实体创建出来(所有角色能与之互动的东西都需要作为实体被创建)。(提一句,教程里桌子和椅子都是直接绘制到地板上的,但我感觉实际制作时应该把空地板作为背景,桌子和椅子另外做两张图片,然后把桌椅做两个实体添加到场景里,这样如果以后要调整位置方便得多)
" m" i; U" S" J$ H# u2 r, I
$ Z6 P6 Q7 n$ d5 w0 m& W8 ~4 o; \* [现在我们将为场景添加一个实体“桌子”作为例子。
* c- K6 ~' w+ c' v9 x
- i' ~0 g- H1 O" ]0 U: ~首先我们需要桌子的图片,教程已经在demo里的tutorial\gfx文件夹为你准备好了,使用ProjectMan在文件树为Myscene这个文件夹导入图片desk.bmp(方法见步骤一)。
4 S$ U, Q, v$ x! |- `" O1 g$ D/ g4 e; S& }/ g: O* ]
在SceneEdit中打开我们的场景,在layer列表中选择main,点击Add entity(就是那个傻脸按钮)并选择Sprite entity。Sprite entity是拥有自己图像的实体,其他类型的实体会在以后讲解。4 M; [( Q+ q5 y7 C3 q
, s' F3 r; i0 P- N \* r$ Q; D* E/ C) N, k A& ~4 P. g9 M, s
1 D$ w7 z0 a% k9 n- u9 h0 }
现在一个新实体就创建好了。默认名字为new entity,并且在预览窗口里也只是个红框。在node列表里选择这个实体,之后在左下角的信息栏可以修改有关它的信息。在信息栏中把名字(name)改为desk,标题(caption)也可以改为desk(这样在游戏中鼠标移到桌子上的话,就会提示这是个desk)。接下来点击sprite栏后面的按钮(sprite是wme中的基本图像元素),在弹出窗口中找到scene\Myscene文件夹下的的desk.bmp并载入。你会发现桌子在右边的预览窗口出现了。9 X* U) ^: K1 m" Y" u2 ^" Z$ I
: E5 _' z1 u& Y+ `( u* |8 N u/ M' k使用鼠标拖动图片与背景的桌子重合,或者你可以在左下角的信息栏的pos栏中输入正确坐标432,327。
* ~4 u- `$ ?) q% X+ D4 Q8 _/ L/ |. {4 m2 k
也可以使用键盘上的方向键来进行细微的调整,按住SHIFT再使用方向键移动的话每次移动5像素,空格键可以显示/隐藏当前所选实体(也可以由node列表里钩选小方框控制)2 A1 v/ t% J1 ~" t$ C0 \1 R
' x% S/ L2 n. [2 } ]接下来看一眼你的node列表,应该像图片中这样,如果不是的话,使用node列表上的上下箭头来调整顺序。$ o; ~ S" }8 |7 h
+ }$ ]: B% ^0 v1 r# f3 R( b$ i Z
( O# C3 b3 c) b9 r; l( ]1 N) v
! M6 w) C* \9 ?4 v2 u3 a4 hnode列表的顺序是非常重要的!游戏引擎根据这个顺序来绘制场景中的东西,最上方的最先绘制。4 }2 N& u$ ^8 C+ F4 x, ~& s
目前的顺序应该是:
! v( V1 d; m- O$ _background (entity): j5 g6 Z- e. k- o; F- A
desk (entity), d6 f7 [! p5 x8 \
floor (region)
M3 K8 \# V6 t$ K0 Y8 |7 x* Q8 G: J; I9 U/ a6 v
这样引擎在游戏运行时会这么工作:" a- Z" V& ?7 [7 C1 V, a, r# g
先绘制背景图片
4 p# P; {" g1 A5 U" k& ]: F l再绘制桌子的的图片6 s- G0 |2 J! n
最后绘制在floor框范围内的角色(这样角色永远显示在桌子和背景之上)
8 R. N* E* Q0 Z- z1 f(在node列表中有entity和region两类东西,实体entity是实际绘制到场景中的,而区域region只代表一个范围,引擎会绘制处于这个范围中的角色)
/ ~' Z5 i9 B* w0 w6 B) ]. e5 I
' b# y4 K9 `6 x# I" G如果你改变了顺序也就影响它们之间遮盖的效果,比如你把顺序改为:
, k8 ^$ {7 g/ V+ A; G. g+ R4 pbackground (entity), N+ ` V& e2 K a+ h( W2 _0 P9 g
floor (region) H, W k, |: i4 y" S/ `
desk (entity)/ E! @. E0 |0 S% L9 x
2 o/ \& C6 K* }. O5 F
运行时引擎先绘制背景图片" @# _2 l! @9 `& x
再绘制在floor框内的角色
6 D7 M, F9 T' J6 ?3 N# v. @/ y最后绘制桌子(这样桌子就会遮挡住角色了)
% D A ?. J% [ s; U) W
5 N( ~# P1 ^( @# l5 X) F* N而至于如何做到角色在桌子后方时被遮挡,在前方时则挡住桌子。将在步骤三讲解。 |