ame.Tile4 = function () {}; game.Tile4.prototype.walkable = false; game.Tile4.prototype.frame = 2; game.Tile4.prototype.ladder = true; game.Tile4.prototype.item = "ladder";
game.Tile5 = function () {}; game.Tile5.prototype.walkable = true; game.Tile5.prototype.frame = 1; game.Tile5.prototype.ladder = true; game.Tile5.prototype.item = "ladder";
这两个不同的方块(Tile4和Tile5)都具有frame属性,这是用来表示梯子后面(在屏幕上是下面层)的方块类型。他们还有值为true的ladder属性(用来表示这里有把梯子),值为"ladder"的item属性(用来attachMovie用的,复制ladder影片夹子)
在buildMap函数中复制ladder影片夹到方块中:
game.clip[name].gotoAndStop(game[name].frame); if (game[name].item != undefined) { game.clip[name].attachMovie(game[name].item, "item", 1); }
这段代码首先让方块显示正常的帧(由frame属性决定),然后判断item属性是否为空,如果不是(有值)就复制item表示的mc。你可以把item属性设定成别的值,这样就可以复制别的mc,在别的地方也可以用到,只是要注意别在一个方块中复制太多不同的mc。
为了不重复输入代码,我们把moveChar函数的结束部分修改一下,调用一个新函数updateChar:
updateChar (ob, dirx, diry); return (true);
这是updateChar函数:
function updateChar (ob, dirx, diry) { ob.clip._x = ob.x; ob.clip._y = ob.y; ob.clip.gotoAndStop(dirx + diry * 2 + 3); ob.xtile = Math.floor(ob.clip._x / game.tileW); ob.ytile = Math.floor(ob.clip._y / game.tileH); if (game["t_" + ob.ytile + "_" + ob.xtile].door and ob == _root.char) { changeMap (ob); } }
在fall函数中添加:
ob.climb = false;
修改detectKeys函数,添加上下键的监测:
if (Key.isDown(Key.RIGHT)) { getMyCorners (ob.x - ob.speed, ob.y, ob); if (!ob.climb or ob.downleft and ob.upleft and ob.upright and ob.downright) { keyPressed = _root.moveChar(ob, 1, 0); } } else if (Key.isDown(Key.LEFT)) { getMyCorners (ob.x - ob.speed, ob.y, ob); if (!ob.climb or ob.downleft and ob.upleft and ob.upright and ob.downright) { keyPressed = _root.moveChar(ob, -1, 0); } } else if (Key.isDown(Key.UP)) { if (!ob.jump and checkUpLadder (ob)) { keyPressed = _root.climb(ob, -1); } } else if (Key.isDown(Key.DOWN)) { if (!ob.jump and checkDownLadder (ob)) { keyPressed = _root.climb(ob, 1); } }
当我们检测了左右键之后,我们判断英雄是不是不在跳跃过程中(!ob.jump),而且利用checkUpLadder函数和checkDownLadder函数判断附近是不是有梯子, 如果一切正常,调用climb函数来移动英雄。
攀爬动作的函数
我们将要创建3个新的函数,1个为了检测是否能往上爬, 1个为了检测是否能往下爬,还有一个是实现攀爬动作的函数。
function checkUpLadder (ob) { var downY = Math.floor((ob.y + ob.height - 1) / game.tileH); var upY = Math.floor((ob.y - ob.height) / game.tileH); var upLadder = game["t_" + upY + "_" + ob.xtile].ladder; var downLadder = game["t_" + downY + "_" + ob.xtile].ladder; if (upLadder or downLadder) { return (true); } else { fall (ob); } }
这段代码首先计算英雄的上下两个y坐标(头和脚),根据所在的区块的ladder属性就可以判断是否可以往上爬。如果上下都没有梯子,我们检测英雄是否应该掉下来。
function checkDownLadder (ob) { var downY = Math.floor((ob.speed + ob.y + ob.height) / game.tileH); var downLadder = game["t_" + downY + "_" + ob.xtile].ladder; if (downLadder) { return (true); } else { fall (ob); } }
为了检测往下的攀爬动作,我们需要英雄脚底下方块的ladder属性。 和往上爬不同,我们还要考虑到英雄接下来(移动结束)所在的方块的ladder属性(ob.speed+ob.y+ob.height)。
function climb (ob, diry) { ob.climb = true; ob.jump = false; ob.y += ob.speed * diry; ob.x = (ob.xtile * game.tileW) + game.tileW / 2; updateChar (ob, 0, diry); return (true); }
在climb函数中,我们首先设置climb标记为true,jump标记为false。然后计算新的y坐标,把英雄放在梯子方块的中间,ob.x = (ob.xtile * game.tileW) + game.tileW / 2;
英雄可以在梯子左侧或右侧抓着梯子爬,但是这样不太雅观:)
最后我们利用updateChar函数移动英雄到正确的位置。
下载源文件
愚蠢的敌人
我们的英雄已经很完美了,但是他很无聊,唯一能做的只是来回走。我们需要别的东西。不是食物,不是饮料,也不是美女,我们需要的是——一些敌人。敌人就像加在汤里的盐,缺了它,一切都索然无味。好的游戏中会有聪明的敌人,但是我们从一些最笨的敌人开始做起。他们所做的仅仅是来回走,顺便检测是不是碰上英雄了。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>