Skip to content

Ghost-White/Ghost-White.github.io

Repository files navigation

Ghost-White.github.io

地址:https://ghost-white.github.io/

Tetris 俄罗斯方块技术难点:

1、碰撞检测&边界检测

碰撞检测是将棋盘矩阵与积木矩阵相加,元素大于1则发生碰撞。碰撞检测属于提前检测,因此计算的是当前积木进行相应变换后的位置及形状的碰撞检测。另外在左右移动、下移、快速下落、变形前都需要预先进行碰撞检测及边界检测。

2、积木变形

一开始使用的是积木所在父元素在样式上进行旋转,同时将积木矩阵进行旋转实现,但是积木的变形不仅仅有旋转,还有翻转,因此最后使用的是19种积木元素,在变形时进行样式和数据的替换。

3、JavaScript异步编程

网上的其他一些js写的俄罗斯方块,它们的左右移动和向下移动基本上是采用瞬间移动,在样式上直接改变元素定位。这种实现方式虽然简单,但是在视觉效果上会有明显的跳跃,因此我采用的是平滑移动的方式,每一次左右下移都是一次动画。

这种实现方式带来了很多的bug,正常操作不会有什么问题,但是如果在正在下落的短暂时间内触发左右平移或快速下落事件,这些事件就会立即执行,然而现在的animate还没有执行完成,等插入的左右下移事件函数执行完成后,会继续执行未完成的animate(即使关闭下落的timer也不会有作用),使得在左右下移事件中初始化了的样式,在剩余的animate的执行过程中发生改变,带来问题的其实是animate函数。

解决方案一:触发事件时,关闭animate中的timer,或者自定义动画函数,在jquery源码中找到了stop函数,通过它可以停止动画。

解决方案二:在animate过程中,关闭事件监听,这种解决方案会造成点击失效的情况,用户体验不佳

最终采用了方案一。

Releases

No releases published

Packages

No packages published