使用PM打开scene_tut.wpr,在这一步我们将为场景添加更多的东西。
2 \& x+ p3 U2 o, b
9 X9 n T' {: B1 [5 y- y场景中的图像元素,都叫做实体(entities),可以理解为布景时用到的道具。在我们的场景中,背景图片就是一个实体(node列表里background前面有个傻脸,就代表这是个实体)。在上一章测试时,你会发现你的角色总是挡着家具,而现实中人走到桌子后面时是会被桌子挡住的。如果你想让某个物体能够遮挡住角色,你必须把它单独的作为一个实体创建出来(所有角色能与之互动的东西都需要作为实体被创建)。(提一句,教程里桌子和椅子都是直接绘制到地板上的,但我感觉实际制作时应该把空地板作为背景,桌子和椅子另外做两张图片,然后把桌椅做两个实体添加到场景里,这样如果以后要调整位置方便得多)
9 N+ @& [& a. t. H$ r
7 B3 @) u( D% D. u( c$ L) P现在我们将为场景添加一个实体“桌子”作为例子。' Q: z7 \- P* x5 ~
* k7 ^+ `$ c: s+ n
首先我们需要桌子的图片,教程已经在demo里的tutorial\gfx文件夹为你准备好了,使用ProjectMan在文件树为Myscene这个文件夹导入图片desk.bmp(方法见步骤一)。. s, f2 O# p+ A3 _2 \( G1 { ~8 s
# i* H f9 @0 F* D) [! B. p9 g
在SceneEdit中打开我们的场景,在layer列表中选择main,点击Add entity(就是那个傻脸按钮)并选择Sprite entity。Sprite entity是拥有自己图像的实体,其他类型的实体会在以后讲解。8 ?8 z' w$ E. N3 g
k+ N8 Z; T4 n; e5 |
* I+ t. m' p5 d8 Q, n: ~/ e+ G6 x; u+ M# n/ ?+ R% M/ k; X
现在一个新实体就创建好了。默认名字为new entity,并且在预览窗口里也只是个红框。在node列表里选择这个实体,之后在左下角的信息栏可以修改有关它的信息。在信息栏中把名字(name)改为desk,标题(caption)也可以改为desk(这样在游戏中鼠标移到桌子上的话,就会提示这是个desk)。接下来点击sprite栏后面的按钮(sprite是wme中的基本图像元素),在弹出窗口中找到scene\Myscene文件夹下的的desk.bmp并载入。你会发现桌子在右边的预览窗口出现了。3 ~9 O4 n- z* U
& ]3 i& D% h# S0 H- X. t9 Q使用鼠标拖动图片与背景的桌子重合,或者你可以在左下角的信息栏的pos栏中输入正确坐标432,327。
/ K$ B3 v$ _/ |: W9 W. Q5 `7 H; G
也可以使用键盘上的方向键来进行细微的调整,按住SHIFT再使用方向键移动的话每次移动5像素,空格键可以显示/隐藏当前所选实体(也可以由node列表里钩选小方框控制)7 U" `8 }; R& S+ {+ r& \* P4 `( q
" y: n+ d0 E9 @' k9 l接下来看一眼你的node列表,应该像图片中这样,如果不是的话,使用node列表上的上下箭头来调整顺序。5 e6 p4 @4 r- N& O5 H+ `1 Q; d
/ t9 z! }% Z8 y7 h, C. o- ~: v
8 J0 w+ x2 J& r% c& w8 _
+ D, i; r1 J" T" y1 u: t( Qnode列表的顺序是非常重要的!游戏引擎根据这个顺序来绘制场景中的东西,最上方的最先绘制。
: f/ j; c% R3 H/ c8 x; g6 z: I目前的顺序应该是:
* m- Q' P( o: q7 z# E5 ^) }background (entity)' e* ?7 o; L+ N- G) A' Q2 a
desk (entity)$ p( w0 D( C7 D& l' H% i
floor (region)$ Z' W" }' r; a! Z0 I" h3 y
7 p7 t- R( k& V ~# G/ |+ q* k |
这样引擎在游戏运行时会这么工作:1 h- ^/ j/ Y6 ]' J5 h4 H+ ?
先绘制背景图片
" G7 e, e0 ~" E再绘制桌子的的图片
N7 V. I; r ]* B0 s* M; {最后绘制在floor框范围内的角色(这样角色永远显示在桌子和背景之上)
' t5 H: S5 g N, }(在node列表中有entity和region两类东西,实体entity是实际绘制到场景中的,而区域region只代表一个范围,引擎会绘制处于这个范围中的角色)
: D# N4 p+ {$ Z2 C) g% o4 }# q1 C; m3 F8 y: H: ~6 K( u: ?
如果你改变了顺序也就影响它们之间遮盖的效果,比如你把顺序改为:0 _* C7 D! |9 ^1 H* s$ b. C& [
background (entity)7 L, J5 y) x6 g0 X4 L
floor (region)* A; i; J) b9 [! t! i; w0 n
desk (entity)
: x0 ]/ z' {; A7 D# @# k& A# h! v7 S( x: ]
运行时引擎先绘制背景图片3 i0 A; {( a$ B( ~1 w
再绘制在floor框内的角色
- v |) o- {* z! a* o/ e最后绘制桌子(这样桌子就会遮挡住角色了): ~$ l& S$ l( o2 L- \! J1 F
4 b& U9 g; V( h
而至于如何做到角色在桌子后方时被遮挡,在前方时则挡住桌子。将在步骤三讲解。 |