官方教程地址html
- 玩微信小游戏前提基础技能es6
JS ES6 写法canvas
- 小游戏一个纯jscore的程序,没有DOM 操做 ;H5游戏都是玩弄canvas;因此官方有个weapp-adapter.js,模拟了canvas 微信
import './js/libs/weapp-adapter';
引入后,全局就会有一个canvas对象;Adapter下载地址app
- 单例类的写法ui
let instance; export default class Instant { constructor() { if (instance) return instance; instance = this; //无论怎么new xxx 不会是新的对象 this.xxx="xxxx"; } }
调用this
import Instant from './js/tt/instant'; let instant = new Instant();
或是在类里spa
import Instant from './js/tt/instant'; export default class Main{ constructor() { this.instant = new Instant(); } }
- 时间轴 window.requestAnimationFrame
用法debug
let render= e => { //刷新逻辑 window.requestAnimationFrame(render, canvas); } window.requestAnimationFrame(render, canvas);
- 图片rest
let img = new Image(); img.src = 'images/enemy.png';
图片的x,y属性是只读;
要刷新位置得这么玩
let img = new Image(); let ctx = canvas.getContext('2d'); img.src = 'images/enemy.png'; var render = e => { //清空canvas内容 ctx.clearRect(0, 0, canvas.width, canvas.height); //从新绘制img对象到canvas xx yy 是 鼠标点击的坐标位置 ctx.drawImage(img, xx, yy, img.width, img.height); window.requestAnimationFrame(render, canvas); } window.requestAnimationFrame(render, canvas); let [xx, yy] = [0, 0]; canvas.addEventListener('touchstart', ((e) => { e.preventDefault(); let x = e.touches[0].clientX; let y = e.touches[0].clientY; [xx, yy] = [x,y] }));
- 按钮互动事件 (好恶心)
竟然只能经过touch的 x y 属性,与对象存在的位置 宽高 进行判断比较!!!
官方教程代码:
//游戏结束后的触摸事件处理逻辑 touchEventHandler(e) { e.preventDefault() let x = e.touches[0].clientX let y = e.touches[0].clientY let area = this.gameinfo.btnArea if (x >= area.startX && x <= area.endX && y >= area.startY && y <= area.endY) this.restart() }
以前用过egret定位图片ui元素,也是各类x y ,很是累!!