Flash游戏开发(12) - 腾云驾雾

腾云驾雾

到目前为止,我们已经做出了阻止英雄通过墙的效果。很有趣,不是吗?许多游戏还有一类叫做“云”的方块,角色门可以左右穿行他们,甚至可以从下面跳上去,
但是当下落的时候,他们确是不可通行的,英雄会停在上面。看这个例子:


你看到区别了吧?让我们来看看图。
这个是普通的砖墙方块,英雄不能从任何角度穿过它:


再来看云。除了上面,英雄可以从任何方向穿过。
如果英雄从上面掉下来,我们让他停在上面。


首先我们要做一些带有“cloud”属性的方块,
如果cloud属性是true,这个方块就是一块“云”。定义:

game.Tile4 = function () {};
game.Tile4.prototype.walkable = true;
game.Tile4.prototype.cloud = true;
game.Tile4.prototype.frame = 4;

它的walkable属性是true,意味着英雄可以穿行过去。
为了让英雄能站到上面,我们需要创建新的函数。

function checkIfOnCloud (ob)
{
 var leftcloud = game["t_" ob.downY "_" ob.leftX].cloud;
 var rightcloud = game["t_" ob.downY "_" ob.rightX].cloud;
 if ((leftcloud or rightcloud) and ob.ytile != ob.downY)
 {
  return(true);
 }
 else
 {
  return(false);
 }
}

我们检测英雄的左下角和右下角的方块是不是云,只要有一块是,就返回true。否则返回false。

现在我们需要在两个地方调用这个函数:
moveChar函数中往下运动的时候,还有fall函数中检测英雄是不是继续下落的时候。

在moveChar函数中if (diry == 1)的后面原来有这句:

if (ob.downleft and ob.downright)
{
 ...

改成这样,加上云的检测:

if (ob.downleft and ob.downright and !checkIfOnCloud (ob))
{
 ...

在fall函数中也一样,把这个:

if (ob.downleft and ob.downright)
{
 ...

换成:

if (ob.downleft and ob.downright and !checkIfOnCloud (ob))
{
 ...

只有左下方和右下方都可通行,而且下面的不是云,英雄才能往下掉。

enjoy!

Google