两章内容比较少,合在一起。
. Q) [- W5 P2 x8 n+ s, z& E3 ^) \& j( B @/ D! z. d
" G1 y3 }* g- U1 w# W" w; l! \* u
[层]
- s7 q/ E) o7 ~0 b2 I
h. O- _% [3 R) A这一章我们将实现多层卷轴(原文parallax scrolling貌似是平行卷轴,个人认为多层卷轴更贴切)的效果,就像你坐车时看窗外,近处的树和远处的山川向后退的速度是不一样的,wme可以通过添加层实现场景分不同部分卷动的效果。在步骤一中我们知道如果场景所用图片尺寸大于游戏窗口,场景就会在必要时卷动,并且场景越大,卷动速度越快,假设你有三个层,分别存放三张场景图片(比如天上的月亮、远处的高山、近处的公路),并且每张图片宽度都不一样,就会分别以不同的速度卷动,实现多层卷动的效果。
5 k2 E9 ^8 T4 O! K4 x( S
8 O6 S/ y, M+ w C; Q. l每个场景可以拥有多个层,数量不限。! C1 q' Z, |+ _5 k8 H* N
$ [* Y8 d {' Q4 k
在本章我们将为场景添加一个层作为窗外的天空。
F/ N, q" _* X# A! c# F) @8 N% ?5 `
天空的图片已经在 “data\tutorial\gfx”文件夹下准备好了,在PM 中为MyScene导入sky.bmp。
1 c1 N: p0 M1 }: W0 T3 q
/ h5 _3 W/ i% H- |) h在SceneEdit中打开MyScene.scene。) z# b, U. Y& o8 U' N
9 s) K" b5 l+ q* F+ X1 E' w在Layer栏中点击Add layer按钮添加新的层。9 g. S" O( C; d3 `' R9 }
4 X4 B# E2 Y) y. D4 {: c5 n, ^3 X* ?, `5 L) Q- E7 H! i
* [( w# I6 U7 W* o+ Q7 p8 Y
2 B0 }1 C) A& y. b+ hSceneEdit会弹出一个窗口填写层的信息(新版本里多出了一个close up选项,我没搞懂是干什么的- -大家研究研究),将名称改为sky,并将尺寸改为800,716。由于长度和窗口长度一样,这个层在水平方向不会卷动,而main层会卷动,就达到了我们想要的效果,而宽度为716,与main层相同,这样在纵方向上该层就会与main层同步卷动。$ b+ j! g+ m6 w
# R( |2 E: T5 g. w, m+ }6 v
& p- L( s# S( @; W. m
2 u1 Y5 X: h5 [: j/ B) {点击OK。使用上下箭头将sky层移至main层上方,层的顺序影响绘制的顺序。
* x1 }% D" x0 F+ m5 M* [; Q% E
; c5 F' S( u+ @! Y H4 k
/ b, m! U0 H( ^* ?+ M6 R; h- A( d- L9 z9 s6 T3 H
接下来要做的就是添加一个实体来放置天空的图片,如下图选择Add sprite entity,将新建的实体改名为sky并将图像改为之前导入的sky.bmp。
+ q# W3 q& e) K5 _3 J, Z, V/ ]; D8 ~8 |. Z
注意:新建的层可以添加实体,但只有main层可以添加区域。
4 C# G; \3 Q2 C2 d. Q3 y/ G# |: c' P. I
8 \$ [% M" Z' v& _- W& b " C& C: E0 c2 ~7 d
如下图移动到合适的位置。
( K! K4 I0 H, \' m$ _2 I( Y, K+ Y2 J$ y+ i* b$ C- M) i
1 |; J) R* @" u" p" L
2 t3 \+ x |/ r* h保存并测试一下效果。
" \2 w" Q4 a! z: e& k# G; L: G- {) }9 X: M; o( E% o
[场景设置 ]+ W1 f j0 l& y0 L0 t0 c
+ F+ e0 G$ z3 G1 O4 _& q
引擎可以自动保存场景中物体的状态,并在下次角色来访时还原,还可以使场景中的对象记住它们所使用的sprite(你可以使用脚本改变)。5 ^. ~4 T$ F. I/ y
在SceneEdit左边工具栏中找到Properties选项卡,下图中红框勾选的两个选项可以决定是否开启场景自动保存的功能。
6 j! Q5 W# K9 t1 g! ^7 _" w1 q; U& X8 O, n
1 i5 w( G/ Q, |# c. T3 v
+ K0 R+ y3 ^; y6 s# s8 o: g {3 D" h! j* \/ y6 e
注意:保存场景的功能与你场景中对象的名称有关系,所以你的场景中不应该有重名的对象,否则可能出错。
- R1 Q/ G2 E( \8 \& p. i ' G) x) w4 n! h1 h1 X( t
[场景转换]' ]7 s" N/ {9 E
" r! U) }; H1 A) S/ Q$ d你的游戏一般不会只有一个场景,使用脚本可以把各个场景连接在一起。我们在步骤7种已经把门做成了一个可以互动的区域实体,按之前所教的,给门添加一个脚本door.script并编辑。
& A# {& l6 A, d3 ^+ S3 D4 G5 D# |; s p" @5 }. D# h+ i
1 d3 Q0 \$ t% O9 }
1 ^8 Y: B9 U6 q$ y1 x$ E' M我们只需要门在左键点击后能进入下个场景,所以只需要有以下的内容) V! P6 }% K5 _+ W# S: P* \
' S7 |' B3 b/ I) y% B
0 h" o; J4 x3 b4 G2 d8 |
#include "scripts\base.inc" |
[/table] | | Game.ChangeScene("scenes\menu\menu.scene"); | [table=100%,#66ffcc]} | # y$ b; w! S* T
: q h0 ?" }1 n5 @# y$ G大括号里一共有两句命令,第一句使角色在左键点击门后走到门旁边,第二句Game.ChangeScene("scenes\menu\menu.scene")使场景转换,目标场景由括号里的内容决定,你只需要改成其他文件夹里的场景文件就可以转换到别的场景了。: J( P9 D4 Y; p. M
See the WME demo project for a finished example.( U. a3 n3 ], ^. w- m
" V2 E0 L7 k, h1 Z5 M+ U
保存并测试。
- T9 l& R. B9 D' z- |
' N/ u& K$ i0 c5 L; K8 Q
5 P& K1 C1 d0 u& R5 J' C$ l这样,你就完成了一个场景的搭建~Congratulations!7 }! c/ @& `; v0 H1 ~) ^% U
3 s$ E- Y: Q; {" s! P& z1 R2 c& F* d* I
0 }5 v, Q$ @/ r0 O x4 p( ?0 q% u& U% |. U# T) j
6 u0 P$ S. ^) h' s# \
$ v8 n% e% G2 T8 r; _; }搭建场景是使用wme制作游戏耗费时间最多的内容之一,剩下的难点也只有对脚本的理解和运用了吧。0 |' S; t" h3 G' I
这九个步骤大致按照帮助文档写的,感觉有很多表达不是很好的地方,也有一些问题没有搞明白- -希望大家一起讨论研究下。
. c) H, R# Y& @6 e; Y5 y3 j
; M( A- q$ {: b9 O# U! U' X
0 |( T; f4 `! Y& W/ N! t8 I下一章是关于sprite的。- [+ R" O& F# i- A
. k/ P- B/ K3 {( @9 B: N7 x
) ]) M, V- y+ Q& V0 t% N( S这里要和各位讨论一个问题,就是脚本的教学,之后有很多内容涉及到脚本,帮助文档的也就是放一段代码在那,没有详细的说明。而帮助文档除了关于场景搭建的教学,另一大块内容就是脚本,不过关于脚本并没有什么教学,只是象说明书一样,其中大量的函数更是没办法一个个讲解。有编程基础的人一看就大概明白,不懂编程的人要从头学起。我的想法是没有基础的人找一门语言入门(python、lua,或者你感兴趣的语言),我只学过python,个人感觉找到一本好的教材后(我看的是简明python教程),只需要不长的时间就可以大致了解,只要能写个简单的小程序,知道编程的基本知识,理解wme的脚本就不是问题了。之后大家多交流,我会翻译一些网上的教程,或者做一些demo,希望论坛上有更多有能力的人参与到游戏制作中来~ |