两章内容比较少,合在一起。
* c# D/ X3 T/ f; G6 G- }8 _0 g6 ^" K7 Y0 C( Z9 _0 w+ Q8 {
( w2 c3 B& E7 {6 g[层]' i& I0 r2 d1 B: H
+ g" Z9 y3 `* C( b/ g% u8 F) y! J% S这一章我们将实现多层卷轴(原文parallax scrolling貌似是平行卷轴,个人认为多层卷轴更贴切)的效果,就像你坐车时看窗外,近处的树和远处的山川向后退的速度是不一样的,wme可以通过添加层实现场景分不同部分卷动的效果。在步骤一中我们知道如果场景所用图片尺寸大于游戏窗口,场景就会在必要时卷动,并且场景越大,卷动速度越快,假设你有三个层,分别存放三张场景图片(比如天上的月亮、远处的高山、近处的公路),并且每张图片宽度都不一样,就会分别以不同的速度卷动,实现多层卷动的效果。! Z0 ^/ f7 I! F7 _
" q4 o" ^* r# F& h, V& c- B# i. \8 U
每个场景可以拥有多个层,数量不限。
! `/ n+ _" {+ T$ W- R1 b
7 K: A, I$ y( W1 a在本章我们将为场景添加一个层作为窗外的天空。
) e0 i! V* R" \' b
6 V2 Z7 y+ i) u天空的图片已经在 “data\tutorial\gfx”文件夹下准备好了,在PM 中为MyScene导入sky.bmp。$ V! h, K) V9 \5 m( W2 u
* W9 A$ N6 N( g& U2 ^
在SceneEdit中打开MyScene.scene。
: F* r' u' L+ C+ v- T : N" x) R9 e) r* ?5 `: V
在Layer栏中点击Add layer按钮添加新的层。
. j$ ]8 ^1 p* ~: s9 f6 v5 N0 m @6 j- X3 f d* G4 J* U
& ` m5 N% u/ \- h5 z( T* _
) A c m0 _+ M2 e0 m1 J$ L* E% i3 l/ z6 F4 y! [1 X9 g0 X
SceneEdit会弹出一个窗口填写层的信息(新版本里多出了一个close up选项,我没搞懂是干什么的- -大家研究研究),将名称改为sky,并将尺寸改为800,716。由于长度和窗口长度一样,这个层在水平方向不会卷动,而main层会卷动,就达到了我们想要的效果,而宽度为716,与main层相同,这样在纵方向上该层就会与main层同步卷动。
2 o0 r+ w8 e* Y$ m0 D& _* i: R& w8 Z+ { K
![]()
* ^- Q- \% {8 ?5 L$ u, n
$ k1 B h. I: p$ t点击OK。使用上下箭头将sky层移至main层上方,层的顺序影响绘制的顺序。
8 |1 r! O: D: v) y0 y
- ^- i% M7 h* k# B! D1 s ; _+ u( h5 T+ R- a
+ y2 s' K& k- F5 @) d v0 N
接下来要做的就是添加一个实体来放置天空的图片,如下图选择Add sprite entity,将新建的实体改名为sky并将图像改为之前导入的sky.bmp。 a& ^/ @) d( ?
: V) e- g+ E4 A6 ]& i5 }( W
注意:新建的层可以添加实体,但只有main层可以添加区域。, E" O. n5 g$ P
7 A! I8 ~8 L/ v, |
6 c# D( Z$ n2 b: U3 E0 n
: e2 f8 N& @) g( h6 r, L a
如下图移动到合适的位置。" o! t6 r$ e* r: v( k
& g! m: t! A( h( r/ D7 @
![]()
) S" ?& k9 g/ o3 O7 u; m
' Y2 x) Y4 ]4 P2 w J0 i( C8 ^保存并测试一下效果。
$ P* o7 j% u6 j6 m, Y! w( Y5 C8 |0 O: t6 K3 J/ D. |
[场景设置 ]! J- g: E" x) I9 b$ X2 ]% b# i
% Z4 o7 A0 d$ P: d0 Y引擎可以自动保存场景中物体的状态,并在下次角色来访时还原,还可以使场景中的对象记住它们所使用的sprite(你可以使用脚本改变)。
% N, c2 |2 x- |9 f9 A# u在SceneEdit左边工具栏中找到Properties选项卡,下图中红框勾选的两个选项可以决定是否开启场景自动保存的功能。& e9 F" I4 m% S/ ]' J
: {$ h" @1 X- E
![]()
2 N* b! ?: c# o& B8 \% n+ p
. |% K% t3 ? ]# \9 m8 _/ p# L; U" X+ m$ h& b
注意:保存场景的功能与你场景中对象的名称有关系,所以你的场景中不应该有重名的对象,否则可能出错。" v# N9 E4 R+ H q
% n W ^/ C: t6 z7 g; t6 S6 {* R; R[场景转换]
1 [/ P/ s7 M+ V& s6 E- z% h" W8 |- |0 _$ C# T0 T
你的游戏一般不会只有一个场景,使用脚本可以把各个场景连接在一起。我们在步骤7种已经把门做成了一个可以互动的区域实体,按之前所教的,给门添加一个脚本door.script并编辑。
5 n4 N4 b- T* P! ?. u0 d
+ z# a7 C; N" k& V3 h- l![]()
8 O. I4 q( G5 L; \; F ( n; r4 p4 k% d
我们只需要门在左键点击后能进入下个场景,所以只需要有以下的内容
+ \) f' z/ ~; {3 t1 U0 W: U& X' B7 o3 e
% z; P3 E4 P% B5 |
#include "scripts\base.inc" |
[/table] | | Game.ChangeScene("scenes\menu\menu.scene"); | [table=100%,#66ffcc]} |
' `. U' y0 }* G Q% @# z' Z7 W+ n! G" H4 Q
大括号里一共有两句命令,第一句使角色在左键点击门后走到门旁边,第二句Game.ChangeScene("scenes\menu\menu.scene")使场景转换,目标场景由括号里的内容决定,你只需要改成其他文件夹里的场景文件就可以转换到别的场景了。
6 I- V3 ]% E9 P) k; V7 d( B( jSee the WME demo project for a finished example./ u+ z/ x! a+ {/ c/ s$ l$ q8 \
: V f* T( u0 o6 k, c# M
保存并测试。
3 I h" x1 A( b3 F! }, T7 g# f& o5 K [
8 i/ h" _. F3 c# r0 n+ n/ N% T
这样,你就完成了一个场景的搭建~Congratulations!" c- y( R* X. d% ^( a C, e
/ {$ z; D7 \2 a( a8 g
* {# E* l6 T8 f# h5 p5 `5 n3 k7 {3 e
7 |3 [' g% K! s
! A( o9 @) @% z+ ]6 w& ^" j' b5 D3 S9 I& ?3 u+ ?
搭建场景是使用wme制作游戏耗费时间最多的内容之一,剩下的难点也只有对脚本的理解和运用了吧。2 s2 s( w. H/ Y2 C$ o" k4 q
这九个步骤大致按照帮助文档写的,感觉有很多表达不是很好的地方,也有一些问题没有搞明白- -希望大家一起讨论研究下。
$ i G# ~: Q6 X) e7 g5 f4 U: m, y8 R4 {
$ ~: }2 p2 [. z; q$ H2 N
下一章是关于sprite的。
/ g" K% g7 q$ k
: G n% L* v" l0 ]: _) A Z2 H
1 z+ s: X0 {! x这里要和各位讨论一个问题,就是脚本的教学,之后有很多内容涉及到脚本,帮助文档的也就是放一段代码在那,没有详细的说明。而帮助文档除了关于场景搭建的教学,另一大块内容就是脚本,不过关于脚本并没有什么教学,只是象说明书一样,其中大量的函数更是没办法一个个讲解。有编程基础的人一看就大概明白,不懂编程的人要从头学起。我的想法是没有基础的人找一门语言入门(python、lua,或者你感兴趣的语言),我只学过python,个人感觉找到一本好的教材后(我看的是简明python教程),只需要不长的时间就可以大致了解,只要能写个简单的小程序,知道编程的基本知识,理解wme的脚本就不是问题了。之后大家多交流,我会翻译一些网上的教程,或者做一些demo,希望论坛上有更多有能力的人参与到游戏制作中来~ |