From dad2d7a12d6d502d703d0117a229f771a9750eb9 Mon Sep 17 00:00:00 2001 From: rucky Date: Tue, 22 Feb 2022 02:13:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E5=B8=81=E6=B7=BB=E5=8A=A0=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +- src/assets/images/push-coin/bottom_ban.png | Bin 0 -> 3404 bytes src/assets/images/push-coin/coin.png | Bin 0 -> 11780 bytes src/assets/images/push-coin/pusher.png | Bin 0 -> 4972 bytes src/assets/images/push-coin/top.png | Bin 0 -> 9330 bytes src/page/index/PushCoinGame/game/index.js | 76 ++-- src/page/index/PushCoinGame/game/preload.js | 19 +- src/page/index/PushCoinGame/game/view.js | 408 ++++---------------- src/page/index/PushCoinGame/index.vue | 50 ++- vue.config.js | 6 + 10 files changed, 155 insertions(+), 407 deletions(-) create mode 100644 src/assets/images/push-coin/bottom_ban.png create mode 100644 src/assets/images/push-coin/coin.png create mode 100644 src/assets/images/push-coin/pusher.png create mode 100644 src/assets/images/push-coin/top.png diff --git a/package.json b/package.json index 9d87972..8a5c03e 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "jsmpeg": "^1.0.0", "matter-js": "^0.18.0", "meshline": "^2.0.3", + "poly-decomp": "^0.3.0", "qrcode": "^1.4.4", "snapsvg-cjs": "^0.0.6", "stats.js": "^0.17.0", @@ -105,4 +106,4 @@ "not dead", "not ie <= 8" ] -} +} \ No newline at end of file diff --git a/src/assets/images/push-coin/bottom_ban.png b/src/assets/images/push-coin/bottom_ban.png new file mode 100644 index 0000000000000000000000000000000000000000..c006aed2ea92c41e65bf1c0bcef19124e1eebe43 GIT binary patch literal 3404 zcmeAS@N?(olHy`uVBq!ia0y~yV0s6{O&n}Mkv{F1*FcK1z$3Dlfq`2Xgc%uT&5>YW z;Q8n2;uumf=j}B|!3G0{0~-uy2Diz~G32avdN0IU`>pETS3U-Y2iKonXJlYFFtd=I zp@HEsP=xWAEYSEKYX$}uiE;)84g;WV0tt5*859oeU}kV=7*#kLJfn$XG%Jjj6r<(i vXss|>X^u7(MjJ?@&BD=E^Wf?$9AJx=XW#lKs<#B#J!0^5^>bP0l+XkK`4934 literal 0 HcmV?d00001 diff --git a/src/assets/images/push-coin/coin.png b/src/assets/images/push-coin/coin.png new file mode 100644 index 0000000000000000000000000000000000000000..1bcc4d1589b8a04ef108f12c058d73537612ae4a GIT binary patch literal 11780 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 IjENEd2if<4E&u=k literal 0 HcmV?d00001 diff --git a/src/assets/images/push-coin/top.png b/src/assets/images/push-coin/top.png new file mode 100644 index 0000000000000000000000000000000000000000..7b58dc0d2f5a70c384cbb23c2577a644491eb643 GIT binary patch literal 9330 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 { + this.scene = 2; // console.log(this.VIEW.loading_progress_bar.graphics.command.w) }, progressCallBack: (progress) => { // progress; // 0.99 + console.log() gsap.to(this.VIEW.loading_progress_bar.graphics.command, { w: 30 + 432 * progress, duration: 0.1, @@ -134,7 +136,11 @@ class game { }, completeCallBack: (result) => { // all loaded triger - this.VIEW.hideLoading() + this.VIEW.createGamePage(this); + setTimeout(() => { + this.VIEW.hideLoading(); + this.webGL && this.VIEW.loadingCacheContainer.updateCache(); + }, 100) // this.mainResLoaded(); }, }); @@ -187,57 +193,45 @@ class game { initMatterEngine() { // create an engine this.myEngine = this.Engine.create(); + this.myEngine.gravity.y = 0.1; this.myWorld = this.myEngine.world; // create a renderer - // this.myRender = this.Render.create({ - // element: this.vue.$refs.container, - // engine: this.myEngine, - // options: { - // width: window.innerWidth, - // height: window.innerHeight, - // pixelRatio: 1, // 设置像素比 - // showAngleIndicator: true, - // wireframes: true, - // showDebug: true - // } - // }); + this.myRender = this.Render.create({ + // element: this.vue.$refs.container, + engine: this.myEngine, + canvas: this.vue.$refs.matter, + options: { + width: window.innerWidth, + height: window.innerHeight, + pixelRatio: window.devicePixelRatio, // 设置像素比 + background: 'transparent', + wireframeBackground: "transparent", + showAngleIndicator: false, + wireframes: true, + showDebug: false, + showVelocity: true, + } + }); // create two boxes and a ground - var boxA = this.Bodies.rectangle(100, 200, 80, 80); - var boxB = this.Bodies.rectangle(150, 50, 80, 80); - var boxC = this.Bodies.rectangle(150, 50, 80, 80); - var boxD = this.Bodies.rectangle(150, 50, 80, 80); - var ground = this.Bodies.rectangle(0, 800, 750, 10, { isStatic: true }); + // var boxA = this.Bodies.rectangle(100, 200, 80, 80); + // var boxB = this.Bodies.rectangle(150, 50, 80, 80); + // var boxC = this.Bodies.rectangle(150, 50, 80, 80); + // var boxD = this.Bodies.rectangle(150, 50, 80, 80); + // var ground = this.Bodies.rectangle(0, 800, 750, 10, { isStatic: true }); + - // this.Composite.add(this.myWorld, [ - // this.Bodies.fromVertices( - // 0, 0, - // [ - // // 顶点坐标 - // { x: 0, y: 0 }, - // { x: 0, y: 890 }, - // { x: 140, y: 815 }, - // { x: 208, y: 614 }, - // { x: 548, y: 614 }, - // { x: 612, y: 815 }, - // { x: 750, y: 890 }, - // { x: 750, y: 0 } - // ], - // { isStatic: true } - // ) - // ]); // add all of the bodies to the world - this.Composite.add(this.myWorld, [boxA, boxB, boxC, boxD, ground]); + // this.Composite.add(this.myWorld, [boxA, boxB, boxC, boxD, ground]); // create runner - // this.Render.run(this.myRender); + this.Render.run(this.myRender); // run the engine - // this.myRunner = this.Runner.create(); - // this.Runner.run(this.myRunner, this.myEngine); - this.Engine.run(this.myEngine); + this.myRunner = this.Runner.create(); + this.Runner.run(this.myRunner, this.myEngine); } //debug mode destroyed diff --git a/src/page/index/PushCoinGame/game/preload.js b/src/page/index/PushCoinGame/game/preload.js index 2284eba..c940613 100644 --- a/src/page/index/PushCoinGame/game/preload.js +++ b/src/page/index/PushCoinGame/game/preload.js @@ -24,13 +24,22 @@ export default { main: { imgList: [ { - id: 'logo', - src: require("@/assets/images/logo.png") + id: 'coin', + src: require("@/assets/images/push-coin/coin.png") }, { - id: 'logo', - src: require("@/assets/images/logo.png") - } + id: 'top', + src: require("@/assets/images/push-coin/top.png") + }, + { + id: 'bottom_ban', + src: require("@/assets/images/push-coin/bottom_ban.png") + }, + { + id: 'pusher', + src: require("@/assets/images/push-coin/pusher.png") + }, + ], audioList: [ ] diff --git a/src/page/index/PushCoinGame/game/view.js b/src/page/index/PushCoinGame/game/view.js index 85bc290..f6e3e3b 100644 --- a/src/page/index/PushCoinGame/game/view.js +++ b/src/page/index/PushCoinGame/game/view.js @@ -3,6 +3,7 @@ import layoutData from './layout'; import createLayout from './createView'; // import maskCreater from './maskCreater'; //mask creater import { gsap } from "gsap"; +import decomp from 'poly-decomp'; // import utils from '@/utils/index.js' // import { MotionPathPlugin } from "gsap/MotionPathPlugin.js"; // import Soul from './plugins/ScrollContainer'; //app scroll plugin module @@ -16,8 +17,6 @@ class layout { } init() { - - //update btns position by viewport // this.updatePosByViewport(); @@ -65,8 +64,9 @@ class layout { } } - createBitmap(spriteSheet, name) { - return new createjs.Sprite(spriteSheet, name); + createBitmap(name) { + let img = this.game.mainLoader && this.game.mainLoader.getResult(name); + return new createjs.Bitmap(img); } //创建loading页 @@ -95,365 +95,95 @@ class layout { // 创建粒子动画 this.createLoadingParticle(); - console.log(this.loading_bg) + // console.log(this.loading_bg) return this } //隐藏loading页面 - hideLoading(step = 1) { + hideLoading() { //create story index - this.game.scene = 2; - gsap.to(this.game.stage.loadingContainer, { - alpha: 0, duration: 0.65, delay: step == 3 ? 1 : 0, onComplete: () => { - // 将loading重置ui显示 为二次加载资源做显示 - this.changeLoadingLayout(step); - } - }) - gsap.to(this.game.stage.mainContainer, { alpha: 1, duration: 0.65 }); + gsap.to(this.game.stage.loadingContainer, { alpha: 0, duration: 0.65, }) + gsap.to([this.game.stage.mainContainer, this.gamePage], { alpha: 1, duration: 0.65 }); } - // 准备下一次loading - changeLoadingLayout(step) { - if (step == 1) { - // 进度归零 - this.loading_progress_text.text = '0%'; - // 隐藏元素 - gsap.set([this.loading_start, this.loading_progress_bg, this.loading_progress_bar, this.loading_snow, this.loading_text], { alpha: 0 }) - // 显示元素 - gsap.set([this.loading_text2, this.loading_box, this.loading_light, this.loading_person], { alpha: 1 }) - gsap.set(this.loading_progress_text, { alpha: 1, y: 1260 }) - // 准备动画 - this.readyLangLoaderAni(); - } else if (step == 2) { - // 隐藏元素 - gsap.set([this.loading_text2, this.loading_light, this.loading_person], { alpha: 0 }) - gsap.set(this.loading_progress_text, { alpha: 0 }) - // 显示元素 - gsap.set([this.loading_text3, this.loading_light2, this.loading_arrow], { alpha: 1 }) - // 如果是英文 显示英文文案 - if (this.game.langConfig.id == 3) { - gsap.set([this.loading_text2_en, this.loading_text3], { alpha: 0 }) - gsap.set([this.loading_text3_en], { alpha: 1 }) - } - // 准备动画 - this.readyPosterLoaderAni(); - } - } + // 创建游戏页 + createGamePage(game) { + this.game = game; + this.gamePage = new createjs.Container().set({ alpha: 0 }); + this.game.stage.mainContainer.addChild(this.gamePage); - // 准备语言加载动画 - readyLangLoaderAni() { - this.langLoaderAni = []; - let ani1 = new gsap.timeline({ repeat: -1, paused: true }) - .to([this.loading_light, this.loading_person], { alpha: 0.86, duration: 0.2 }) - .to([this.loading_light, this.loading_person], { alpha: 1, duration: 0.15 }) - .to([this.loading_light, this.loading_person], { alpha: 0.6, duration: 0.2 }) - .to([this.loading_light, this.loading_person], { alpha: 1, duration: 0.1 }) - - let ani2 = gsap.to([this.loading_person, this.loading_box], { y: '+=15', yoyo: true, repeat: -1, duration: 1.5 }) - - - this.langLoaderAni.push(ani1, ani2) - } - - // 播放语言加载时动画 - playLangLoaderAni() { - this.langLoaderAni.forEach((item) => { - item.restart(); - }) - } - - // 暂停语言加载时动画 - pauseLangLoaderAni() { - this.langLoaderAni.forEach((item) => { - item.pause(); - }) - } - - // 准备语言加载动画 - readyPosterLoaderAni() { - this.posterLoaderAni = []; - let ani1 = new gsap.timeline({ repeat: -1, paused: true }) - .to(this.loading_light2, { alpha: 0.86, duration: 0.2 }) - .to(this.loading_light2, { alpha: 1, duration: 0.15 }) - .to(this.loading_light2, { alpha: 0.6, duration: 0.2 }) - .to(this.loading_light2, { alpha: 1, duration: 0.1 }) - - let ani2 = gsap.to([this.loading_box], { y: '+=15', yoyo: true, repeat: -1, duration: 1.5 }) - - let ani3 = gsap.to([this.loading_arrow], { y: '+=15', scaleX: 0.95, yoyo: true, repeat: -1, duration: 1.5 }) - - - this.posterLoaderAni.push(ani1, ani2, ani3) - } - - // 播放语言加载时动画 - playPosterLoaderAni() { - this.posterLoaderAni.forEach((item) => { - item.restart(); - }) - } - - // 暂停语言加载时动画 - pausePosterLoaderAni() { - this.posterLoaderAni.forEach((item) => { - item.pause(); - }) - } - - - // 帧生成动画 - framePlayer(config) { - // 图像资源 - // 容器 - // const container = new createjs.Container(); - - // loader - const loader = this.game[config.name]; - - // images - const images = []; - config.imgIds.forEach((item) => { - images.push(loader.getResult(item)); - }) - - // handle speed - Object.keys(config.sprite.animations).forEach((key) => { - // console.log('speed=', this.game.globalSpeed * 0.18) - config.sprite.animations[key].speed = this.game.globalSpeed * 0.18; - config.sprite.animations[key].next = 'wait' + let bottom = this.createBitmap('bottom_ban').set({ y: 560 }); + let top = this.createBitmap('top'); + // 添加推板 + let pusher = this.createBitmap('pusher').set({ + x: 142, + y: 683 }); - // animation config - const aniData = { - images, - frames: config.sprite.frames, - animations: config.sprite.animations - } + console.log(pusher) - const spriteSheet = new createjs.SpriteSheet(aniData); - const animation = new createjs.Sprite(spriteSheet); + gsap.to(pusher, { y: '-=202', yoyo: true, repeat: -1, ease: 'none', duration: 5 }) - // default setting - if (config.name === 'guide' || config.name === 'wait') { - animation.set({ - name: config.name, - x: 390, - y: 280 + 512, - scaleX: 1.25, - scaleY: 1.25, - regX: 750 * 0.85 / 2, - regY: 1624 * 0.85 / 2, - alpha: 0 - }) - } else { - animation.set({ - name: config.name, - x: 220, - y: 565 + 512, - scaleX: 1, - scaleY: 1, - regX: 750 * 1 / 2, - regY: 1624 * 1 / 2, - alpha: 0 - }) - } + // 添加到 + this.gamePage.addChild(bottom, pusher, top); + // 添加ground + this.game.Composite.add(this.game.myWorld, [ + this.game.Bodies.fromVertices( + window.innerWidth / 2, window.innerHeight / 2, + [ + // 顶点坐标 + { x: 0, y: 0 }, + { x: 0, y: 956 }, + { x: 141, y: 881 }, + { x: 206, y: 683 }, + { x: 548, y: 683 }, + { x: 614, y: 881 }, + { x: 750, y: 956 }, + { x: 750, y: 0 } + ], + // { isStatic: true } + ) + ]); + // Create a concave polygon + var concavePolygon = [ + [-1, 1], + [-1, 0], + [1, 0], + [1, 1], + [0.5, 0.5] + ]; + // Make sure the polygon has counter-clockwise winding. Skip this step if you know it's already counter-clockwise. + decomp.makeCCW(concavePolygon); + // Decompose into convex polygons, using the faster algorithm + var convexPolygons = decomp.quickDecomp(concavePolygon); + // ==> [ [[1,0],[1,1],[0.5,0.5]], [[0.5,0.5],[-1,1],[-1,0],[1,0]] ] - return animation - } + // Decompose using the slow (but optimal) algorithm + var convexPolygons = decomp.decomp(concavePolygon); - // 生成海报 - createPoster(nickname = '', level = 1) { - this.posterContainer = new createjs.Container().set({ alpha: 1, name: 'posterContainer' }); - // this.game.stage.mainContainer.addChild(this.posterContainer); - - // 海报图片 - let posterImg = this.game.posterLoader.getResult('poster_bg'); - // 海报对象 - let poster = new createjs.Bitmap(posterImg); - - // nickname - let nt; - if (nickname) { - nt = this.game.vue.$Utils.cutString(nickname, 20, true); - } - let nicknameText = new createjs.Text(nt, "38px Helvetica, Arial, sans-serif", "#31425b").set({ - x: 375, - y: 1086, - textAlign: 'center' - }); - - let levelImg = this.game.posterLoader.getResult(`word_${level}`); - let posConfig = [ - { - x: 50, - y: 239 - }, - { - x: 70, - y: 242 - }, - { - x: 54, - y: 243 - }, - { - x: 57, - y: 224 - }, - { - x: 50, - y: 243 - } - ] - // 等级称号 - let levelTitle = new createjs.Bitmap(levelImg).set( - this.game.langConfig.id == 3 ? posConfig[Number(level) - 1] : posConfig[4] + // + let bounds = pusher.getBounds(); + pusher.body = this.game.Bodies.trapezoid( + pusher.x, + pusher.y, + bounds.width, + bounds.height, + { isStatic: true } ); - - - let personImg = this.game.posterLoader.getResult('person'); - // 王冰冰 - let person = new createjs.Bitmap(personImg).set({ - x: this.game.langConfig.id == 3 ? 76 : 86, - y: this.game.langConfig.id == 3 ? 381 : 256 - }); - - // 根据版本选择不同的二维码 目前全部选用微信版本二维码 - let codeName = 'qrcode'; - // switch (process.env.VUE_APP_CURRENTMODE) { - // case 'ysprod': - // codeName = 'ys_qrcode'; - // break; - // case 'wbprod': - // codeName = 'wb_qrcode'; - // break; - // default: - // codeName = 'qrcode'; - // break; - // } - let qrcodeImg = this.game.posterLoader.getResult(codeName); - // 海报对象 - let qrcode = new createjs.Bitmap(qrcodeImg).set({ - x: this.game.langConfig.id == 3 ? 305 : 306, - y: this.game.langConfig.id == 3 ? 1256 : 1275, - scaleX: 0.34, - scaleY: 0.34, - width: 136, - height: 136 - }); - - let logoImg = this.game.posterLoader.getResult('logo'); - // 海报对象 - let logo = new createjs.Bitmap(logoImg).set({ - x: this.game.langConfig.id == 3 ? 341 : 341, - y: this.game.langConfig.id == 3 ? 1482 : 1482, - }); - - // 插入container - this.posterContainer.addChild(poster, nicknameText, qrcode, levelTitle, person, logo); - - this.posterContainer.cache(0, 0, 750, 1538); - - // easejs > 1.0.0 getCacheDataURL报错 0.8.2版本正常 - let baseUrl = this.posterContainer.cacheCanvas.toDataURL('image/png'); - // let baseUrl = this.posterContainer.getCacheDataURL(); - - setTimeout(() => { - this.destroyPosterCreater(); - }, 1000); - - return baseUrl + // this.game.Composite.add(this.myWorld, [pusher.body]); } - // 销毁海报生成器 - destroyPosterCreater() { - this.posterContainer.uncache(); - this.posterContainer.removeAllChildren(); - this.game.stage.mainContainer.removeChild(this.posterContainer); - this.posterContainer = null; + // 生成硬币 + createCoin() { + let coinImg = this.game.mainLoader.getResult('coin'); + let coin = new createjs.Bitmap(coinImg); } - // index 粒子制造机 - createParticle() { - - // 容器 - // const loadingContainer = this.game.stage.loadingContainer; - - // loader - const loader = this.game.vue.$beforeLoader; - - // sprite image - const spriteImg = loader.getResult('snowSprite'); - - - const container = new createjs.Container(); - - - const aniData = { - images: [spriteImg], - frames: [ - [1, 1, 77, 82, 0, 0, 0], - [1, 85, 57, 55, 0, 0, 0], - [1, 142, 46, 45, 0, 0, 0], - [49, 142, 15, 15, 0, 0, 0], - [60, 85, 8, 12, 0, 0, 0], - [60, 99, 6, 6, 0, 0, 0] - ], - animations: { - "snow-1": { "frames": [0] }, - "snow-2": { "frames": [1] }, - "snow-3": { "frames": [2] }, - "snow-4": { "frames": [3] }, - "snow-5": { "frames": [4] }, - "snow-6": { "frames": [3] }, - "snow-7": { "frames": [4] }, - "snow-8": { "frames": [2] }, - "snow-9": { "frames": [3] }, - "snow-10": { "frames": [1] }, - } - } - - const spriteSheet = new createjs.SpriteSheet(aniData); - - const arr = []; - for (let i = 0; i < (window.deviceInfo.system == 'IOS' ? 50 : 50); i++) { - const scale = Math.random() * 0.35 + 0.5; - const name = `snow-${this.game.vue.$Utils.rangeRandom(1, 10)}`; - const sprite = this.createBitmap(spriteSheet, name).set({ - x: Math.random() * 750 - 30, - y: Math.random() * 1300, - ox: Math.random() * 750, - oy: -50, - // regX:14, - // regY:14, - scaleX: scale, - scaleY: scale, - speedX: (Math.random() > 0.5 ? 1 : -1) * (Math.random() * 0.5 + 0.25), - speedY: Math.random() * 1 + 1, - speedR: Math.random() * 0.5 + 0.5, - alpha: Math.random() * 0.3 + 0.5, - }) - - arr.push(sprite) - } - // const mask = new createjs.Shape().setTransform(0, 0, 1, 1); - // mask.graphics.f('#000000').drawRoundRect(0, 0, 750, 1300, 0).es(); - // contianer.mask = mask; - // contianer.compositeOperation = 'darker'; - // arr.push(mask) - container.children = arr; - - this.prarticleContainer = container; - this.game.stage.mainContainer.addChild(container); - return container - } - - // loading 粒子制造机 createLoadingParticle() { const container = new createjs.Container(); diff --git a/src/page/index/PushCoinGame/index.vue b/src/page/index/PushCoinGame/index.vue index d2fccf3..29c5c1d 100644 --- a/src/page/index/PushCoinGame/index.vue +++ b/src/page/index/PushCoinGame/index.vue @@ -7,37 +7,45 @@ * @FilePath: /xfhd-vue-scaffold/src/page/index/Home/Index.vue --> \ No newline at end of file diff --git a/vue.config.js b/vue.config.js index 7593c27..5c590bd 100644 --- a/vue.config.js +++ b/vue.config.js @@ -40,6 +40,12 @@ module.exports = { // development模式时打包也带有 hash 值 config.output.filename('static/js/[name].[hash].js').chunkFilename('static/js/[name].[hash].js').end() + config.module + .rule('images') + .use('url-loader') + .loader('url-loader') + .tap(options => Object.assign(options, { limit: 0 })) + config.resolve.alias .set("@", resolve("src")) // .set("weui", resolve("src/utils/plugins/weui.js"))