HTML5 2D平台游戏开发——角色动作篇之斩击

  目前为止,角色除了基本的移动外还什么都不能做,于是我打算先实现角色的攻击动画。角色的普通攻击一共可以分为三个阶段:

一段斩
二段斩
三段斩

触发方式为角色站立时按下J(攻击)键,角色开始攻击,在此期间连续快速敲打J键,可继续触发后续攻击。最终效果如下:

(AD移动,K跳跃,J攻击,U冲刺)

之前已经使用了状态机来控制角色的行为,现在再用它来分析角色攻击阶段所发生的事情:

这里把攻击分为三种状态,目的是为了方便控制和在状态间转化,以下是updateIdle中的部分代码,用于站立过渡到攻击状态:

updateIdle:function() {
    //省略部分代码
    if (key[74]) { //攻击
        if (!this.attacking && this.keyPressCounter++===1) {
            this.attacking = true;
            this.state = STATE.ATTACKING;

            this.play(); //播放攻击动画
        }
    } else {
        this.attacking = false;
        this.keyPressCounter = 0;
    }
}

然后由攻击状态可以过渡到二段攻击状态,也可以不进行任何操作恢复到站立状态:

updateAttacking:function() {
    let walked = false;
    //若此阶段没有按下攻击键,则将连发锁重置
    if (!key[74]) this.keyPressCounter = 0; 

    if (key[85]) this.dashing = true;

    //在攻击过程中如果按下移动键,则在动画第8帧时就能移动而不用等到动画结束
    if (key[65] || key[68]) {
        walked = true;
        if (this.getCurrentFrameIndex() >= 8) {
            this.state = STATE.WALKING;
            this.play();
        }
    }

    //仅动画帧<=7时按下攻击键可出现二段斩
    if (this.getCurrentFrameIndex() <= 7) {
        //如果没有连发锁,一直按住攻击键就能触发二段斩,不符合游戏逻辑
        if (key[74] && this.keyPressCounter++===1) {
            this.comboCounter = 2;
        }
    }
    //动画开始到结束期间没有执行任何操作则执行此段分支恢复到Idle状态
    else if (this.isAnimationEnd()) {
        this.state = STATE.IDLE;
        this.play();
    }

    if (this.comboCounter === 2) { //执行二段斩
        if (this.getCurrentFrameIndex() <= 7) {
            this.state = STATE.ATTACKING_2ND;
            this.play();
        }
    }
}

根据这种思路,可以很快完成updateAttacking2ndupdateAttacking3nd方法。

除此之外,角色还有很多种攻击方式,有时间的话会继续更新。

时间: 2024-10-10 08:58:34

HTML5 2D平台游戏开发——角色动作篇之斩击的相关文章

HTML5 2D平台游戏开发——角色动作篇之蓄力技

在很多动作游戏中,玩家操控的角色可以施放出比普通攻击更强力的蓄力技,一般操作为按住攻击键一段时间然后松开,具体效果像下面这张图: 要实现这个操作首先要记录下按键被按住的时间,初始是0: this.sabreChargeTime = 0; 接下来是能够施放技能所需要的时间,超过这个时间后松开按键,即可施放出技能,否则无效: this.MAX_SABRE_CHARGE_TIME = 150; 代码结构如下: if (key[74]) {//攻击 this.updateSabreCharge(); /

HTML5 2D平台游戏开发——角色动作篇之指令技

一般在动作游戏中,玩家可以通过对输入设备输入一系列的指令让角色完成某个或多个特定的动作.以格斗游戏<拳皇>为例,键入↓→↓← + A or C可以触发IORI的必杀技八稚女: 通过一系列输入最终让角色完成某个动作,就是指令技.其原理是通过将玩家的键入与指令技列表中的键位进行比对,如果一致,就匹配成功.以下是JavaScript的简单实现: class Instruct { constructor(callback) { this.instructs = {}; this.MAX_INTERVA

HTML5 2D平台游戏开发——地图绘制篇

此前已经完成了一部分角色的动作,现在还缺少可以交互的地图让游戏看起来能玩.不过在开始之前应当考虑清楚使用什么类型的地图,就2D平台游戏来说,一般有两种类型的地图,Tile-based和Art-based,即基于瓦片风格和美术风格两种.Tile-based的典型代表是<Super Mario>(超级马里奥),Art-based记不太清楚了,能够回想起来的是去年出的一款叫做<Owlboy>(猫头鹰男孩)的游戏.      Super Mario  Owlboy 由于Art-based的

开发者必须mark的一款2D移动游戏开发工具

摘要:灸热的夏季渐行渐远,凉爽的秋季迈着轻盈的脚步悄悄来到我们身边.站在初秋的窗前,凝望着远山.白云,总会心生很多遐想,总会有百感交集的情愫浮上心头.我想我是喜欢这个季节的."早上好"."今天又堵车了",伴随着同事们的说话声,突然意识到,额.我神游了--咳咳.步入正题,小编今天跟大家分享一款轻轻松松便能够实现2D画面动态光影的开发工具--Sprite Lamp. 何为Sprite Lamp? 开门见山,Sprite Lamp是一款能够帮助游戏开发者将2D画面与动态光

HTML5面向对象的游戏开发简单实例总结

在阅读一本HTML5游戏开发相关书籍时发现一个很好的例子,通过这个例子可以对面向对象的开发进行更深入的理解.这个对象要实现的是:将一个CSS sprite中的图像绘制到canvas中.首先创建一个SpriteSheet对象,代码如下: var SpriteSheet = new function(){ this.map = { }; this.load = function(spriteData,callback){ this.image = new Image(); this.image.on

Html5+Lufylegend.js游戏开发(一)引擎介绍及原理

Yorhom|2013-09-26 10:30|次浏览| 游戏开发(4)HTML5(124)游戏引擎(33)Lufylegend.js(1) Html5游戏开发最近受到很多开发者的关注.但是html5本身不是为游戏开发而量身定造的,所以开发起来十分麻烦.因此挑选好的引擎对游戏开发十分有帮助. 在游戏开发中,有这么几种程序语言: C++配合OpenGL(移动端游戏开发) C++配合DirectX(PC端游戏开发) Java (移动端游戏开发) ActionScript(网页游戏开发) html5在

Canvas 2D小游戏开发总结-1

由于需要快速开发 在拿到需求时,并没有时间去学习Cocos2d-JS\Egret\lufy legend这样的H5游戏引擎 于是硬着头皮直接用js建模.响应用户.渲染画面 在此要感谢这篇文章http://www.lostdecadegames.com/how-to-make-a-simple-html5-canvas-game/给我的启发 然后我罗列一下开发过程中遇到的问题,以便更好地完善自己的游戏框架 1.按钮问题dom vs canvas 有时候有代码洁癖,会觉得用canvas做代码看起来干

HTML5吃豆豆游戏开发实战(四)2d碰撞检测、重构-第二篇

今天下午在家没事,写代码.先总结一下学习HTML5和JS的一些经验,再来说游戏的事吧! 这完全是一个HTML5和JS的入门新手的见解,如果您和我一样是新手的话,欢迎交流,当然,高手如果不介意的话,帮小弟指点一二那就更好啦,谢谢,嘿嘿!入正题吧! 1.语法方面 1.1  JS关于数组的定义方法要注意: 比如:var walls = [new Wall(262,200,100,30),new Wall(662,60,30,400),new Wall(762,300,200,30)]; 这是定义一个墙

HTML5吃豆豆游戏开发实战(一)使用Canvas绘制游戏主角

最近在学习HTML5,爱因斯坦曾说过,"最好的学习就是自己去经历".于是,我想在学习HTML5的同时,做一款简单的小游戏,这样学习起来也会很有趣的,我想做的是以前小时候玩儿的小霸王上面的很经典的一款游戏,叫"吃豆豆",后面有怪物跟着跑,蛮好玩的,还很虐心,相信大家都玩儿过. 吃豆豆就是这款啦: 我就用前面学的一些HTML5的简单的一些知识来简单模拟这款游戏吧.我做这款游戏不打算用图片,全部用canvas来画,这样才有意思,嘿嘿. 正如大家所看到的,我们游戏的主角就是