两章内容比较少,合在一起。% ~1 x( e5 p* T; O
; u$ |" K+ v' Q; y! \/ C2 G- c/ h# V/ ?+ Z6 B2 H0 m
[层]6 q) q! Z0 Y0 d4 H4 `
! E, b2 J; N2 B) H* p4 K+ q
这一章我们将实现多层卷轴(原文parallax scrolling貌似是平行卷轴,个人认为多层卷轴更贴切)的效果,就像你坐车时看窗外,近处的树和远处的山川向后退的速度是不一样的,wme可以通过添加层实现场景分不同部分卷动的效果。在步骤一中我们知道如果场景所用图片尺寸大于游戏窗口,场景就会在必要时卷动,并且场景越大,卷动速度越快,假设你有三个层,分别存放三张场景图片(比如天上的月亮、远处的高山、近处的公路),并且每张图片宽度都不一样,就会分别以不同的速度卷动,实现多层卷动的效果。
5 E! R5 F; E" E0 u
% A6 q% M" F$ u, K) v每个场景可以拥有多个层,数量不限。6 ?; `. U7 p+ G* _: Y+ f
Y- U9 _3 L4 c9 V2 Y* E
在本章我们将为场景添加一个层作为窗外的天空。& C% `- M# i' K( ^! x' ^0 V
5 q }2 I+ F- |9 K$ z天空的图片已经在 “data\tutorial\gfx”文件夹下准备好了,在PM 中为MyScene导入sky.bmp。
- {# d: G; y# ~% y0 |$ S% _, e6 s% M) N, b+ r& r
在SceneEdit中打开MyScene.scene。
4 G* h$ K, z4 l' }: F , C' G, t' M( D% P; f2 z2 j
在Layer栏中点击Add layer按钮添加新的层。: ]. N. c$ q! ]; `/ b
2 q* t! h, C3 h+ ^+ T
( _% A% B6 g" b
: d& p1 x2 Q$ q6 H$ \: J3 e! o: o& J0 h b
SceneEdit会弹出一个窗口填写层的信息(新版本里多出了一个close up选项,我没搞懂是干什么的- -大家研究研究),将名称改为sky,并将尺寸改为800,716。由于长度和窗口长度一样,这个层在水平方向不会卷动,而main层会卷动,就达到了我们想要的效果,而宽度为716,与main层相同,这样在纵方向上该层就会与main层同步卷动。8 @+ y/ Q2 t0 t8 w
( T0 q1 {- x1 }/ \# Z' \
! }' {# i! z( P q7 Z' A* i& K
& F5 D p# D* t; E) M6 Q% {点击OK。使用上下箭头将sky层移至main层上方,层的顺序影响绘制的顺序。$ m' v+ ?9 | ~, g u$ V0 k
$ f8 ?; B; ?0 j) N
0 [% d& p2 x/ u( x
* `" e( T. L5 Q0 m5 }6 Y接下来要做的就是添加一个实体来放置天空的图片,如下图选择Add sprite entity,将新建的实体改名为sky并将图像改为之前导入的sky.bmp。8 c2 N4 u" u ?# v2 `
) ~( O# e5 L/ J" J2 y6 t注意:新建的层可以添加实体,但只有main层可以添加区域。9 a/ h+ s0 ^" `, Q8 L6 E
0 z; g) S3 h/ f& _- a% r4 ~0 ?0 N9 H+ k$ X! g8 F* t5 }- |6 t
K5 t1 x% {9 T' z1 w3 U' J如下图移动到合适的位置。3 g* _! Z9 l1 G% p
/ |: T8 W# v# k: \% g. F- B
$ X& E: t0 P" u+ O" I# W- K& B
7 J. K/ R! V. b; _保存并测试一下效果。8 [+ h7 x# P) H' b1 R1 r- P
7 h. ]% O6 W* {& w! F[场景设置 ]
$ m: z* C: N2 F1 c6 f
$ L) k. D2 |" `6 v引擎可以自动保存场景中物体的状态,并在下次角色来访时还原,还可以使场景中的对象记住它们所使用的sprite(你可以使用脚本改变)。
; k d% a8 G8 `) m s2 Y# j& [0 u9 r在SceneEdit左边工具栏中找到Properties选项卡,下图中红框勾选的两个选项可以决定是否开启场景自动保存的功能。, |2 _8 U% I; o6 `. h4 O' w' E& p# [: u
1 _+ ~3 K! E# w! L1 Q( n3 R. B N; Q; \ B# K0 n6 X$ _# H
( {8 @$ _" X. r$ n8 R
( |6 p! H. g# _+ C注意:保存场景的功能与你场景中对象的名称有关系,所以你的场景中不应该有重名的对象,否则可能出错。
* o; W& F [2 }! H, z' I7 d
( }" x9 ]3 R5 `. z7 t[场景转换]7 L' Z2 t7 b; g7 {6 e% H O
9 L- e/ f# y! x/ X8 f, f( f
你的游戏一般不会只有一个场景,使用脚本可以把各个场景连接在一起。我们在步骤7种已经把门做成了一个可以互动的区域实体,按之前所教的,给门添加一个脚本door.script并编辑。
9 f/ F3 Q4 G" A! W8 j6 J& T. \! H6 z p5 k# \! X+ H: Y
' s5 I4 n0 R) l1 f- W 4 P. y% O+ b- m @1 H% D& H
我们只需要门在左键点击后能进入下个场景,所以只需要有以下的内容
6 M! q. _. t: U4 x/ r
' g$ @) [1 o0 s! u" r# C, ^, k" ^! A1 g% O; h8 \# @8 ^
#include "scripts\base.inc" |
[/table] | | Game.ChangeScene("scenes\menu\menu.scene"); | [table=100%,#66ffcc]} | 8 n1 j: i" H5 u3 X- W! E1 O3 g; K
. p X7 M) v) Y' a9 x$ Q大括号里一共有两句命令,第一句使角色在左键点击门后走到门旁边,第二句Game.ChangeScene("scenes\menu\menu.scene")使场景转换,目标场景由括号里的内容决定,你只需要改成其他文件夹里的场景文件就可以转换到别的场景了。
+ s6 V7 s+ i' ~$ \5 V! |; pSee the WME demo project for a finished example.
9 R, s0 {% C- y8 J$ G s) f6 a# [% ?) Y
保存并测试。
8 s" I0 e2 c! f, [
4 P2 v$ l. p& N$ F$ n. d% A* ~ |6 }) |, c A/ k6 J* d6 q' J
这样,你就完成了一个场景的搭建~Congratulations!9 k& x' |. ?* b: H b5 o- |
. C) _" y7 l+ i: a" r, {& W2 l: K
* f9 g# W# p/ Q8 \. j
, t# a" o& l, V4 W
4 ]6 b6 {( c7 ?8 K/ A& l
) S# f2 i0 L! Z$ q5 z- ?) j, D/ r
搭建场景是使用wme制作游戏耗费时间最多的内容之一,剩下的难点也只有对脚本的理解和运用了吧。/ t& I$ m! c) M+ ~
这九个步骤大致按照帮助文档写的,感觉有很多表达不是很好的地方,也有一些问题没有搞明白- -希望大家一起讨论研究下。2 M3 ?, V# f) L$ e1 n
) G# U% i% w5 s6 o0 ~! \3 A, D
: K; E5 W, n# t' V6 H下一章是关于sprite的。
5 _0 U" d z+ w! ]( {
4 `& X6 Y6 i2 I$ M
9 }# Q, e2 ~; h) h+ M* J# Y& W这里要和各位讨论一个问题,就是脚本的教学,之后有很多内容涉及到脚本,帮助文档的也就是放一段代码在那,没有详细的说明。而帮助文档除了关于场景搭建的教学,另一大块内容就是脚本,不过关于脚本并没有什么教学,只是象说明书一样,其中大量的函数更是没办法一个个讲解。有编程基础的人一看就大概明白,不懂编程的人要从头学起。我的想法是没有基础的人找一门语言入门(python、lua,或者你感兴趣的语言),我只学过python,个人感觉找到一本好的教材后(我看的是简明python教程),只需要不长的时间就可以大致了解,只要能写个简单的小程序,知道编程的基本知识,理解wme的脚本就不是问题了。之后大家多交流,我会翻译一些网上的教程,或者做一些demo,希望论坛上有更多有能力的人参与到游戏制作中来~ |