两章内容比较少,合在一起。% ^& o m( |/ N
0 Y3 p) P! i/ \+ w( K$ I
$ I3 |* _, z- }: h7 H[层]
! e; L# T0 K' F( t8 t7 A4 z
0 B8 D1 S5 p1 N) ~% r+ e+ Y% y- k这一章我们将实现多层卷轴(原文parallax scrolling貌似是平行卷轴,个人认为多层卷轴更贴切)的效果,就像你坐车时看窗外,近处的树和远处的山川向后退的速度是不一样的,wme可以通过添加层实现场景分不同部分卷动的效果。在步骤一中我们知道如果场景所用图片尺寸大于游戏窗口,场景就会在必要时卷动,并且场景越大,卷动速度越快,假设你有三个层,分别存放三张场景图片(比如天上的月亮、远处的高山、近处的公路),并且每张图片宽度都不一样,就会分别以不同的速度卷动,实现多层卷动的效果。
8 C' n3 R& R/ T$ c3 z. _3 Y, n& t
8 @% l) a9 O# x7 s; n% n r( j每个场景可以拥有多个层,数量不限。
' U" x/ d2 O* s/ h z* K- F! }0 ?% Q8 R) c# R+ ^( N
在本章我们将为场景添加一个层作为窗外的天空。0 m& |0 W7 r/ k F
3 |- E A$ Z# W0 r% m" c) G1 b5 _天空的图片已经在 “data\tutorial\gfx”文件夹下准备好了,在PM 中为MyScene导入sky.bmp。 G$ \9 ]. ]* m
# g- P; Z( X: r. k( Q* |8 K
在SceneEdit中打开MyScene.scene。+ [9 S4 r, [+ ^2 x6 f, w
0 o2 r, `! m# Q( e- Z% Z' F! b
在Layer栏中点击Add layer按钮添加新的层。
- B, W* V. u& G+ Z- \" u$ g
6 i6 B& s% j5 y0 C9 J0 c. a4 d# K, ~$ I2 d
! X& e9 _, ~- U
& A2 ~ g/ A! vSceneEdit会弹出一个窗口填写层的信息(新版本里多出了一个close up选项,我没搞懂是干什么的- -大家研究研究),将名称改为sky,并将尺寸改为800,716。由于长度和窗口长度一样,这个层在水平方向不会卷动,而main层会卷动,就达到了我们想要的效果,而宽度为716,与main层相同,这样在纵方向上该层就会与main层同步卷动。
; ?4 o, k0 {, K" g2 W1 o" j9 x+ `- y3 D! d7 ?- f: ^5 c' n5 c
6 e! ^. t! T$ I5 v$ R0 T* R
* O _- [/ ]/ _! o) r2 S0 m点击OK。使用上下箭头将sky层移至main层上方,层的顺序影响绘制的顺序。
3 F7 f! k! A. T' }0 f: g' D
. _' H- ~9 {+ W$ E; [3 t; K0 B9 B3 o
8 m7 c% T) t& {3 [& |4 r- I6 Q% p& Z3 ]( Z1 @* L2 s5 F9 L
接下来要做的就是添加一个实体来放置天空的图片,如下图选择Add sprite entity,将新建的实体改名为sky并将图像改为之前导入的sky.bmp。' B- Y# v( C L8 t
- v: l! e) \8 q$ R
注意:新建的层可以添加实体,但只有main层可以添加区域。
; u, g2 {* J* {$ y2 x4 h2 Y& V1 `' m1 @7 A J4 |$ p: G* G- x0 S: N; S
& Z# s5 I% ?2 ^% Z5 P- M( a
$ `" n( o! R& A9 u$ U如下图移动到合适的位置。
* Y% t( U3 p; I0 b! s# o) ?' c6 a5 P7 d; b1 B
% B9 ^' f# |: E5 y: W2 n/ q5 W w 2 \# ^% o% L: [* o8 ~: t3 p
保存并测试一下效果。
0 o A+ B8 P% C% h# b/ ^
. @/ d% T% T/ c[场景设置 ]
5 A# }! e" L: q. v- p, @
u6 L$ t% n C/ Y& w9 _引擎可以自动保存场景中物体的状态,并在下次角色来访时还原,还可以使场景中的对象记住它们所使用的sprite(你可以使用脚本改变)。
3 c! O; B# G) T% f8 |在SceneEdit左边工具栏中找到Properties选项卡,下图中红框勾选的两个选项可以决定是否开启场景自动保存的功能。, x5 K9 c" D" ^) u" ?3 I2 e3 W
" I, u3 w: e, G) s- e6 D
6 k* F3 ~7 K& q& b' H/ U
3 i5 J2 B, H, t, G& \/ k# W1 @; X/ s3 G7 R5 ~2 G6 q: H
注意:保存场景的功能与你场景中对象的名称有关系,所以你的场景中不应该有重名的对象,否则可能出错。' r- l) v- e/ l% w, }) W. {
% r3 Y+ Y' D! G; Y2 c/ b1 b
[场景转换]2 ? m) X$ X" M4 A+ H( j6 F
8 @1 r' H" _* L
你的游戏一般不会只有一个场景,使用脚本可以把各个场景连接在一起。我们在步骤7种已经把门做成了一个可以互动的区域实体,按之前所教的,给门添加一个脚本door.script并编辑。
% P; o4 @& Q* S1 b2 B8 e9 ]# C# d) ] D$ O$ F# d' P
" q/ b0 _! W* V5 ^/ o3 `, `6 Y& n
1 K6 B7 B; S# w6 p我们只需要门在左键点击后能进入下个场景,所以只需要有以下的内容
5 H `. X- [! P: e E. w' `* G: s6 z" X3 U- z. k- [
- J- y, y- S/ c6 D#include "scripts\base.inc" |
[/table] | | Game.ChangeScene("scenes\menu\menu.scene"); | [table=100%,#66ffcc]} |
/ l: \: r9 a; t' V! B! R
5 m7 f9 a9 o' d( |大括号里一共有两句命令,第一句使角色在左键点击门后走到门旁边,第二句Game.ChangeScene("scenes\menu\menu.scene")使场景转换,目标场景由括号里的内容决定,你只需要改成其他文件夹里的场景文件就可以转换到别的场景了。
; |( v8 e3 Q6 r$ k; |8 sSee the WME demo project for a finished example.0 {) W1 x( _/ b/ ]1 G
, t: E( s$ B. K; j保存并测试。
% Z+ g8 g1 g' G& B3 k2 ?' E
, R+ p H0 X" o& C
# c# I& R" t% U% y% u这样,你就完成了一个场景的搭建~Congratulations!
' D! Z" K; c5 U5 t) T: p
- ]3 o/ x7 w5 s3 d9 {1 p, t& d' D2 y4 |
, k: P. T$ ^: |# Z" m! ?# O& S! K7 s) i* v( d7 T
5 Y* F1 {- R- o* k: J* z, K% s z% }9 Y2 f8 T1 e
" b8 v1 t/ ?2 _; c6 J) s- S: Z) c8 D搭建场景是使用wme制作游戏耗费时间最多的内容之一,剩下的难点也只有对脚本的理解和运用了吧。1 K# B1 E& ^) ]6 G. x% ^
这九个步骤大致按照帮助文档写的,感觉有很多表达不是很好的地方,也有一些问题没有搞明白- -希望大家一起讨论研究下。% R2 B8 _& f7 m
9 T! s( b7 z4 I+ A2 W' } x- o* [3 O, v" d
下一章是关于sprite的。$ R' W$ i- N2 {: Q" m& T
- [. ~$ u+ j! E
' D& U3 d9 D7 {% M4 T; s这里要和各位讨论一个问题,就是脚本的教学,之后有很多内容涉及到脚本,帮助文档的也就是放一段代码在那,没有详细的说明。而帮助文档除了关于场景搭建的教学,另一大块内容就是脚本,不过关于脚本并没有什么教学,只是象说明书一样,其中大量的函数更是没办法一个个讲解。有编程基础的人一看就大概明白,不懂编程的人要从头学起。我的想法是没有基础的人找一门语言入门(python、lua,或者你感兴趣的语言),我只学过python,个人感觉找到一本好的教材后(我看的是简明python教程),只需要不长的时间就可以大致了解,只要能写个简单的小程序,知道编程的基本知识,理解wme的脚本就不是问题了。之后大家多交流,我会翻译一些网上的教程,或者做一些demo,希望论坛上有更多有能力的人参与到游戏制作中来~ |