两章内容比较少,合在一起。8 \, ?7 U- ~8 A9 [
! [' r( f+ u! _" k2 a: f9 e3 U2 l! V- Q$ M0 r
[层]
% Z# C. K6 }( F' ~! i* y& X' }" z4 b @% J' f- z
这一章我们将实现多层卷轴(原文parallax scrolling貌似是平行卷轴,个人认为多层卷轴更贴切)的效果,就像你坐车时看窗外,近处的树和远处的山川向后退的速度是不一样的,wme可以通过添加层实现场景分不同部分卷动的效果。在步骤一中我们知道如果场景所用图片尺寸大于游戏窗口,场景就会在必要时卷动,并且场景越大,卷动速度越快,假设你有三个层,分别存放三张场景图片(比如天上的月亮、远处的高山、近处的公路),并且每张图片宽度都不一样,就会分别以不同的速度卷动,实现多层卷动的效果。
; z; i% R. e V8 _" z; V+ Z' W- R6 j) X4 Q
每个场景可以拥有多个层,数量不限。
5 @' ?* f$ v6 P% r/ _7 f- r: m; d9 g! |* G; U
在本章我们将为场景添加一个层作为窗外的天空。
7 x9 F9 R; {4 w! X
# \9 {+ T: I: ]$ Z! q天空的图片已经在 “data\tutorial\gfx”文件夹下准备好了,在PM 中为MyScene导入sky.bmp。
6 |* [, A/ [% l# {1 m( I" w3 ?% o: a0 F+ H2 j
在SceneEdit中打开MyScene.scene。
1 u7 g6 L3 _& {2 E/ S- t) O
j0 h% V) v, r# O, e! T在Layer栏中点击Add layer按钮添加新的层。* Y3 k( e/ D) W$ C! v! p+ d
/ o( }2 @2 S ?5 X$ l* K( [) `8 Q
2 G# F( I/ G0 H+ |
' X; h6 ]; s. q
8 I+ j. _: _4 U* Q- i1 o' O
SceneEdit会弹出一个窗口填写层的信息(新版本里多出了一个close up选项,我没搞懂是干什么的- -大家研究研究),将名称改为sky,并将尺寸改为800,716。由于长度和窗口长度一样,这个层在水平方向不会卷动,而main层会卷动,就达到了我们想要的效果,而宽度为716,与main层相同,这样在纵方向上该层就会与main层同步卷动。
9 u4 _+ x3 N: x0 Q* ?/ [/ q0 w! W0 S! M" o K6 d: M6 s
![]()
# S& S h. _* }* P/ v0 T8 I$ K3 U h v/ ]# A3 v* ]
点击OK。使用上下箭头将sky层移至main层上方,层的顺序影响绘制的顺序。. L" L4 q5 U$ p8 c
' o( l- `6 T; p* l/ w, D( c J% u
![]()
" w! }# O; A5 H; X6 H) c
) `$ P3 F. }4 u% ]; \: I接下来要做的就是添加一个实体来放置天空的图片,如下图选择Add sprite entity,将新建的实体改名为sky并将图像改为之前导入的sky.bmp。
8 H9 G7 M( s4 N2 e8 [7 W3 g+ o/ J. P3 Q7 p' l- ~& k' J* G- |: f
注意:新建的层可以添加实体,但只有main层可以添加区域。
- `9 ?/ s0 L5 m7 _
U5 G- r7 u' D O* k' j 1 S' \/ T, q: i. U/ H2 M
8 J( `0 `4 i0 ]; f" Z1 `" K如下图移动到合适的位置。
% I! p7 m( y6 I+ `8 }. {! k3 A
( O0 `+ A* I7 }- r9 K( @![]()
) n" W5 H# m5 A. i& b4 v! Z6 |. H
$ C7 L! m9 K9 x, H保存并测试一下效果。
! ~ x0 C* v5 o$ K* G' [1 K3 x. T2 c
[场景设置 ]+ S: m* e0 y7 \1 G0 v1 a. t6 ^
/ _0 R0 Q$ O5 A; X$ f% G
引擎可以自动保存场景中物体的状态,并在下次角色来访时还原,还可以使场景中的对象记住它们所使用的sprite(你可以使用脚本改变)。
5 C3 ` v5 {7 L# D% u在SceneEdit左边工具栏中找到Properties选项卡,下图中红框勾选的两个选项可以决定是否开启场景自动保存的功能。: ]$ ]* n8 n) A
$ ]: c# m4 a! P
![]()
/ E0 \2 F A# m; u0 i1 H6 a( A8 e
3 C) W& F+ f7 B; u! a5 J- f( y2 Q
注意:保存场景的功能与你场景中对象的名称有关系,所以你的场景中不应该有重名的对象,否则可能出错。
. k" Q& {) d0 Y+ G, K# @6 s : ~" x" ~& z4 Z( L& g: d
[场景转换]
6 u" G- @7 @+ U/ h3 T0 ?/ C/ d& z( R0 i5 @8 S; a
你的游戏一般不会只有一个场景,使用脚本可以把各个场景连接在一起。我们在步骤7种已经把门做成了一个可以互动的区域实体,按之前所教的,给门添加一个脚本door.script并编辑。7 a; y1 e4 r+ K- j9 C2 [; j
& p z3 n( a( R2 l) S 5 ], u& O' K1 H3 P7 t
% A. @/ G; I% @: [我们只需要门在左键点击后能进入下个场景,所以只需要有以下的内容
) V# q: s+ O; m- x5 M9 p
$ J7 X* O2 G% G, I( [- l$ l1 f2 E$ L
0 t% \1 l' X8 X#include "scripts\base.inc" |
[/table] | | Game.ChangeScene("scenes\menu\menu.scene"); | [table=100%,#66ffcc]} |
]8 S, t1 V l* T* {& P: D+ @$ `& |
) ` h9 A+ L3 j/ _, o' \/ R- C大括号里一共有两句命令,第一句使角色在左键点击门后走到门旁边,第二句Game.ChangeScene("scenes\menu\menu.scene")使场景转换,目标场景由括号里的内容决定,你只需要改成其他文件夹里的场景文件就可以转换到别的场景了。3 S6 L5 e( S; n4 _
See the WME demo project for a finished example." h5 b5 O- i: N! C X
1 b: A# ]! V, X) _* c保存并测试。4 T8 Z# Z9 a% h% m. B" N* d
- Q/ V: X. q2 P3 e
. q: i' K; i4 C1 C; E
这样,你就完成了一个场景的搭建~Congratulations!
+ i, ]. N1 n' c5 d% z6 y+ L
& j6 O- e% P. F' u
0 J1 X( V5 i1 `0 x9 `" C9 o" B* U4 y' K' r1 a$ X
7 Z" Y8 j2 K* M) B8 V/ l$ V
0 @1 `' V6 J% _3 P9 N% P0 ]* @! O) U' D% N. M7 Q7 l) _
搭建场景是使用wme制作游戏耗费时间最多的内容之一,剩下的难点也只有对脚本的理解和运用了吧。- ?% H* C3 W7 g! Y6 s3 w
这九个步骤大致按照帮助文档写的,感觉有很多表达不是很好的地方,也有一些问题没有搞明白- -希望大家一起讨论研究下。' M o) H$ P+ C
/ a9 O) c: s( Q6 L/ G
: W. K) D' o9 z, E
下一章是关于sprite的。* G0 Q9 o1 o& |- g, e: y
: _3 j& M' W" L4 c5 \" r# }
0 w- i( {8 o2 u' _这里要和各位讨论一个问题,就是脚本的教学,之后有很多内容涉及到脚本,帮助文档的也就是放一段代码在那,没有详细的说明。而帮助文档除了关于场景搭建的教学,另一大块内容就是脚本,不过关于脚本并没有什么教学,只是象说明书一样,其中大量的函数更是没办法一个个讲解。有编程基础的人一看就大概明白,不懂编程的人要从头学起。我的想法是没有基础的人找一门语言入门(python、lua,或者你感兴趣的语言),我只学过python,个人感觉找到一本好的教材后(我看的是简明python教程),只需要不长的时间就可以大致了解,只要能写个简单的小程序,知道编程的基本知识,理解wme的脚本就不是问题了。之后大家多交流,我会翻译一些网上的教程,或者做一些demo,希望论坛上有更多有能力的人参与到游戏制作中来~ |