使用PM打开scene_tut.wpr,在这一步我们将为场景添加更多的东西。
' g, k# [$ V1 B! Q/ |% @$ Q& n9 v6 H, D8 t
场景中的图像元素,都叫做实体(entities),可以理解为布景时用到的道具。在我们的场景中,背景图片就是一个实体(node列表里background前面有个傻脸,就代表这是个实体)。在上一章测试时,你会发现你的角色总是挡着家具,而现实中人走到桌子后面时是会被桌子挡住的。如果你想让某个物体能够遮挡住角色,你必须把它单独的作为一个实体创建出来(所有角色能与之互动的东西都需要作为实体被创建)。(提一句,教程里桌子和椅子都是直接绘制到地板上的,但我感觉实际制作时应该把空地板作为背景,桌子和椅子另外做两张图片,然后把桌椅做两个实体添加到场景里,这样如果以后要调整位置方便得多)
3 i$ Y3 F, T- [& `: b
# m" c) P) W4 M3 o现在我们将为场景添加一个实体“桌子”作为例子。
/ d: O7 g; d9 K: ^8 r, U t* ?+ j% l0 _% H4 L9 t5 c' }" Z( l' ^' U& ]
首先我们需要桌子的图片,教程已经在demo里的tutorial\gfx文件夹为你准备好了,使用ProjectMan在文件树为Myscene这个文件夹导入图片desk.bmp(方法见步骤一)。1 j# G# `, h7 ?. M8 x! U
) r. Q" j7 {3 e( X; O S M
在SceneEdit中打开我们的场景,在layer列表中选择main,点击Add entity(就是那个傻脸按钮)并选择Sprite entity。Sprite entity是拥有自己图像的实体,其他类型的实体会在以后讲解。
3 _- T3 ~% A8 X
; n! n1 ?( i8 ? F7 X/ }4 m [ 5 ~. F. Y7 {4 z; c
5 U) j5 s& f6 u2 a7 Y- G现在一个新实体就创建好了。默认名字为new entity,并且在预览窗口里也只是个红框。在node列表里选择这个实体,之后在左下角的信息栏可以修改有关它的信息。在信息栏中把名字(name)改为desk,标题(caption)也可以改为desk(这样在游戏中鼠标移到桌子上的话,就会提示这是个desk)。接下来点击sprite栏后面的按钮(sprite是wme中的基本图像元素),在弹出窗口中找到scene\Myscene文件夹下的的desk.bmp并载入。你会发现桌子在右边的预览窗口出现了。
' o. H" t$ {5 _. I+ M0 T( s3 ?& H, ~+ v( \
使用鼠标拖动图片与背景的桌子重合,或者你可以在左下角的信息栏的pos栏中输入正确坐标432,327。
! q9 f+ A' M @2 w& Y% q. Y& ~
0 B9 ^6 s- @5 x: c" U5 A4 Y也可以使用键盘上的方向键来进行细微的调整,按住SHIFT再使用方向键移动的话每次移动5像素,空格键可以显示/隐藏当前所选实体(也可以由node列表里钩选小方框控制)6 B* n! y6 E0 r2 K7 d P4 P/ L
; u6 [# O( y' C N
接下来看一眼你的node列表,应该像图片中这样,如果不是的话,使用node列表上的上下箭头来调整顺序。9 d0 |% ?& b' b# d) P+ u6 c
/ ^$ j/ I# ]5 i: W
2 V* `$ b8 k: b; t' H8 o+ f0 {& P
) y* N! |) g! L$ `0 [! B( A7 a3 F6 |! znode列表的顺序是非常重要的!游戏引擎根据这个顺序来绘制场景中的东西,最上方的最先绘制。" X8 e" N) ~" C) \0 e# F$ A
目前的顺序应该是:
' L0 `# R9 y8 _$ [9 Ybackground (entity)8 q+ q" g& O7 ~3 l
desk (entity)! Z6 J- k% y( I$ r( t9 x, J
floor (region)' q* P7 [) f$ z/ B+ _+ `
( a0 S3 e; j7 y
这样引擎在游戏运行时会这么工作:
2 p) c! J/ X1 G, X' F' h* M1 W先绘制背景图片
4 G3 p% R- W* V! c再绘制桌子的的图片8 D+ ~$ t& T5 d+ H/ F, Q
最后绘制在floor框范围内的角色(这样角色永远显示在桌子和背景之上)$ l/ ^! q& }. K# M9 Z: D
(在node列表中有entity和region两类东西,实体entity是实际绘制到场景中的,而区域region只代表一个范围,引擎会绘制处于这个范围中的角色)
# P! l6 b3 l! ^8 ?) d, x* w q) [+ ]0 y+ M- S& d: J4 g, y2 v: w
如果你改变了顺序也就影响它们之间遮盖的效果,比如你把顺序改为:0 D; Z0 v- {0 U
background (entity)/ x+ O- e5 a; o: q
floor (region)
* u9 V/ J) ?1 i: [0 Z3 B- Sdesk (entity)
0 S% [; U1 c$ w0 S- ~2 w& s4 j( P9 v
运行时引擎先绘制背景图片
/ A" Y& n y( S( r6 R, O; W8 s再绘制在floor框内的角色
( F) ?6 {1 I. T' J/ t最后绘制桌子(这样桌子就会遮挡住角色了)- U3 \/ l* }5 {, j( U: U
k, } F2 V$ W; X而至于如何做到角色在桌子后方时被遮挡,在前方时则挡住桌子。将在步骤三讲解。 |