自己做一款游戏

用Constuct2制作一个简单的游戏


开发一个游戏对很多人来说是个可望而不可即我梦想,但是用一款软件就可以轻松制作出一个简单的游戏。这个软件就是contruct2。
此处输入图片的描述
如果有兴趣的话你可以买全版,可是用于教学和体验的话用试用版即可。
好,接下来让我们开始学习怎么制作游戏吧。

首先,新建一个项目:

此处输入图片的描述
这时你不用进行任何操作。接下来给游戏添加一个背景。双击画布,弹出以下界面:
此处输入图片的描述
选择Tiled Background。这时,鼠标指针形状变成了十字形,你可以在布局的任何位置点击,我们在布局中间差不多位置点击,弹出Texture editor对话框,我们点击打开文件夹图标,选择一个背景(软件自带如图)
此处输入图片的描述此处输入图片的描述
接下来把背景调到适应画布:
点击背景,在右侧属性框把Size改为(1280,1024)。
此处输入图片的描述

完成后大概是这个样子:

此处输入图片的描述

这时,你可以点击run图标运行,浏览器(IE9或者Chrome,火狐最好也是新版本)将自动打开并展示游戏。

接下来,我们来添加更多的对象。首先我们先去把背景瓦片对象锁定了,这样才不会被我们再次选中,和PS,FL里的锁定一样。

画布由多个层组成,我们可以在不同的层放置不同的对象,可以通过调整层的上下顺序来调整对象的前后显示,层可以被隐藏或者锁定,平滚特效等。背景瓦片放置于最底层,其他对象如玩家,怪物,NPC等放置在上面的几层。

我们可以通过Layers tab来管理层,和Project bar工程面板在一个选项卡中。
此处输入图片的描述

点击layer,将背景layer1更名为Background并锁定。然后新加入一个层layer2,我们将要在这个层上进行主要的操作,所以把它改名为Main并选中。

此处输入图片的描述

添加输入控制对象

回到画布中,同样双击插入另外一个对象,这次我们选择Mouse对象,我们需要鼠标输入控制。同样的添加Keyboard对象。
注意:这些对象不需要置于画布中,他们是隐藏的,自动在工程中起作用,现在工程中的所有层都可以使用鼠标和键盘输入控制了。

游戏对象

是时候来添加游戏对象了,如玩家角色,怪物角色,子弹,游戏特效等。
软件自己给的图片如下:
玩家:此处输入图片的描述
敌人:此处输入图片的描述
子弹:此处输入图片的描述
爆炸特效:此处输入图片的描述
当然,如果你有好的图片也可以添加,也可以自己画(画工不好,不敢试)。
对于这些对象,我们用sprite(精灵)对象来置入,方法跟背景和Mouse对象一样:
1、双击插入新对象
2、双击选择Sprite对象
3、当鼠标变成十字,在画布中点击
4、弹出对话框,点击open 图标,加载四张素材图片中的一张
5、保存并关闭对话框
然后将子弹和爆炸移到画布外,因为刚开始我们看不到。
默认CT2会自动把我们的对象命名为Sprite,Sprite2,Sprite3,Sprite4,我们可以在他们各自的Properties bar属性面板里的Name属性里更改。依次更改Player,Monster,Bullet,Explosion(玩家,怪物,子弹,爆炸特效)。

此处输入图片的描述

添加行为

在游戏中,每个角色都有自己的行为,比如给地板添加Solid行为,角色就会在上面跳来跳去(像超级玛丽)。关于行为,软件中预设的已经够我们用了。下面是我们将要用到的几种Behavior:

8 Direction movement: 这个行为可以让你实现给角色添加方向移动(方向键)的功能。
Bullet movement:这个行为让对象朝着它当前的角度移动,比如,本例中玩家射出的子弹的移动行为,不要被这名字迷惑了,它不只适用于子弹,也可以应用于怪物等移动。在Contruct2里所有的移动行为都是通过添加速度向前行进。
Scroll to:这个行为可以让运行时画布随着对象移来移去(滚动)。这个行为很适合于角色。
Bound to layout:这个行为可以防止对象离开画布区域。这个行为对于角色来说也很重要。
Destroy outside layout:当对象离开画布区域时,就将其销毁。比如本例中的子弹,如果不销毁的话,虽然子弹离开画布区域了,但是依然暂用内存。所以我们需要及时销毁不再需要的对象。
Fade:这个行为可以给对象添加淡出效果,用于爆炸等特效的消失。

接下来我们就来给对象添加相应的行为.

如何添加行为

我们给角色player添加8 direction movement行为:选中player,在properties bar属性面板里,找到Behaviors分类,点击Add/Edit弹出Behaviors行为对话框。

此处输入图片的描述

点击绿色加号,双击8 direction movement:

此处输入图片的描述

接着以同样的方法给player添加Scroll To和Bound to layout行为,此时”player:Behaviors”对话框如下:

此处输入图片的描述

关闭行为对话框。点击运行查看游戏!此时我们已经可以移动角色,屏幕也跟随角色移动,而且通过设置Bound to layout行为后,角色也不能移出画布区域。

添加其他行为

我们以同样的方法给其他对象添加相应的行为如下:

-给Bullet对象添加Bullet movement和Destroy outside layout行为。
-给Monster对象添加Bullet movement行为。
-给Explosion对象添加Fade行为。Fade行为默认会销毁对象,所以不用担心对象有没有销毁。

此时,我们再运行查看游戏,会发现怪物一下子就飞出去了。我们来编辑下怪物的行为,选中Monster怪物对象。看到properties bar属性面板中,我们会发现属性栏里多出了其他一些属性,这些属性是添加了行为后才有的。

此处输入图片的描述

更改speed速度为80(单位:像素/秒)
同样的方法给Bullet子弹对象的速度更改为400,Explosion对象的Fade行为的Fade out time淡出时间为0.5秒。

添加更多怪物

按住CTRL,拖拽Monster对象复制几个实例。他们都是Monster对象类型的。

使用Ctrl +拖拽 创建7到8个新的怪物实例(为了区分下,往下我们用实例来表述)。放置怪物的时候不要太靠近玩家。否则角色一下子就挂了!此时你的画布类似如下:

此处输入图片的描述

接下来我们要进行最重要的一步:添加事件。

添加事件

事件事实上是一种函数。首先,在画布区域上方的选项卡上切换到Event sheet1事件编辑器面板,一个列表的事件被成为Event sheet事件表。

我们来创建第一个事件
我们将使player(发射口)一直看向鼠标,这样我们点击发射子弹的时候,子弹将发往鼠标方向。如下:

此处输入图片的描述

我们开始制作该事件。在event sheet的空白位置双击,将打开添加事件对话框:

此处输入图片的描述

不同的对象根据他们要做的行为拥有不同的条件和动作,在对话框中双击System对象,对话框中列出了所有System对象的条件:

此处输入图片的描述

双击Every tick条件插入到事件表中。对话框将关闭,Every tick事件被创建,但没有actions(动作)。如下:

此处输入图片的描述

对话框中列出了可以添加动作的对象,双击player对象,对话框列出了player对象可添加的动作如下:

此处输入图片的描述

选取Set angle towards position动作。该动作会自动计算角色到给定的X,Y坐标的角度。
接下来要指定X,Y坐标值(动作的参数,条件同样可以带有参数)。我们输入Mouse.X和Mouse.Y(也可以输入表达式如:Mouse.X+100,虽然用的并不多)
此时,你运行就可以看到效果了。
如果提示错误:Mouse is not any object name,确保你已添加了Mouse object鼠标对象!

你可能会担心如何记住所有可用的表达式。别担心,浮动在上边的object panel,默认处于半透明状态不会干扰你的注意力。移动鼠标到该面板上,单击,面板变完全可见。该面板起着字典的功能,可以帮你记住各类你可以使用的表达式。你可以双击表达式来插入,省的手动输入。
还有,点击对话框上的Done确定按钮。该动作就被添加了!如下:

此处输入图片的描述

第一个事件添加完毕!尝试运行游戏,角色在移动的时候一直朝下鼠标。

同理,我们继续给对象添加事件:
让角色可以射击
当玩家点击的时候,可以发射子弹。这可以通过Spawn an object动作来实现,该动作在同样的位置和角度(相对于角色)创建新的对象实例。子弹的Bullet movement属性将会使它向前飞出。制作如下事件:

条件:Mouse->On click->Left clicked(the default)
//鼠标->点击->左击(默认)
动作:Player->Spawn another object->For Object,choose the Bullet
view sourceprint
//Play对象->产生另外的对象->对象,选择子弹层,输入1(“Main”图层),Image point(子弹的发射起点)保持默认为0。如下:

此处输入图片的描述

条件:Bullet->On collision with another object->pick Monster。
//子弹->于其他对象碰撞->选择Monster怪物。
动作:Monster->Destroy
//怪物->消灭
动作:Bullet->Spawn another object->Explosion,layer 1
//在图层1 碰撞的位置产生新对象-爆炸特效
动作:Bullet->Destroy
view sourceprint
//子弹销毁
爆炸特效
运行游戏,尝试射击一个怪物,我们可以看到碰撞发生,爆炸特效也产生了,杯具的是,有个大大的黑色边框,好难看!
此处输入图片的描述

不用担心,我们可以去掉黑框,在工程面板或者对象面板点击Explosion object爆炸特效对象。在它的属性面板里设置Effect属性为Additive。再次尝试游戏可以看到,完美了

此处输入图片的描述

让怪物聪明一点

(添加怪物智能AI,专业说法,囧,本例可没那么高深)
当下怪物只会向右移动。我们来让他们更有趣些。首先让他们产生在随机的位置。
条件:System->On start of Layout
//系统->画布启动时
动作:Monster->Set angle->random(360)
//怪物->设置角度->0-360随机度数
Condition: System -> On start of Layout
Action: Monster -> Set angle -> random(360)
此处输入图片的描述
此时,怪物依然移出画布,再也看不到,接着我们再来修改,让怪物移动边缘处的时候,自动往回移动,并且添加智能,让怪物朝着玩家角色移动(自然是角色没挂的时候)。
条件:Monster->Is outside layout
//判断怪物是否要离开画布
动作:Monster->Set angle toward position->For X,Player.X - for Y,Player.Y
//设置怪物朝向角色的坐标

再次运行游戏。此时你可以看到怪物在画布里朝着不同的方向移来移去,最终都会朝着角色围过来。这个智能的行为咱们不编程看不到代码(就算编程也太难,囧,要不也不找这软件了哈),将就着看吧,似乎不错了!
此我们的角色还是无敌的,怪物却是太脆落了,子弹一碰就挂了,接着我们通过instance variables实例变量来修改这些。

实例变量

Instance variables实例变量允许每个怪物存储它自身的生命值。一个变量简化了说就是一个可以改变的值。他们单独存储,分别带他们相应的实例。

我们来为怪物添加health实例变量。在工程或对象面板选择怪物monster(注意monster的意思就是怪物,本教程翻译的时候好多地方都是这样注释的,因为实际制作中我们是用英文的)。亦或,在画布中选取monster怪物对象。这样属性面板呈现的是怪物的相关属性。在properties bar属性面板的Instance variables分类下点击Add/edit:

此处输入图片的描述

弹出实例变量对话框,类似于早前的行为对话框。本对话框允许你为对象添加或修改实例变量。点击绿色+号按钮来添加新变量。

此处输入图片的描述

在弹出的对话框中输入变量名health,保持类型为Number(数字型),设置Initial value初始值为5。这使怪物拥有5个生命值。当他们被子弹射到时,生命值减1,直到为0,被消灭。
当我们点击OK确定。变量就出现在实例变量对话框中以及属性面板中,可以通过Add/Edit链接修改。

更改事件

切换到事件表(event sheet)中,我们来更改怪物被消灭的事件。
找到事件Bullet-on collision with Monster.现在的动作是destroy monster,右击该动作,选择Replace。

此处输入图片的描述

弹出的对话框和新建动作的对话框一样,选择Monster->Subtract from(in the Instance variables catrgory)->Instance variable “health”,并输入值1。点击Done确定。该动作呈现如下:

此处输入图片的描述

emmmm…..到这就有点长了。。。放几张图自己看:

此处输入图片的描述

到这,游戏就大概成型了,还有些功能比如:Game over文字、让怪兽增加速度等等。这些可以通过百度自己了解。

总之。。。虽然这是我照着教程码的一篇博客,但是真的能做出来游戏,虽然比较low,但是玩着自己做的游戏确实很有成就感。

猜你喜欢

转载自blog.csdn.net/ZhangyunqingGC/article/details/78360290