jQuery实现俄罗斯方块中遇到的问题及解决方法

本文介绍了游戏开发过程中遇到的具体问题及解决方案,包括按键控制速度变化、使用setTimeout替代setInterval进行精确控制以及方块位置检测等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下写这个游戏时遇到的问题。

按键按下时,禁止重复触发

需求:按键按下时,speed在当前值的基础上减少300,speed -= 300
存在问题:按键一直按住不放时,speed就会一直持续执行自减运算
解决方式:设置一个flag,增加if条件。按键按下,flag值就改变,当keyup事件触发时,flag才会变回原值。

//keydown时触发
Game.prototype.speedUp = function(){
    if(!this.speedFlag){
        this.speed -= 300;//加速,减少掉落的时间间隔
        if(this.speed<50){
            this.speed = 50;
        }
        this.speedFlag = true;
    }

    console.log('speedUp'+this.speed);

}

//keyup时触发
that.speed += 300;
                if(that.speed>(500 - (that.level -1)*50)){
                    that.speed = 500 - (that.level -1)*50;
                }
                that.speedFlag=false;

按键控制setInterval的时间间隔

需求:按下向下的按键时,下落速度会加快,即setInterval的运行间隔会减小
存在问题:无论是在setInterval外部还是内部更改speed值,都只能在clearInterval之后,才能生效,无法满足需求
解决方式:将setInterval更改为setTimeout,在setTimeout里调用自身,形成递归,即可实现需求

方块位置检测

需求:没有方块存在时,直接下落到界面底部。有方块阻挡时,停在方块上面。
存在问题:如何记录已有方块的位置
解决方式:获取每一个方块的top和left位置,拼接成字符串,存入数组blockArea。每一次掉落时,都检测每一个方块的下一个位置是否已经存在在blockArea中,如果没有,就允许下落。否则停止下落,生成下一个方块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值