两章内容比较少,合在一起。
9 A% d1 K F+ q
! X8 i W$ ]6 W6 [& f8 i' a
3 f, n; @+ h7 j9 q+ a \: K% i[层]
1 ^7 ]0 w0 \8 `% a
3 b( G( G4 ]2 ~2 u) ]5 K这一章我们将实现多层卷轴(原文parallax scrolling貌似是平行卷轴,个人认为多层卷轴更贴切)的效果,就像你坐车时看窗外,近处的树和远处的山川向后退的速度是不一样的,wme可以通过添加层实现场景分不同部分卷动的效果。在步骤一中我们知道如果场景所用图片尺寸大于游戏窗口,场景就会在必要时卷动,并且场景越大,卷动速度越快,假设你有三个层,分别存放三张场景图片(比如天上的月亮、远处的高山、近处的公路),并且每张图片宽度都不一样,就会分别以不同的速度卷动,实现多层卷动的效果。
9 _/ ~( E, ~, `) R4 O* ~7 o
+ ? J! Z+ d6 v1 t% F2 U) s+ n每个场景可以拥有多个层,数量不限。: ^4 f( W8 K" s( D
2 D0 l7 u& L5 C/ d( |6 v$ _
在本章我们将为场景添加一个层作为窗外的天空。
. V5 B* l; o0 l6 m! c" P. ]/ W; Z h8 P" e# H" j
天空的图片已经在 “data\tutorial\gfx”文件夹下准备好了,在PM 中为MyScene导入sky.bmp。( E [. N7 @" V7 K( e; j
8 K& e/ e: L3 f' m1 A
在SceneEdit中打开MyScene.scene。
5 u [* G% X: c& O3 n , t- F; q8 L5 w0 \
在Layer栏中点击Add layer按钮添加新的层。
1 h/ D% `7 l7 L2 v; y2 h8 }9 m" C2 ^, U0 O' q- c9 ^
. k, M1 H+ B( v, _' B6 s2 F 2 p! B* G$ H4 i
7 h, p0 ]1 ?* t# k0 \/ W/ _$ ~& OSceneEdit会弹出一个窗口填写层的信息(新版本里多出了一个close up选项,我没搞懂是干什么的- -大家研究研究),将名称改为sky,并将尺寸改为800,716。由于长度和窗口长度一样,这个层在水平方向不会卷动,而main层会卷动,就达到了我们想要的效果,而宽度为716,与main层相同,这样在纵方向上该层就会与main层同步卷动。# J* w& W! |, f
$ e. U# D5 Q8 E+ D, v8 q5 e' n
. Z5 b" n7 V9 z& z6 z
- Z0 x$ D2 I5 l+ D, g; N) ~
点击OK。使用上下箭头将sky层移至main层上方,层的顺序影响绘制的顺序。
- J* F$ g) l+ k; t. c/ y( P& A1 F3 Y: S3 |3 W
% K2 p9 v6 K5 v* L) V+ o
, ]. ^# f( Y& J# P$ \
接下来要做的就是添加一个实体来放置天空的图片,如下图选择Add sprite entity,将新建的实体改名为sky并将图像改为之前导入的sky.bmp。$ H) c8 L' d0 S6 Y& m- m& j) O* g @
T/ J+ m f- D" J0 [0 B$ |注意:新建的层可以添加实体,但只有main层可以添加区域。# i+ H- l3 ^; R5 { E7 {: a; q
& y. |8 x& Z o6 o* V$ g% b
8 X5 t' a" U( Q( h2 S {8 _3 F 8 h7 n) m. {* a) Y+ ?! P
如下图移动到合适的位置。
6 x; Y9 B& K. Q* o0 R ?# m
# K1 T$ h. u" ?+ D0 K8 X4 s( K/ V- x, k) d0 q8 ^" B# }1 W0 O* w
0 ^- I7 X5 ?6 o$ Q# `( Q
保存并测试一下效果。
0 e( X: T9 w6 a* K! L ~/ V
+ x: A/ O1 V( A/ h6 w/ G& B[场景设置 ]
. U: W# [* Q* I# a' u$ ?
, j a( k% m) |引擎可以自动保存场景中物体的状态,并在下次角色来访时还原,还可以使场景中的对象记住它们所使用的sprite(你可以使用脚本改变)。
( i+ Y/ D- z1 w2 Y) D+ u在SceneEdit左边工具栏中找到Properties选项卡,下图中红框勾选的两个选项可以决定是否开启场景自动保存的功能。
) R8 K5 z' S* F# D* o& ~
" L1 e* h$ \7 F3 E i6 G
: E6 y& U4 w" B* [
( `/ v1 y0 j. w3 Y6 D- Y/ B
2 `) e7 n% M5 a- i9 d# D# k注意:保存场景的功能与你场景中对象的名称有关系,所以你的场景中不应该有重名的对象,否则可能出错。
; {" u+ a, q# F* H
7 |) m+ Q% J* C4 `[场景转换]
* ?$ r ?* Z) O" I: V3 K4 d- N( ^+ c( [1 H8 c! q
你的游戏一般不会只有一个场景,使用脚本可以把各个场景连接在一起。我们在步骤7种已经把门做成了一个可以互动的区域实体,按之前所教的,给门添加一个脚本door.script并编辑。3 Z' R, S8 C. W) a
% @3 t3 s6 O1 c. V6 j
8 N! V( r2 N; Z* g ( B; a* C( m' b
我们只需要门在左键点击后能进入下个场景,所以只需要有以下的内容
; G* D$ [3 r) l% X4 e) r+ o0 }6 M& C9 B9 V) G) t/ i
N3 Z E1 m- R* u- q+ `
#include "scripts\base.inc" |
[/table] | | Game.ChangeScene("scenes\menu\menu.scene"); | [table=100%,#66ffcc]} |
; p3 u: W5 u$ J/ i9 h/ n3 C+ G% e" ~! B# P6 Z, [
大括号里一共有两句命令,第一句使角色在左键点击门后走到门旁边,第二句Game.ChangeScene("scenes\menu\menu.scene")使场景转换,目标场景由括号里的内容决定,你只需要改成其他文件夹里的场景文件就可以转换到别的场景了。
6 I7 Y) b9 ]) |See the WME demo project for a finished example.
7 W0 b/ z. m6 K: o! o7 C& T. A9 t0 ]- [( q( e% G
保存并测试。, a+ E# y% l) X4 Y7 `! v5 D
# x" Y1 R8 v/ L! n) H6 j; n
9 e+ t$ U4 i: T, Q$ x$ Q3 \$ C0 `' t这样,你就完成了一个场景的搭建~Congratulations!
1 _3 n, G" O1 H7 D( P9 f
& u! L* a! v$ ^ U* m* ~+ R% k2 T/ q' H& @: c1 ?
1 H/ X& k+ o) u) g7 J1 j* t
N, t. Y5 i0 w
) e+ N$ f! j! x, V( ~5 k$ ~# e3 D2 |# D
; H0 h& ~5 r: o搭建场景是使用wme制作游戏耗费时间最多的内容之一,剩下的难点也只有对脚本的理解和运用了吧。
( i$ b. G2 k0 P8 V这九个步骤大致按照帮助文档写的,感觉有很多表达不是很好的地方,也有一些问题没有搞明白- -希望大家一起讨论研究下。
# G+ X) N u9 j7 ~8 J- o
, | _6 o- S- C( R
. J0 F* G$ g5 ^下一章是关于sprite的。
! \6 G! ~+ [6 [ @! I4 Z& V7 U5 u- F9 f% E; p1 @. t: O
/ Y7 I" T9 F. C+ b这里要和各位讨论一个问题,就是脚本的教学,之后有很多内容涉及到脚本,帮助文档的也就是放一段代码在那,没有详细的说明。而帮助文档除了关于场景搭建的教学,另一大块内容就是脚本,不过关于脚本并没有什么教学,只是象说明书一样,其中大量的函数更是没办法一个个讲解。有编程基础的人一看就大概明白,不懂编程的人要从头学起。我的想法是没有基础的人找一门语言入门(python、lua,或者你感兴趣的语言),我只学过python,个人感觉找到一本好的教材后(我看的是简明python教程),只需要不长的时间就可以大致了解,只要能写个简单的小程序,知道编程的基本知识,理解wme的脚本就不是问题了。之后大家多交流,我会翻译一些网上的教程,或者做一些demo,希望论坛上有更多有能力的人参与到游戏制作中来~ |