pixi 小游戏_使用 Pixi.js 开发微信小游戏
2019/06/27: colloc
闲来无事就又折腾起微信小游戏来,其实国内几大游戏引擎都支持一键发布到微信小游戏。但是对pixi.js情有独钟,所以开始进入正题。
目标:把pixi-filters的在线demo放到微信小游戏上。
首先通过微信开发工具建立一个空项目,同时引入pixi.js和官方提供的weapp-adapter.js。
在game.js里写入:
import './libs/weapp-adapter'
import * as PIXI from './libs/pixi.min'
const {pixelRatio, windowWidth, windowHeight} = wx.getSystemInfoSync()
new PIXI.Application({
width: windowWidth * pixelRatio,
height: windowHeight * pixelRatio,
view: canvas
})
一切正常的话,结果应该如下图。
在把pixi-filters的demo搬过来之前,先把之前遇到的坑填一下。
我们先在场景中添加一张图片,然后让他点击隐藏。
问题是,我们点击非但不消失,还报错了。
这个报错,是因为pixi.js里有个判断:ev instanceof ToucEvent 。但是微信官方的weapp-adapter.js并没有把TouchEvent绑到window,所以就出问题了。解决办法也很简单,改一下weapp-adapter.js的源码然后重新打包一下。
// src/EventIniter/TouchEvent.js
// 修改第五行:
export default class TouchEvent {
...
// src/window.js
// 添加
export TouchEvent from './EventIniter/TouchEvent'
修改完毕后,重新打包并替换掉我们libs目录里的weapp-adapater.js。
这时候,又会有问题,就是控制台不报错了,但是图片还是不会消失。这确实很坑。
问题其实就在于pixi.js的一个mapPositionToPoint的实现,在这里行不通。
mapPositionToPoint(point, x, y)
{
let rect;
// IE 11 fix
if (!this.interactionDOMElement.parentElement)
{
rect = { x: 0, y: 0, width: 0, height: 0 };
}
else
{
rect = this.interactionDOMElement.getBoundingClientRect();
}
const resolutionMultiplier = navigator.isCocoonJS ? this.resolution : (1.0 / this.resolution);
point.x = ((x - rect.left) * (this.interactionDOMElement.width / rect.width)) * resolutionMultiplier;
point.y = ((y - rect.top) * (this.interactionDOMElement.height / rect.height)) * resolutionMultiplier;
}
上面的interactionDOMElement就是wx.createCanvas的canvas,显然是没有parentElement,也没有getBoundingClientRect。
这个重新映射的原理很简单。简单说就是canvas的尺寸与渲染尺寸。
以iphone5为例,全屏canvas(landscape)大小是568x320而渲染尺寸(devicePixelRatio=2)是1136x640。
事件监听捕获到的位置是基于canvas(设备)的,比如有个sprite在屏幕右下角,此时pixi.js获取到的点击坐标是568, 320,而sprite在渲染尺寸的位置是1136, 640,如果不进行正确的映射就无法触发pixi.js内部实现的监听函数。
// 因为在微信小游戏里canvas肯定是全屏的,所以映射起来就很简单暴力
// 可以有两种修改
app.renderer.plugins.interaction.mapPositionToPoint = (point, x, y) => {
point.x = x * pixelRatio
point.y = y * pixelRatio
}
PIXI.interaction.InteractionManager.prototype.mapPositionToPoint = (point, x, y) => {
point.x = x * pixelRatio
point.y = y * pixelRatio
}
整体代码如下:
import './libs/weapp-adapter'
import * as PIXI from './libs/pixi.min'
const {pixelRatio, windowWidth, windowHeight} = wx.getSystemInfoSync()
const app = new PIXI.Application({
width: windowWidth * pixelRatio,
height: windowHeight * pixelRatio,
view: canvas
})
app.renderer.plugins.interaction.mapPositionToPoint = (point, x, y) => {
point.x = x * pixelRatio
point.y = y * pixelRatio
}
const bkg = PIXI.Sprite.fromImage('./textures/bkg.jpg')
bkg.interactive = true
bkg.on('pointerdown', ev => {
bkg.visible = false
})
app.stage.addChild(bkg)
还有一个PIXI.loader 和 ajax 相关的问题
// weapp-adapter 源码
// src/XMLHttpRequest.js
// 添加 addEventListener 方法
addEventListener(ev, cb) {
this[`on${ev}`] = cb
}
剩下的就是pixi.js的基本操作,就不写了。顺便添加了一个点击波纹效果。
广而告之时间:
Pixi.js 写的小游戏上线了,欢迎试玩。
pixi 小游戏_使用 Pixi.js 开发微信小游戏相关推荐
- mpvue 微信小程序_使用Vue.js开发微信小程序:开源框架mpvue解析
戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...
- h5+js调取相机做取景框_使用Vue.js开发微信小程序:开源框架mpvue解析
戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...
- 万能门店小程序_关于传统门店开发微信小程序的优势
移动互联网的盛行,使广大传统门店发展更为艰难,获客引流成本越来越高,越来越难.但随着微信小程序的问世,就彻底改变了这个现状,给广大传统门店带来了福音.小程序基于微信引流,帮助门店打通线上线下,使获客引 ...
- 用Vue.js开发微信小程序:开源框架mpvue解析
前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...
- 使用Vue.js开发微信小程序:开源框架mpvue解析
前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为H5和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程序,或开发 ...
- cs架构用什么语言开发_用Rust语言开发微信小程序
由于stdweb已经好久没有更新了,本人又写了另外一篇: JiaYe:用Rust语言开发微信小程序:wasm-bindgenzhuanlan.zhihu.com stdweb可以轻松将Rust代码编 ...
- 小程序iconfont报错_【经验】开发微信小程序经验总结
一.技术要求(语言方面) 有H5或H4和CSS3的书写经验,没有建议观看B站中的 渡一教育-Web前端开发(html css不算语言). 强烈推荐他们的视频,主讲人没有口音且视频质量很高,是哈尔滨理工 ...
- 2019小程序没必要做了_企业有必要开发微信小程序吗?
互联网的不断创新发展,微信这一社交软件技术逐渐成为了社会大众信息沟通工具之一,但是随着小程序的出现,让更多的企业发现微信开发能帮助企业挖掘市场,获取精准流量的手段,于是,不得不开始工作,那么,企业开发 ...
- 随机抽人名小程序_这些好用的微信小程序,你知道多少?
我们都知道,微信小程序很方便!也很受开发者的欢迎和用户的喜爱,主要其易上手简单的开发适配和小巧.而现阶段的小程序不仅能在主要功能性上面代替某些 App ,甚至取代. 就小狐日常用的而言,哪些是对你有帮 ...
- windows模拟微信小程序_【原创】PC微信小程序包解密工具C#版无需root或模拟器
本帖最后由 daimaguo 于 2020-12-25 10:18 编辑 提示:鉴于有网友回复不知道干什么用的,因此有必要重新修改一次,写上完整的使用说明,说白了就是获取线上小程序源码的辅助工具,电脑 ...
最新文章
- legend3---3、lavarel页面post请求错误之后跳转
- Python中修改字符串的四种方法
- 作文 —— 诙谐、幽默、调侃、批判
- 聊一聊.NET Core结合Nacos实现配置加解密
- Asp.Net WebForm生命周期的详解
- spring生命周期七个过程_Spring杂文(三)Spring循环引用
- 小汤学编程之JAVA基础day12——异常
- java 配置tomcat_为tomcat配置java环境变量
- 使用MVC框架中要注意的问题(一):修改首页以支持主题
- 【HDOJ7055】Yiwen with Sqc(字符串,区间出现次数平方和,两次差分)
- 值得一看的50条从商之道
- 算法笔记-差分和前缀和
- 烟雨江南暂排第一,第四届橙瓜网络文学奖入围20年十佳奇幻大神
- COMSOL 固体力学 第一主应力、第二主应力、第三主应力、径向应力、环向应力、切向应力 截面一维曲线
- 程序员为了讨好大舅子,竟自学自动化编程
- json解析时遇到英文双引号报错解决
- 设随机过程{X(t)=Acos(ωt+Θ),t∈(一∞,+∞)},其中A,ω,Θ为相互独立的实随机变量,其中A的均值为2,方差为4,且Θ~U(-π,π),ω~U(-5,5),试问X(t)是否为平稳过程
- 如何查看自己电脑使用第几代内存条?
- 广州大学数据库实验报告_广州大学学生实验报告.doc
- Deployment is out of date due to changes in the underlying project contents.项目发布出错原因
热门文章
- c语言循环语句试讲教案,C语言For循环试讲教案(7页)-原创力文档
- excel 第12讲:vlookup函数和 macth与index函数
- 少林禅医:姜是无上养生物,谨慎使用大智慧
- SQL(09)_UNIQUE 约束
- 瀛洲大学计算机专业毕业 卖身,目前计算机芯片 ( 集成电路 ) 制造的主要原料 } 是 () ,它是一种可以在沙子中提炼出的物质。_学小易找答案...
- android 车票预定接口,聚合数据Android SDK 12306火车票查询订票演示示例 编辑
- 【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用
- 浙江大学【面板数据分析与STATA应用】——第一讲短面板数据分析
- python进行电子取证
- Aras Innovator: 如何快速的装多份innovatorSample数据到不同的数据库