微信小程序 | 游戏开发之接宝石箱子游戏

1、什么是微信小游戏

微信小游戏是小程序的一个类目,小游戏是微信开放给小程序的更多的能力,让小程序开发者有了开发游戏的能力。微信小游戏是在小程序的基础上添加了游戏库API。微信小游戏只能运行在小程序环境中,微信小游戏没有小程序中WXSS、WXML、多页面等内容,所以微信小游戏开发时小程序的组件就无法使用;但增加了一些渲染、文件系统以及后台多线程的功能。

小游戏提供了CommonJS风格的模块API,可以将一些公共的代码抽离成为一个单独的JS文件,作为一个模块。可以通过module.exports或者exports导出模块,通过require引入模块。

2、接宝石箱子游戏

接宝石箱子小游戏运行后底部出现主角工人,屏幕上方不断掉落宝石箱子,主角工人每接住一个箱子积分增加1分,玩家通过触碰屏幕左侧或者右侧控制工人移动方向。本游戏运行界面如图1所示。

 

 ■ 图1  接宝石箱子小游戏运行效果

// common.js
function sayHello(name) {console.log('Hello' + name + '!')
}
function sayGoodbye(name) {console.log('Goodbye'+ name+'!')
}
module.exports.sayHello = sayHello //提供对外的接口
module.exports.sayGoodbye = sayGoodbye //提供对外的接口

 在game.js中require common.js,就可以调用common模块导出的接口。所有输出接口都会成为输入对象的属性。

var common = require('./js/libs/common.js')
common.sayHello('xmj')
common.sayGoodbye('xmj')

在模块化时,也可以使用export default命令和import命令。

使用import命令是用户需要知道所加载的变量或者函数名,否则无法加载,为了方便用户,使其不用预先知道就能加载模块,这是可以使用export default为模块指定默认输出。

// common2.js
export default function test() { //当然也可以是一个类console.log("大家好");
};

 导入时可以如下:

import t from './js/libs/common2.js'
t('xmj')

 这时使用import导入时可以使用任意名称指定模块js文件的导出方法test()。本质上export default就是输出一个叫做Default的方法,只是系统容许为它任意取名。微信小游戏支持ES6,所以开发时可以使用export default class定义各种类模块,例如Bullet子弹类,Sprite精灵类,Enemy敌人类模块,使用import导入类模块。

import Player from './player/index'
import Enemy from './npc/enemy'

 小游戏并不能调用所有小程序的API,但是能调用到大部分的API。例如像wx.request,wx.chooseImage,wx.showToast等API,小游戏都可以调用到。更详细的API能力见微信官方API文档。

03、程序设计的步骤

使用微信开发者工具新建项目,左侧类别选择小游戏,右侧的项目名称输入“接宝石箱子游戏”,单击“新建”按钮,就新建一个新的小游戏。

在图2界面中的中间部分,为文件结构区域。右键文件结构区域上方+号,下拉菜单中选择“目录”,建立文件夹test/images结构,放入相关游戏图片(箱子,工人)。

 ■ 图2  放入相关游戏图片

准备工作完成后,修改game.js文件。本游戏不使用Adapter(适配器),使用微信wx API自行开发。

/*import './js/libs/weapp-adapter'
import './js/libs/symbol'
import Main from './js/main'
new Main()
*/
const DROP_SPEED = 8   //箱子下移速度
const MOVE_SPEED = 4   //人物左右移速度
const canvas = wx.createCanvas()
const context = canvas.getContext('2d')
context.fillStyle = "#ffff00"
context.font = "40px Arial"

 加载工人图片,并设置设置位置坐标(imgX,imgY)。

const image = wx.createImage() //人物图片
let imgX = canvas.width / 2 - 18 //人物位置
let imgY = canvas.height - 80
image.onload = function () {context.drawImage(image, imgX, imgY)
}
image.src = 'test/images/player.png'

 drawRect(x, y)函数清空屏幕,重绘宝石箱子、人物和积分文字。

let score = 0
const { windowWidth, windowHeight } = wx.getSystemInfoSync() //屏幕宽度和高度
function drawRect(x, y) {context.clearRect(0, 0, windowWidth, windowHeight) //重绘清空屏幕context.drawImage(boxImage, x, y) //画宝石箱子context.drawImage(image, imgX, imgY) //画人物context.fillText("积分" + score, 30, 50) //绘制积分文字
}

 设置宝石箱子坐标初始位置(imgX,imgY)为屏幕顶端中央。调用box(rectX, rectY)在指定位置(rectX, rectY)绘制箱子。

let rectX = canvas.width / 2 – 30    //宝石箱子坐标
let rectY = 0
const boxImage = wx.createImage() //宝石箱子图片
box(rectX, rectY) //调用box((rectX, rectY)在指定位置(rectX, rectY)绘制箱子function box(x, y) {// Math.ceil(); 只要有小数总是向上取整数; 例如Math.ceil(1.1) 输出为2let number = Math.ceil(Math.random() * 7) //随机产生1-7数字let box_src = 'test/images/box' + number + '.png'boxImage.onload = function () {context.drawImage(boxImage, x, y)}boxImage.src = box_src
}

 以下触摸(碰)事件处理。判断触碰位置在人物的左侧则移动方向direction值为-1,这样x坐标可以不断减少。触碰位置在人物的右侧则移动方向direction值为1,这样x坐标可以不断增加。

var direction = 0
var touchX = imgX
var touchY = imgY
wx.onTouchStart(function (res) {//触碰事件touchX = res.changedTouches[0].clientX - 18if (touchX < imgX) { //触碰位置在人物的左侧direction = -1       //向左移动console.log("left")} else { //触碰位置在人物的右侧direction = 1        //向右移动console.log("right")}
})

loop()是用来实现游戏帧循环达到动画效果。首先判断工人达到屏幕两侧边界,如果判断工人的位置到达屏幕最左侧,则改向右;到达屏幕最右侧,则改向左。箱子Y坐标不断,显示出下落效果,工人位置坐标根据移动方向不断修改,同时重新绘制箱子,工人,积分。

如果箱子到达底部区域,则判断与工人之间距离,如果小于50则认为碰撞(就是工人接到宝石箱子),进行加分处理。如果箱子出了屏幕底部,重新设置箱子图片并设置位于顶部。最后调用requestAnimationFrame(loop);起到循环渲染效果。

function loop() {if (imgX <= 10) { //人物位置到达屏幕最左侧,改向右direction = 1} else if (imgX >= canvas.width - 50) {//人物位置到达屏幕最右侧,改向左direction = -1}rectY += DROP_SPEED //箱子下移DROP_SPEEDimgX += direction * MOVE_SPEED //改变人物位置坐标drawRect(rectX, rectY) //重新绘制箱子,人物,积分if (rectY > canvas.height - 100 && rectY <= canvas.height) {//达到底部let range = Math.abs(rectX - imgX) //与人物之间距离if (range <= 50) { //检测碰撞rectY = canvas.heightscore++ //加分}}if (rectY > canvas.height) {rectY = 0let spwanX = Math.floor(Math.random() * (canvas.width - 80))box(spwanX, rectY) //重新设置箱子位于顶部rectX = spwanX}requestAnimationFrame(loop); //循环渲染
}
loop()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38769.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序| 做一款多人实时线上的五指棋联机游戏

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏&#xff01;从个人到商业的全套开发教程&#xff0c;实打实的干货分享&#xff0c;确定不来看看&#xff1f; …

游戏陪玩小程序怎么开发-游戏陪玩小程序功能

目前游戏陪玩行业已经占据了很大的市场所在&#xff0c;拥有一款完善的陪玩软件可以帮助很多用户实现更好的实现游戏陪玩的寻找&#xff0c;当然开发陪玩小程序也是要注意很多方面。下面说一下如果开发和核心功能 如何开发&#xff1f; 开发无非就是几种 1、自己懂技术慢慢学…

Unity游戏上传到微信小程序

一、注册 地址&#xff1a; 微信小程序 补充信息&#xff08;类目需要选择游戏方面&#xff0c;不然后面调试不了&#xff09; - 注意AppID 二、下载插件 地址&#xff1a;Unity转微信小程序 三、转换项目 四丶 下载微信开发工具并导入项目 微信开发者工具 打包好会生…

微信小程序项目实例——2048小游戏

今日推荐&#x1f481;‍♂️ 第一次听廖俊涛的歌是他首次出现在明日之子舞台上的那首《谁》 到现在这首歌成了我网易云收藏的十几首歌中的一首&#xff0c;也是听的最多的一首 怎么形容呢&#x1f914;算不上惊艳&#xff0c;却百听不厌&#x1f442; &#x1f52e;&#x1…

蛋白互作常用的研究方法

蛋白质是生物功能最直接的执行者&#xff0c;虽然一些蛋白质可以独立的完成他的使命&#xff0c;但是大部分的蛋白都是需要一些伴侣分子的协助一起完成任务或者形成复合物之后才能充分发挥他的功能。所以&#xff0c;了解蛋白质与蛋白质之间的相互作用&#xff0c;能够帮助我们…

OpenAL联合创始人Ilya:你要与AI较劲吗?

AlexNet、AlphaGo、GPT、CLIP、DALL-E、Codex&#xff0c;一个个在AI界夺目闪耀&#xff0c;又影响深远的杰作&#xff0c;其背后都镌刻了一个人的名字。 在2012年博士毕业后的10年里&#xff0c;其论文被引次数超过25万次&#xff0c;领导开发了划时代的GPT系列&#xff0c;成…

改写中文句子的软件-修改文章句子的软件

免费语句改写软件 您是否在写博客、新闻稿或者其他需要大量文本的场合中觉得无从下手&#xff1f;您是否为修改一段语句上耗费大量时间感到困扰&#xff1f;如果您有这样的烦恼&#xff0c;那么我向您介绍我们的免费语句改写软件&#xff0c;可以帮助您快速批量语句改写&#x…

去中心化开源社交平台Misskey

本文是应网友 anthony084 的要求写的&#xff1b; 什么是 Misskey &#xff1f; Misskey 是一个开源、去中心化的社交媒体平台&#xff0c;发帖方式类似于微博和推特。 去中心化则意味着一个 Misskey 实例可以与其他 Misskey 实例进行相互连接&#xff0c;在 Fediverse (Activi…

讯图科技数据网关解决方案

一、方案定位&#xff1a; 一套高可用&#xff0c;支持高并发的数据服务分发系统&#xff1b;一套可配置的动态数据服务开发调试框架&#xff1b;整合alibaba spring cloud、dubbo&#xff0c;支持熔断、限流&#xff1b;可扩展定制go、C#、java开发SDK等。 二、系统架构图 三…

未来5年,生产力的底层逻辑变了,影响所有企业

上周&#xff0c;K哥带领20多位企业家、技术高管参访了阿里钉钉&#xff0c;学习AI大模型如何应用到企业生产经营和组织管理当中&#xff0c;以及企业如何使用新生产力工具实现降本增效。 通过这次参访&#xff0c;我对AI大模型如何驱动企业管理变革有了新的认识&#xff0c;三…

字节发年终奖了

❤️点击上方&#xff0c;选择星标或置顶&#xff0c;每天给你送上干货❤️ 作者 | godweiyang 出品 | 公众号&#xff1a;算法码上来&#xff08;ID&#xff1a;GodNLP&#xff09; - BEGIN - 好久没写文章了&#xff0c;上一次发文章还是2.14情人节了&#xff0c;一转眼两个多…

AIGC狂飙,能否成为娱乐社交应用的狂欢?

4 月 22 日&#xff0c;PMTalk 社交娱乐产品增长与运营新玩法线下沙龙在广州举行&#xff0c;网易云信娱乐社交行业解决方案专家姚柱围绕 AIGC 与娱乐社交玩法融合&#xff0c;分享了《AIGC 狂飙背后的娱乐社交产品趋势与实践》&#xff0c;以下为演讲整理实录。 目前&#xf…

干货篇:如何从 0 到 1 落地你的第一个开源项目?破局分享!

前言 大家好&#xff0c;我是 「周三不Coding」。最近马上就要到秋招提前批啦&#xff0c;相信很多小伙伴都在忙着复习八股文、刷算法题、准备简历中。 最近我也关注到了很多同学都在问一个问题&#xff0c;如何做一个自己的项目。 项目的重要性想必大家都清楚&#xff0c;如…

chatgpt赋能python:Python中让所有单词的首字母变成大写的SEO文章

Python中让所有单词的首字母变成大写的SEO文章 作为一种开源编程语言&#xff0c;Python已经在各个领域崭露头角。伴随着搜索引擎优化&#xff08;SEO&#xff09;的发展&#xff0c;Python也成为了一个极其有用的工具&#xff0c;尤其是当涉及到优化网站上的关键词时。 在本…

chatgpt赋能python:横向拼接图片在SEO中的作用

横向拼接图片在SEO中的作用 在现代网络环境中&#xff0c;图像搜索和视觉呈现在SEO中扮演了非常重要的角色。人们喜欢通过高质量的图像来寻找信息和生成视觉印象。对于像素比率和视觉呈现的好坏&#xff0c;图像品质是重中之重的。在这样的SEO环境中&#xff0c;对于那些希望通…

chatgpt赋能python:如何用Python开发安卓APP并进行SEO优化

如何用Python开发安卓APP并进行SEO优化 介绍 Python是一种著名的编程语言&#xff0c;由于其简洁性和功能强大性&#xff0c;Python被广泛应用于计算机科学和软件工程领域。不仅如此&#xff0c;Python还可以用于开发移动应用程序&#xff08;APP&#xff09;。 虽然Python是…

chatgpt赋能python:Python在SEO优化中的作用

Python在SEO优化中的作用 概述 Python是一种被广泛应用于各种领域的编程语言&#xff0c;包括数据科学、机器学习、Web开发等。近年来&#xff0c;Python在SEO&#xff08;搜索引擎优化&#xff09;中也扮演着重要的角色。Python的强大功能使得它成为一个很好的工具&#xff…

chatgpt赋能python:用Python写SEO工具

用Python写SEO工具 SEO&#xff08;Search Engine Optimization&#xff09;是指在网站设计、内容编写、关键词优化等方面&#xff0c;提高网站在搜索引擎中排名的一种策略。而随着Python编程语言的逐渐流行&#xff0c;我们可以利用Python编写一些SEO工具&#xff0c;帮助我们…

chatgpt赋能python:Python网站的SEO优化技巧

Python 网站的 SEO 优化技巧 随着互联网时代的发展&#xff0c;越来越多的网站开始依赖搜索引擎获取流量。SEO&#xff08;Search Engine Optimization&#xff09;便随之而生&#xff0c;它是一种通过优化网站结构和内容&#xff0c;从而提高网站在搜索引擎的自然排名及流量的…