冒险解谜游戏中文网 ChinaAVG

标题: wintermute学习笔记[3]--搭建场景步骤二:场景中的实体 [打印本页]

作者: clockworkman    时间: 2010-9-17 11:44
标题: wintermute学习笔记[3]--搭建场景步骤二:场景中的实体
使用PM打开scene_tut.wpr,在这一步我们将为场景添加更多的东西。7 ]* w, x1 U. Q) A2 ^% \
& n5 F- U8 {$ k6 N7 k- u
场景中的图像元素,都叫做实体(entities),可以理解为布景时用到的道具。在我们的场景中,背景图片就是一个实体(node列表里background前面有个傻脸,就代表这是个实体)。在上一章测试时,你会发现你的角色总是挡着家具,而现实中人走到桌子后面时是会被桌子挡住的。如果你想让某个物体能够遮挡住角色,你必须把它单独的作为一个实体创建出来(所有角色能与之互动的东西都需要作为实体被创建)。(提一句,教程里桌子和椅子都是直接绘制到地板上的,但我感觉实际制作时应该把空地板作为背景,桌子和椅子另外做两张图片,然后把桌椅做两个实体添加到场景里,这样如果以后要调整位置方便得多)4 m4 F, n' G! O) x

' F1 c2 F/ N3 v. A, A现在我们将为场景添加一个实体“桌子”作为例子。
/ T5 p0 }  ]. B: y- G  h
( y. m, p: i3 ?: m- U; E首先我们需要桌子的图片,教程已经在demo里的tutorial\gfx文件夹为你准备好了,使用ProjectMan在文件树为Myscene这个文件夹导入图片desk.bmp(方法见步骤一)。
* F: I2 g" e: |  A
# d. x1 s, n. |7 f8 p3 u; J9 v在SceneEdit中打开我们的场景,在layer列表中选择main,点击Add entity(就是那个傻脸按钮)并选择Sprite entity。Sprite entity是拥有自己图像的实体,其他类型的实体会在以后讲解。
: A5 S; E+ P+ D5 R6 u( ^+ f6 |. Q/ h* u4 h
" V0 }/ Q9 S( {4 `8 y$ ?

( y* t+ p2 _& d6 A. ]5 ~现在一个新实体就创建好了。默认名字为new entity,并且在预览窗口里也只是个红框。在node列表里选择这个实体,之后在左下角的信息栏可以修改有关它的信息。在信息栏中把名字(name)改为desk,标题(caption)也可以改为desk(这样在游戏中鼠标移到桌子上的话,就会提示这是个desk)。接下来点击sprite栏后面的按钮(sprite是wme中的基本图像元素),在弹出窗口中找到scene\Myscene文件夹下的的desk.bmp并载入。你会发现桌子在右边的预览窗口出现了。
- G! d1 n- |; U9 j- x7 W& i9 E1 p* P2 e3 K
使用鼠标拖动图片与背景的桌子重合,或者你可以在左下角的信息栏的pos栏中输入正确坐标432,327。9 t& S7 Y6 J8 J; `  t4 {' B# b

/ R0 q1 U; V. X$ B) R+ R( d/ ]* O也可以使用键盘上的方向键来进行细微的调整,按住SHIFT再使用方向键移动的话每次移动5像素,空格键可以显示/隐藏当前所选实体(也可以由node列表里钩选小方框控制)
' Q# \8 |. f1 i: u! B5 ^/ ~2 N0 t; q. m) B6 l
接下来看一眼你的node列表,应该像图片中这样,如果不是的话,使用node列表上的上下箭头来调整顺序。/ R, \) S- |' Y1 p7 U" U$ d) N
! `' h2 T( i. n5 c$ Z1 I. u
1 H7 p: `7 |8 ~8 U

9 X8 ~' M# l. V5 W) ~# Vnode列表的顺序是非常重要的!游戏引擎根据这个顺序来绘制场景中的东西,最上方的最先绘制。
, @! W) H0 q9 i& p目前的顺序应该是:% ?) l9 s: n8 @. r6 c6 [0 @, B
background (entity)
0 a. W6 ]) x, P' F% Edesk (entity). x1 E- A: ^3 ~' W8 E9 }" E
floor (region)
$ [  r; h( b) r0 Z5 Q9 a( B7 [1 f2 u0 e% Q" D% m3 t
这样引擎在游戏运行时会这么工作:* b  ~5 ^1 a* ]- s
先绘制背景图片2 P5 w7 A5 E, {/ J& w% c! r
再绘制桌子的的图片- C# o6 V* k2 m! E: u* C- V8 J7 v  O1 L
最后绘制在floor框范围内的角色(这样角色永远显示在桌子和背景之上)2 r3 M4 a3 ^; b; A- e; Q
(在node列表中有entity和region两类东西,实体entity是实际绘制到场景中的,而区域region只代表一个范围,引擎会绘制处于这个范围中的角色)
! [& b8 e1 S- h6 N: t$ p; U/ x) v5 B# Z
如果你改变了顺序也就影响它们之间遮盖的效果,比如你把顺序改为:; [# w( b# z4 f* n) k4 h( j' a
background (entity)- b4 z6 s0 M1 L7 l/ C
floor (region)- t7 U0 x4 c6 M9 P
desk (entity)/ X! ^# G% a. K. G* ^
! O) O" ~9 E  m2 V) A. i
运行时引擎先绘制背景图片
7 Z& r( X1 z7 e; U& @再绘制在floor框内的角色# P6 p: b7 ^, r' f
最后绘制桌子(这样桌子就会遮挡住角色了)  N. p9 ^. d" t$ ]
2 A+ z# _' V" L
而至于如何做到角色在桌子后方时被遮挡,在前方时则挡住桌子。将在步骤三讲解。




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://www.chinaavg.com/) Powered by Discuz! X3.2