• Html飞机大战(十七): 优化移动端


    好家伙,继续优化,

     

    好家伙,我把我的飞机大战发给我的小伙伴们玩

    期待着略微的赞赏之词,然后他们用手机打开我的给他们的网址

    然后点一下飞机就炸了。

    游戏体验零分

    (鼠标点击在移动端依旧可以生效)

     

    好了所以我们来优化一下这个触屏移动事件

     

    由于没有参考,就去翻文档了

    触摸事件分三个:touchstart、touchmove和touchend

    看名字大概是触摸点开始,触摸点移动,触摸点离开。

     

    于是开始试探性的增加一个屏幕触碰事件

    复制代码
    //为canvas绑定一个屏幕触碰事件 触碰点正好在飞机图片的正中心
        canvas.addEventListener("touchstart",(e)=>{
          let x = e.offsetX;
          let y = e.offsetY;
          hero.x = x - hero.width / 2;
          hero.y = y - hero.height / 2;
        })
    复制代码

    然后就寄了,参数有问题。

    移动触点事件touchstart事件是不能直接拿到鼠标在canvas画布中的坐标。

    参数e.offsetX直接就报undefind

     

     

    去查百度了:

    javaScript — touch事件详解(touchstart、touchmove和touchend) - 腾讯云开发者社区-腾讯云 (tencent.com)

    (挺详细的)

    复制代码
    每个Touch对象包含的属性如下。
    
     clientX:触摸目标在视口中的x坐标。
     clientY:触摸目标在视口中的y坐标。
     identifier:标识触摸的唯一ID。
     pageX:触摸目标在页面中的x坐标。
     pageY:触摸目标在页面中的y坐标。
     screenX:触摸目标在屏幕中的x坐标。
     screenY:触摸目标在屏幕中的y坐标。
     target:触目的DOM节点目标。
    复制代码

     

    还是拿不到鼠标在canvas的坐标

     

    那我们试着拿到页面中的坐标然后再去进行加减操作,然后还是不行

     

    好家伙,拿不到鼠标移动时鼠标在canvas画布中的坐标,

     

    所以,我们动点歪脑经

     

     

     

    我们拿到屏幕坐标来计算就好了

     

    复制代码
    canvas.addEventListener("touchmove", (e) => {
          // let x = e.pageX;
          // let y = e.pageY;
          console.log(e);
          // let x = e.touches[0].clientX;
          // let y = e.touches[0].clinetY;
          let x = e.touches[0].pageX;
          let y = e.touches[0].pageY;
          // let x = e.touches[0].screenX;
          // let y = e.touches[0].screenY;
          let write1 = (document.body.clientWidth - 480) / 2;
          let write2 = (document.body.clientHeight - 650) / 2;
          hero.x = x - write1 - hero.width / 2;
          hero.y = y - write2 - hero.height / 2;
    
          // hero.x = x - hero.width / 2;
          // hero.y = y - hero.height / 2;
          console.log(x, y);
          console.log(document.body.clientWidth, document.body.clientHeight);
          e.preventDefault(); // 阻止屏幕滚动的默认行为
    
        })
    复制代码

    猜猜我干了什么

     

     我们想办法用页面坐标减去空白部分长度就可以得到鼠标在canvas画布中的坐标了

    纵坐标同理

    (nice)

     

     

     (此处为平板模式,完成了触屏连续移动)

    效果还行

     

  • 相关阅读:
    【Libevent】Libevent数据行为
    centos安装nacos
    vue的函数式组件
    i7 11800h和i7 12800hx选哪个好
    audit交叉编译
    Cyanine5.5 tetrazine|Cy5.5-tetrazine|花青素Cy5.5四嗪
    R-Drop: Regularized Dropout for Neural Networks解读
    Linux防火墙之SNAT与DNAT
    开源|用 Java 实现一个生成 Markdown 文本的工具
    linux配置ssh无密码登录失败的一种原因
  • 原文地址:https://www.cnblogs.com/FatTiger4399/p/16708996.html