两章内容比较少,合在一起。4 x/ W: p2 E, t- Z
) o7 ?9 `0 ]; A1 O8 A2 S8 V/ u
4 }; q7 Y. X8 e! z" X* g
[层]" ]: d1 e3 l9 O# U8 @$ ^
, u k7 P. \9 L
这一章我们将实现多层卷轴(原文parallax scrolling貌似是平行卷轴,个人认为多层卷轴更贴切)的效果,就像你坐车时看窗外,近处的树和远处的山川向后退的速度是不一样的,wme可以通过添加层实现场景分不同部分卷动的效果。在步骤一中我们知道如果场景所用图片尺寸大于游戏窗口,场景就会在必要时卷动,并且场景越大,卷动速度越快,假设你有三个层,分别存放三张场景图片(比如天上的月亮、远处的高山、近处的公路),并且每张图片宽度都不一样,就会分别以不同的速度卷动,实现多层卷动的效果。
) j6 l; X0 p! s1 p5 x* S8 Y) h L! k+ h& Q
每个场景可以拥有多个层,数量不限。# k) c' ~- M7 m( @ ]6 N4 z
- j7 X* `' m' V5 O0 R2 h在本章我们将为场景添加一个层作为窗外的天空。8 V L- [; X2 K7 S" n1 @6 z
( z! B) H' g1 B
天空的图片已经在 “data\tutorial\gfx”文件夹下准备好了,在PM 中为MyScene导入sky.bmp。
) O% U" t2 e) e) A/ [1 f$ z% ?( H5 D
在SceneEdit中打开MyScene.scene。
3 V ?/ i. q. D) J2 }$ E2 P . v( _8 k, ~8 B5 G) T
在Layer栏中点击Add layer按钮添加新的层。
- |& {- @8 p) R$ E. n% J# l( A5 q, l! Z+ T; K5 S# f
# c, x) [) J* `: o$ c7 N
( E" o' D: S2 u3 F1 p
" C5 h' b% x4 I: NSceneEdit会弹出一个窗口填写层的信息(新版本里多出了一个close up选项,我没搞懂是干什么的- -大家研究研究),将名称改为sky,并将尺寸改为800,716。由于长度和窗口长度一样,这个层在水平方向不会卷动,而main层会卷动,就达到了我们想要的效果,而宽度为716,与main层相同,这样在纵方向上该层就会与main层同步卷动。
/ w/ {* v5 [& ~3 I. g4 Z" J$ Y5 E* t. |" L- Q4 C9 i5 V; q! s
![]()
; Z7 c) }! [. ^; x
+ m. }# ^1 F6 W: }点击OK。使用上下箭头将sky层移至main层上方,层的顺序影响绘制的顺序。& q' G; [$ h/ v6 m9 @/ `" O
: F! F+ X5 l9 `2 H![]()
5 y7 X7 D3 |5 a4 E2 Z0 f' S- Y7 D( X' D, H6 s
接下来要做的就是添加一个实体来放置天空的图片,如下图选择Add sprite entity,将新建的实体改名为sky并将图像改为之前导入的sky.bmp。
/ h1 R( A. [6 [3 y2 F7 q7 D
' D. d4 |6 s9 y! l# {1 r注意:新建的层可以添加实体,但只有main层可以添加区域。. d- C9 q" W+ h9 F1 Q. N
a/ G# @0 e$ a( W4 g# d8 x![]()
( Y& w# n" C f+ Q- e4 l# n : @, g1 C1 ~% t
如下图移动到合适的位置。
3 w2 j! L' B2 m/ Q& Y5 B6 C
- g7 R9 i; h1 X- C6 r: ~9 M3 k1 O# P- Z ; t/ X& ?: H& W) ^
( ~3 d6 N. O: s) j) e4 }
保存并测试一下效果。
+ [* k3 L& }% v
4 N8 t8 d7 J" E& a6 x1 r[场景设置 ]" L7 S/ g' W8 n+ u
: n2 |, C/ ]& g) b8 Q3 t
引擎可以自动保存场景中物体的状态,并在下次角色来访时还原,还可以使场景中的对象记住它们所使用的sprite(你可以使用脚本改变)。
3 t8 ^6 N A% v$ t$ J: O在SceneEdit左边工具栏中找到Properties选项卡,下图中红框勾选的两个选项可以决定是否开启场景自动保存的功能。$ i7 L a$ v0 C- a2 Y+ F3 [/ Z
9 t5 ^- }# f9 r6 a; v: q+ y 4 m! c: m+ o. Y/ b) {
% Z8 ` Q) N' R
( I3 ?/ `: F- A0 Z2 v2 {( r注意:保存场景的功能与你场景中对象的名称有关系,所以你的场景中不应该有重名的对象,否则可能出错。
- R3 p$ q7 p! Z' ~- O$ M( v
4 U; F! K7 l7 s1 n5 [. \: A[场景转换]
; W/ k' G% @: g- i1 p1 Q4 }. Z; v. R2 r" H, _
你的游戏一般不会只有一个场景,使用脚本可以把各个场景连接在一起。我们在步骤7种已经把门做成了一个可以互动的区域实体,按之前所教的,给门添加一个脚本door.script并编辑。
' r3 R" R# h* T/ L7 y, p9 m5 e% E' l* b5 h1 l7 f
: S4 F: I: L3 a+ q. p: `' K
4 Q3 {. ?( [' \# Q我们只需要门在左键点击后能进入下个场景,所以只需要有以下的内容. `# u9 \; i5 u9 q
* x% |, b& W$ p6 [0 c' N% p4 D6 v" B+ a" h# n6 m; c7 I
#include "scripts\base.inc" |
[/table] | | Game.ChangeScene("scenes\menu\menu.scene"); | [table=100%,#66ffcc]} |
5 D9 Z, _; B1 ~6 a: C1 s! f8 J5 x6 I
% Z; m' [1 o$ j4 W+ A/ z大括号里一共有两句命令,第一句使角色在左键点击门后走到门旁边,第二句Game.ChangeScene("scenes\menu\menu.scene")使场景转换,目标场景由括号里的内容决定,你只需要改成其他文件夹里的场景文件就可以转换到别的场景了。' ~: |7 {, E' V; m- L
See the WME demo project for a finished example.2 t% W! i. \2 F& o* Z2 P! I: m
( w. S' G0 {2 A/ {
保存并测试。
' H/ d2 d2 R5 x1 t/ B+ ?; Y* n Z/ A
& u9 h! U% N( ?. L, `( q' E" ~. Y
这样,你就完成了一个场景的搭建~Congratulations!
@. J) E/ n. H! Z9 S, c
) q8 f' [1 m& Z
- k$ \# S& C8 a- w5 a) K
# {1 {+ d. j2 G5 T: }; a* j% I9 u2 ?" P/ ?% W* {
7 e/ X6 e! ^- \& B3 G% [
& D! n& K$ G d
搭建场景是使用wme制作游戏耗费时间最多的内容之一,剩下的难点也只有对脚本的理解和运用了吧。
/ D* i# a, P! E/ v% c这九个步骤大致按照帮助文档写的,感觉有很多表达不是很好的地方,也有一些问题没有搞明白- -希望大家一起讨论研究下。
5 z9 k( ^+ y$ L" K2 u( {5 H4 R l
! D* a) F ]2 O {% h; n
下一章是关于sprite的。. e9 _0 ]3 x( l
, ?2 d% p! \3 ?" @ N
4 K2 O6 g1 Z* R
这里要和各位讨论一个问题,就是脚本的教学,之后有很多内容涉及到脚本,帮助文档的也就是放一段代码在那,没有详细的说明。而帮助文档除了关于场景搭建的教学,另一大块内容就是脚本,不过关于脚本并没有什么教学,只是象说明书一样,其中大量的函数更是没办法一个个讲解。有编程基础的人一看就大概明白,不懂编程的人要从头学起。我的想法是没有基础的人找一门语言入门(python、lua,或者你感兴趣的语言),我只学过python,个人感觉找到一本好的教材后(我看的是简明python教程),只需要不长的时间就可以大致了解,只要能写个简单的小程序,知道编程的基本知识,理解wme的脚本就不是问题了。之后大家多交流,我会翻译一些网上的教程,或者做一些demo,希望论坛上有更多有能力的人参与到游戏制作中来~ |