h5 小游戏总结及踩坑记录

适配方案

这个项目里用的是 rem 适配方案,通过计算 设备宽度/设计稿宽度 的比例,来设置 html 的 font-size 属性,达到适配的目的,代码如下:

 

function setSize() {
  // 设备宽度
  let deviceWidth = window.screen.width;
  // 设计稿宽度
  const baseValue = 750;
  // html的字体大小 = (设备宽度 / 设计稿宽度) * 100
  document.documentElement.style.fontSize = (deviceWidth / baseValue) * 100 + 'px';
}

// DOM树加载完执行
window.addEventListener("DOMContentLoaded", function () {
  setSize();
})

// 屏幕变化就执行
window.addEventListener("resize", function () {
  setSize();
})

setSize();

资源的预加载

资源的预加载用的是 preloadjs

用法也是极其简单:

 

  var queue = new window.createjs.LoadQueue(true);
  queue.on("complete", this.allLoadComplete);   // 所有文件加载完成时触发
  queue.on("fileload", this.aloneLoadComplete); // 单个文件加载完成时触发
  queue.on("progress", this.fileProgress);  // 加载进度
  queue.loadManifest(allImg);   // 需要加载的资源数组
  queue.load();

如何解决需要引入很多图片的问题

这里用到了 webpack 的 api: require.context,当项目需要引入很多资源时,这项技术是必须要掌握的

如何实现换装

如何让人物换装也是一个问题,经过尝试后发现,直接切换精灵的 texture 可以达到这个目的

 

this.personContainers[key].children.map((item, index) => {
    if (item.type == type) {
      item.texture = loadSources[name].texture
    }
})

pixi 多个容器的排序问题

在 pixi 里,要想动态的改变某个精灵或容器的层级,不能只改一个,,还需要把其他不相干的元素的层级设低

举个栗子:

 

personContainers.map((item, i) => {
    item.zIndex = 0;    // 不相干的元素 层级设为最低
    if (index == i) {
      item.zIndex = 99; // 目标元素 层级设为最高
    }
})

精灵的 touchend 事件移动时会失效

具体为什么会失效还不知道,我的解决方法是:在给精灵绑定一个 touchendoutside 事件

touchendoutside:触摸开始、移出对象松开时触发

html2canvas 截取页面时图片模糊

如果截取的区域里有涉及到图片,不要用 background 设置图片,全部替换成 img 标签

这样可以大大提升图片的清晰度

ios 键盘会把页面顶上去 不会自动下来

问题描述:移动端 ios 键盘弹起后,会把页面顶上去,输入完成后页面不会自动下来

解决办法:

 

document.body.addEventListener('focusout', function () {
    window.scrollTo(0,0);
});

当监听到 body 里有元素失去焦点时,就把页面滚上去

focusout: 当元素即将失去焦点时,focusout 事件被触发。focusout 事件和 blur 事件之间的主要区别在于后者不会冒泡

—— MDN

如何监听 textarea 的输入

这个项目用了多行输入框 textarea ,发现直接在标签上加了监听事件后啥也没有...,后来找到了解决办法:

 

this.$refs.textarea.addEventListener('input', e => {
    console.log(e.target.value);    // textarea 输入的文字
}, false)

滑动加载以及获取body实际高度的坑

滑动加载的关键就是如果页面滑动到了底部,就进行数据的请求,要事先和后端沟通好数据怎么返回

滑动到页面底部的条件:滚动条离顶部的距离(document.body.scrollTop)+ 窗口的文档显示区的高度(window.innerHeight)>= 文档实际高度(document.body.scrollHeight)

这里有个坑,关于获取文档实际高度的:

document.body.scrollHeight 可以在手机上获取到实际文档高度,但在 chrome 里获取到的高度是 0

document.documentElement.scrollHeight 在 chrome 里可以获取到正常的,但在手机上获取的高度是 0

这样的话,还要判断当前设备是手机还是 pc 然后再去获取吗,No No No,有个优雅的写法:

 

// 获取文档实际高度/移动端
var bodyHeight = Math.max(
  document.documentElement.scrollHeight,
  document.body.scrollHeight
);

没有把基础的东西丢掉,此处应该有掌声 [啪啪啪]

vscode 返回上一个编辑点

当代码写的像又臭又长的意大利式代码时,需要去调试某个函数,发现另一个函数又有问题,看完之后还需要翻回来,这就很难顶了

后来发现了这个释放双手的快捷键 - 返回上/下一个编辑点:Alt + ←/→ (windows)

去除 iphone x 的小尾巴

大家管这玩意叫胡子,我比较喜欢叫小尾巴~,就是 iphone x 下面那一根玩意

我在这里就说说我是怎么用的

meta 标签里加上 viewport-fit=cover

 

<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover" />

然后在底部的样式里加上样式:

 

bottom: env(safe-area-inset-bottom);
bottom: 0;  // 这一句也要加上 没有小尾巴的机型需要用到这个样式

 

 

小程序跳转页面传值的问题

小程序跳转到其他组件时,如果需要带网址这类的参数的话,记得要转码,不然是传不过去滴

栗子:

 

let link = "https://www.baidu.com/"
wx.redirectTo({
  url: "/pages/index/index?url=" + encodeURIComponent(url), // 解码: decodeURIComponent
})

为什么要转码呢?

假设现在需要获取用户信息后传个网址给 index 组件,这时候,这个链接里是带有中文或者其他符号的,如果不转码,小程序会觉得你这个不是个可以识别的地址,会直接把域名后面的值给你去掉

 

ios 最新版系统 微信浏览器 html2canvas 生成图片失败

这个项目里有个生成图片的功能,需要保存用户操作过的一些东西,其他设备都正常,唯独 ios 最新版的系统有问题

debug 了一波后发现,这他瞄的根本没有执行这个函数,找一半天也没找到为什么,后来看 issues 发现有人说把版本换成 rc.4 的就可以了

emoji 表情转码

项目测试的时候,发现 textarea 标签里可以输入表情,紧接着,接口就报错了,一查看,虽然支持输入表情,但是不会自动对表情转码,所以提交接口的时候报错了,下面分享个 emoji 表情转字符的方法:

 

// 表情转字符
utf16toEntities(str) {
  var patt = /[\ud800-\udbff][\udc00-\udfff]/g // 检测utf16字符正则
  str = str.replace(patt, function(char) {
    var H, L, code
    if (char.length === 2) {
      H = char.charCodeAt(0) // 取出高位
      L = char.charCodeAt(1) // 取出低位
      code = (H - 0xd800) * 0x400 + 0x10000 + L - 0xdc00 // 转换算法
      return '&#' + code + ';'
    } else {
      return char
    }
  })
  return str
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HTML小游戏是一种基于HTML和CSS开发的网页游戏。H5小游戏则是指以HTML5技术为基础开发的游戏。 HTML小游戏的开发过程主要包括编写HTML标记、CSS样式和JavaScript脚本代码。通过利用HTML标记,可以定义游戏界面的布局结构,并使用CSS样式为其添加视觉效果。而JavaScript脚本则用于实现游戏的逻辑和交互功能。 H5小游戏则使用了更加先进的HTML5技术。HTML5提供了更多的功能和特性,比如画布(canvas)、音频(audio)、视频(video)等,这些功能可以实现更加丰富和复杂的游戏效果。同时,HTML5还支持跨平台运行,可以在不同的终端设备上进行游戏的体验,如PC端、移动端等。 无论是HTML小游戏还是H5小游戏,它们都具有开发周期短、易上手、跨平台等优点。同时,由于使用了Web技术,游戏的发布和更新也比较方便,玩家可以在网页上直接进行游戏,无需下载和安装任何软件。 随着HTML5技术的不断发展和完善,HTML小游戏H5小游戏在游戏界的影响力不断增强。如今,许多大型游戏公司纷纷将目光投向了HTML5游戏开发,并开发了许多富有创意和趣味性的小游戏,为玩家们带来更多游戏的选择和享受。 ### 回答2: HTML小游戏/H5小游戏是一种在网页上运行的小型游戏。它们通常使用JavaScript、HTML和CSS等前端技术进行开发,在支持HTML5的浏览器上进行实时游戏体验。这些小游戏可以轻松地在各种设备上运行,并且不需要安装任何额外的插件或软件。 HTML小游戏/H5小游戏的优势在于它们的跨平台性和无需下载的特点。用户可以直接在手机、平板电脑或电脑上来玩这些游戏,而无需经历繁琐的安装步骤。此外,由于这些游戏使用的是网页技术,开发者可以通过简单的修改来适应不同的设备屏幕大小和分辨率,从而提供更好的用户体验。 HTML小游戏/H5小游戏的类型丰富多样,涵盖了各种游戏类型,比如益智游戏、角色扮演游戏、射击游戏和竞速游戏等等。这些游戏往往具有简单易上手的规则和操作,因此适合各个年龄段的玩家。同时,由于HTML小游戏/H5小游戏开发相对简单,因此越来越多的开发者加入到这个领域,推出了大量创意独特、质量上乘的小游戏。 总而言之,HTML小游戏/H5小游戏在今天的游戏市场上占据了重要的地位。它们具有跨平台、无需下载的优势,提供了丰富多样的游戏体验,成为了游戏行业的一股新生力量。随着技术的不断发展,相信HTML小游戏/H5小游戏会愈发成熟和受欢迎。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值