使用PM打开scene_tut.wpr,在这一步我们将为场景添加更多的东西。) O ~# y' R" |4 A: c
7 Y9 c3 I3 U" v; X# X) L- M场景中的图像元素,都叫做实体(entities),可以理解为布景时用到的道具。在我们的场景中,背景图片就是一个实体(node列表里background前面有个傻脸,就代表这是个实体)。在上一章测试时,你会发现你的角色总是挡着家具,而现实中人走到桌子后面时是会被桌子挡住的。如果你想让某个物体能够遮挡住角色,你必须把它单独的作为一个实体创建出来(所有角色能与之互动的东西都需要作为实体被创建)。(提一句,教程里桌子和椅子都是直接绘制到地板上的,但我感觉实际制作时应该把空地板作为背景,桌子和椅子另外做两张图片,然后把桌椅做两个实体添加到场景里,这样如果以后要调整位置方便得多)
; m/ B/ r5 P* r' c. a! X
9 l# O- {( _! \5 n& N9 s8 i现在我们将为场景添加一个实体“桌子”作为例子。
1 ?( H' R% x0 v% H! C9 o3 B- L- z. \) F1 O
首先我们需要桌子的图片,教程已经在demo里的tutorial\gfx文件夹为你准备好了,使用ProjectMan在文件树为Myscene这个文件夹导入图片desk.bmp(方法见步骤一)。6 s7 Y9 Q$ T( z
8 n# e9 E3 U9 Z: o
在SceneEdit中打开我们的场景,在layer列表中选择main,点击Add entity(就是那个傻脸按钮)并选择Sprite entity。Sprite entity是拥有自己图像的实体,其他类型的实体会在以后讲解。$ p9 ^; G2 f: g% t
2 X. a+ l: v# R6 @7 F# z! N' z( A9 R; h @
5 i% n+ O- m' {' P
现在一个新实体就创建好了。默认名字为new entity,并且在预览窗口里也只是个红框。在node列表里选择这个实体,之后在左下角的信息栏可以修改有关它的信息。在信息栏中把名字(name)改为desk,标题(caption)也可以改为desk(这样在游戏中鼠标移到桌子上的话,就会提示这是个desk)。接下来点击sprite栏后面的按钮(sprite是wme中的基本图像元素),在弹出窗口中找到scene\Myscene文件夹下的的desk.bmp并载入。你会发现桌子在右边的预览窗口出现了。
0 x7 N o% V6 {! i3 g% @! S7 i* ]5 g2 s" R, D
使用鼠标拖动图片与背景的桌子重合,或者你可以在左下角的信息栏的pos栏中输入正确坐标432,327。! |. T/ F5 Q2 E' B0 u& {
6 b4 u7 _ O. q, V4 t! u
也可以使用键盘上的方向键来进行细微的调整,按住SHIFT再使用方向键移动的话每次移动5像素,空格键可以显示/隐藏当前所选实体(也可以由node列表里钩选小方框控制)& K& E1 B; [; l. E$ s' }. C
: v7 O: E' I! ~$ ^2 Y7 j
接下来看一眼你的node列表,应该像图片中这样,如果不是的话,使用node列表上的上下箭头来调整顺序。
0 d: A, H( g& t# I
& p4 @& D+ M- m2 G
# r! d O) w! ?7 L3 j: @: ^
$ S" \9 `' P; b- i: Pnode列表的顺序是非常重要的!游戏引擎根据这个顺序来绘制场景中的东西,最上方的最先绘制。
" O2 b; q& J1 M' Y" N8 c F# `目前的顺序应该是:
/ I4 C# I. r6 W8 e' A% i% a1 N( ?background (entity). m# S1 e/ V' q
desk (entity)" j3 |+ E' Q7 |% E
floor (region)
' J. ]3 J) ?0 r' t$ J" z
3 F3 y5 u3 m, C这样引擎在游戏运行时会这么工作:
' Q/ D, z7 W7 G% ~) x7 e先绘制背景图片7 @. R& T& z7 @
再绘制桌子的的图片
0 Q" _, R2 e# f. c9 G1 n! e; z最后绘制在floor框范围内的角色(这样角色永远显示在桌子和背景之上)
- r, Y) X- f$ E* A(在node列表中有entity和region两类东西,实体entity是实际绘制到场景中的,而区域region只代表一个范围,引擎会绘制处于这个范围中的角色)1 r& S' C' f6 g e! u- F
# w9 y3 O; p& `: d
如果你改变了顺序也就影响它们之间遮盖的效果,比如你把顺序改为:# L. C4 l2 r2 V+ ~! G
background (entity)' v8 ~$ |: @, t5 J/ m! `2 j' T
floor (region)
; d2 ?0 E0 P" Edesk (entity)
) o1 t r& n3 f. L( s9 Y4 [; g) D3 ^. z! A1 M3 f. F
运行时引擎先绘制背景图片
* j" G9 o8 R H1 V再绘制在floor框内的角色
7 l- H- j) n% d8 u" e2 |7 o最后绘制桌子(这样桌子就会遮挡住角色了)' Y' M$ L4 P) \% L' H- l8 h
0 O% s$ Z5 b" L V( l& z+ ?而至于如何做到角色在桌子后方时被遮挡,在前方时则挡住桌子。将在步骤三讲解。 |