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 开发微信小游戏相关推荐

  1. mpvue 微信小程序_使用Vue.js开发微信小程序:开源框架mpvue解析

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...

  2. h5+js调取相机做取景框_使用Vue.js开发微信小程序:开源框架mpvue解析

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...

  3. 万能门店小程序_关于传统门店开发微信小程序的优势

    移动互联网的盛行,使广大传统门店发展更为艰难,获客引流成本越来越高,越来越难.但随着微信小程序的问世,就彻底改变了这个现状,给广大传统门店带来了福音.小程序基于微信引流,帮助门店打通线上线下,使获客引 ...

  4. 用Vue.js开发微信小程序:开源框架mpvue解析

    前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...

  5. 使用Vue.js开发微信小程序:开源框架mpvue解析

    前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为H5和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程序,或开发 ...

  6. cs架构用什么语言开发_用Rust语言开发微信小程序

    由于stdweb已经好久没有更新了,本人又写了另外一篇: JiaYe:用Rust语言开发微信小程序:wasm-bindgen​zhuanlan.zhihu.com stdweb可以轻松将Rust代码编 ...

  7. 小程序iconfont报错_【经验】开发微信小程序经验总结

    一.技术要求(语言方面) 有H5或H4和CSS3的书写经验,没有建议观看B站中的 渡一教育-Web前端开发(html css不算语言). 强烈推荐他们的视频,主讲人没有口音且视频质量很高,是哈尔滨理工 ...

  8. 2019小程序没必要做了_企业有必要开发微信小程序吗?

    互联网的不断创新发展,微信这一社交软件技术逐渐成为了社会大众信息沟通工具之一,但是随着小程序的出现,让更多的企业发现微信开发能帮助企业挖掘市场,获取精准流量的手段,于是,不得不开始工作,那么,企业开发 ...

  9. 随机抽人名小程序_这些好用的微信小程序,你知道多少?

    我们都知道,微信小程序很方便!也很受开发者的欢迎和用户的喜爱,主要其易上手简单的开发适配和小巧.而现阶段的小程序不仅能在主要功能性上面代替某些 App ,甚至取代. 就小狐日常用的而言,哪些是对你有帮 ...

  10. windows模拟微信小程序_【原创】PC微信小程序包解密工具C#版无需root或模拟器

    本帖最后由 daimaguo 于 2020-12-25 10:18 编辑 提示:鉴于有网友回复不知道干什么用的,因此有必要重新修改一次,写上完整的使用说明,说白了就是获取线上小程序源码的辅助工具,电脑 ...

最新文章

  1. legend3---3、lavarel页面post请求错误之后跳转
  2. Python中修改字符串的四种方法
  3. 作文 —— 诙谐、幽默、调侃、批判
  4. 聊一聊.NET Core结合Nacos实现配置加解密
  5. Asp.Net WebForm生命周期的详解
  6. spring生命周期七个过程_Spring杂文(三)Spring循环引用
  7. 小汤学编程之JAVA基础day12——异常
  8. java 配置tomcat_为tomcat配置java环境变量
  9. 使用MVC框架中要注意的问题(一):修改首页以支持主题
  10. 【HDOJ7055】Yiwen with Sqc(字符串,区间出现次数平方和,两次差分)
  11. 值得一看的50条从商之道
  12. 算法笔记-差分和前缀和
  13. 烟雨江南暂排第一,第四届橙瓜网络文学奖入围20年十佳奇幻大神
  14. COMSOL 固体力学 第一主应力、第二主应力、第三主应力、径向应力、环向应力、切向应力 截面一维曲线
  15. 程序员为了讨好大舅子,竟自学自动化编程
  16. json解析时遇到英文双引号报错解决
  17. 设随机过程{X(t)=Acos(ωt+Θ),t∈(一∞,+∞)},其中A,ω,Θ为相互独立的实随机变量,其中A的均值为2,方差为4,且Θ~U(-π,π),ω~U(-5,5),试问X(t)是否为平稳过程
  18. 如何查看自己电脑使用第几代内存条?
  19. 广州大学数据库实验报告_广州大学学生实验报告.doc
  20. Deployment is out of date due to changes in the underlying project contents.项目发布出错原因

热门文章

  1. c语言循环语句试讲教案,C语言For循环试讲教案(7页)-原创力文档
  2. excel 第12讲:vlookup函数和 macth与index函数
  3. 少林禅医:姜是无上养生物,谨慎使用大智慧
  4. SQL(09)_UNIQUE 约束
  5. 瀛洲大学计算机专业毕业 卖身,目前计算机芯片 ( 集成电路 ) 制造的主要原料 } 是 () ,它是一种可以在沙子中提炼出的物质。_学小易找答案...
  6. android 车票预定接口,聚合数据Android SDK 12306火车票查询订票演示示例 编辑
  7. 【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用
  8. 浙江大学【面板数据分析与STATA应用】——第一讲短面板数据分析
  9. python进行电子取证
  10. Aras Innovator: 如何快速的装多份innovatorSample数据到不同的数据库