优化游戏控制

如果童鞋们已经完成了前十章,现在的游戏界面应该就是点击页面上的小控制器来控制玩家移动。

在手机上这样操作可能还很正常,但是在PC页面上点击就不够灵活了。

我们可以通过JavaScript监听键盘点击事件来实现这个功能。

做题时间

  1. 通过监听document对象的onkeydown事件,实现方向键控制移动。

index.html

  1. ...
  2. <script>
  3. var app = new Vue({
  4. ...
  5. created() {
  6. ...
  7. this.initDirectionKey();
  8. },
  9. ...
  10. methods: {
  11. initDirectionKey() {
  12. var that = this
  13. document.onkeydown = function () {
  14. if (event.keyCode === 38) {
  15. console.log('up')
  16. that.clickDirect('up')
  17. } else if (event.keyCode === 37) {
  18. console.log('left')
  19. that.clickDirect('left')
  20. } else if (event.keyCode === 39) {
  21. console.log('right')
  22. that.clickDirect('right')
  23. } else if (event.keyCode === 40) {
  24. console.log('down')
  25. that.clickDirect('down')
  26. }
  27. }
  28. },
  29. ...
  30. }
  31. })
  32. </script>
  33. ...

没接触过前端开发的童鞋可能会问,为啥这里要用var that = this呀?直接在闭包里用this不行吗?的确,在PHP的闭包中,$this对象会自动从父作用域进行绑定,但在JavaScript闭包中的this会在函数真正被调用执行的时候才确定,如果想达到PHP的自动绑定效果,需要使用ES6语法的箭头函数来编写闭包。有兴趣的童鞋就请自行查阅啦~

大家做出来了吗?应该挺简单的吧,下面我们看一下实际运行效果。

11 优化游戏控制 - 图1

Homework

有前端开发经验的童鞋可以尝试进行手机浏览器适配,让游戏支持竖屏操作,不熟悉前端的童鞋可以参考master分支的前端代码。

本章对应Github Commit扩展一:优化游戏控制