微信小程序——【百景游戏小攻略】
微信小程序——【百景游戏小攻略】
本次课程小项目中的图片以及文章还未获得授权!请勿商用!未经授权,请勿转载!
博客班级 | https://edu.cnblogs.com/campus/zjcsxy/SE2020 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/zjcsxy/SE2020/homework/11334 |
作业目标 | 1.编写一个小程序,可以全新编写,也可以学习别人的小程序进行修改 2.熟悉git代码管理流程,将源代码上传到到 3.github在博客园班级中写一篇相应的博文 |
作业源代码 | https://github.com/LittleFox99/software-engineering |
学号 | 31801128 |
院系 | 浙大城市学院计算机专业 |
班级姓名 | 计算1803 陈可盈 |
1.前言
- 因为作业目标中提到可以学习别人的小程序进行修改,所以就去github上找微信小程序的开源项目,一些项目无法运行,一些项目整体结构十分完整且数据存放在云盘上对初学者不太友好。所以最终还是决定自己创一个小的项目,合并与修改一些小组件。(项目中翻牌小游戏是我进行修改的他人项目,目的是使小程序更为完整以及趣味化,同时为后续的认知模型的大作业作准备)
- 暑假开始,在玩一个休闲游戏,收集了一部分的攻略文章还有图片素材,就打算做一个游戏的小攻略程序。
2.项目展示
2.1界面展示
- 首页
- 小攻略
首页-小攻略


- 翻牌小游戏


- 布局(举例两个)


2.2目录结构
├── app.js
├── app.json
├── app.wxss
├── components
├── data
│ ├── gonglue.js
│ ├── gonglue.json
│ ├── gonglue.wxml
│ └── gonglue.wxss
├── images
│ ├── b-1.JPG
│ ├── b-2.JPG
│ ├── b-3.JPG
│ ...
│ └── yt-4.JPG
├── pages
│ ├── detail
│ │ ├── article.js
│ │ ├── article.json
│ │ ├── article.wxml
│ │ └── article.wxss
│ ├── game
│ │ ├── game.js
│ │ ├── game.json
│ │ ├── game.wxml
│ │ └── game.wxss
│ ├── game-index
│ │ ├── gama-index.js
│ │ ├── gama-index.json
│ │ ├── gama-index.wxml
│ │ └── gama-index.wxss
│ ├── index
│ │ ├── index.js
│ │ ├── index.json
│ │ ├── index.wxml
│ │ ├── index.wxss
│ │ └── pc
│ │ ├── person.js
│ │ ├── person.json
│ │ ├── person.wxml
│ │ └── person.wxss
│ ├── logs
│ │ ├── logs.js
│ │ ├── logs.json
│ │ ├── logs.wxml
│ │ └── logs.wxss
│ └── tujian
│ ├── tujian.js
│ ├── tujian.json
│ ├── tujian.wxml
│ └── tujian.wxss
├── project.config.json
├── sitemap.json
└── utils
└── util.js
- data
- 存放攻略的具体数据(该项目写的比较简陋,数据收集较少,所以一些数据直接写在页面里,建议之后将其他页面的数据一起存放在data中)
- images
- 存放该项目的所有图片素材
- pages
- detail——攻略文章页面
- game——游戏页面
- game-index——游戏的首页
- index——首页
- pc——人物图鉴的页面
- tujian——布局
3.代码学习之路
3.1布局
3.1.1轮播图
轮播图的wxml文件中轮播图模块我将图片全部列出来,其实只要写个循环
<view class="lunbo-section">
<swiper class='lunbo' indicator-dots='true' autoplay='true' interval='4000'>
<swiper-item> <image src='/images/lunbo-1.JPG'></image> </swiper-item>
<swiper-item> <image src='/images/lunbo-2.JPG'></image></swiper-item>
<swiper-item> <image src='/images/lunbo-3.JPG'></image> </swiper-item>
<swiper-item> <image src='/images/lunbo-4.JPG'></image> </swiper-item>
<swiper-item> <image src='/images/lunbo-5.JPG'></image> </swiper-item>
</swiper>
</view>
{{}}是数据,它绑定使用 Mustache 语法(双大括号)将变量包起来.因为数据较少,轮播图的wxml文件中轮播图模块我将图片全部列出来,其实只要写个循环将图片源载入即可,比如:
<swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">
<block wx:for="{{imgUrl}}">
<swiper-item>
<image src="{{item}}" class="slide-image" />
</swiper-item>
</block>
</swiper>
使用了滑块视图容器swiper,在页面的js中自己写函数设置swiper的属性或者在wxml设置直接设置属性
data{
background: ['demo-text-1', 'demo-text-2', 'demo-text-3','demo-text-4','demo-text-5'],
indicatorDots: true,
...
autoplay: false,
interval: 2000,
duration: 500,
...
},
...
属性 | 说明 |
---|---|
indicator-dots | 是否显示面板指示点 |
autoplay | 是否自动切换 |
interval | 自动切换时间间隔 |
duration | 滑动动画时长 |
3.1.2选项卡
给页面赋值index,给view(tab)设置一个点击事件bindtap,并且给view(tab)一个data-index索引,根据页面的index来改变tab的状态并决定swiper显示不同页面的内容。
<view class='topTabSwiper'>
<view class='tab {{currentData == 0 ? "tabBorer" : ""}}' data-current = "0" bindtap='checkCurrent'>
<image src='/images/im-2.JPG'></image>
<text>
小攻略</text>
</view>
<view class='tab {{currentData == 1 ? "tabBorer" : ""}}' data-current = "1" bindtap='checkCurrent'>
<image src='/images/im-3.JPG'></image>
<text>
人物图鉴</text>
</view>
</view>
//点击切换,滑块index赋值
checkCurrent:function(e){
const that = this;
if (that.data.currentData === e.target.dataset.current){
return false;
}else{
that.setData({
currentData: e.target.dataset.current
})
}
}
3.1.3图片列表
以布局页面举例
- 列表渲染:官方解释——在组件上使用
wx:for
控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。用<block/>
,渲染一个包含多节点的结构块。 - 这里学习了社区的代码片段,在使图片列表完整显示的时候使用的是scoll-view,比较简单的实现页面下拉,但查询微信开发文档时,官方给了一些小tip(比如:在滚动
scroll-view
时会阻止页面回弹,所以在scroll-view
中滚动,是无法触发onPullDownRefresh
以及若要使用下拉刷新,请使用页面的滚动,而不是scroll-view
,这样也能通过点击顶部状态栏回到页面顶部),所以代码还有待优化。
<swiper-item style="overflow: scroll;">
<scroll-view scroll-y refresher-enabled refresher-background="#F6F7F8" refresher-triggered="{{isRefresh}}" bindrefresherrefresh="refresherpulling" bindscrolltolower="handleTolower">
<view class="swiper-item">
<block wx:for="{{item.bjList}}">
<view class="post-container">
<image src="{{item.imgSrc}}" class="post-img"></image>
<text class="post-title">{{item.title}}</text>
</view>
</block>
</view>
<view class="swiper-item">到底了~~图片均未获得授权</view>
</scroll-view>
</swiper-item>
handleTolower(e){
wx.showToast({
title: '到底啦!'
})
},
refresherpulling() {
wx.showLoading({
title: '刷新中'
})
setTimeout(() => {
this.setData({
isRefresh: false
})
wx.showToast({
title: '加载完成'
})
}, 2000)
}
- 列表渲染:官方解释——在组件上使用
3.2页面跳转
- 跳转页面的父页面
- e是事件对象,可以携带额外信息,currentTarget是事件触发的当前事件(注:与Target之间的区别,可自行查阅资料),dataset是当前组件上由data-开头的自定义属性组成的集合。
- 我们在需要点击跳转的模块绑定跳转函数
goDetailArticle(e)
,自定义了自定义属性组成的集合data-id,对应跳转数据中的id属性,实现跳转。这里要非常重要,可以打印一下数据console.log()
,查看是否接受到数据了,刚开始e.currentTarget.dataset拿不到数据,我自己debug了很久,查阅资料发现重点:以data-开头,多个单词由连字符-链接,不能有大写(大写会自动转成小写)如data-element-type,最终在 event.target.dataset 中会将连字符转成驼峰elementType。 wx.navigateTo
带参数的页面跳转,跳转之后并且自带返回箭头,个人理解,比较适用于有列表渲染的idx的模块。wx.switchTab
跳转到tab页。
goDetailArticle(e) {
var postId = e.currentTarget.dataset.postid;
console.log(e);
console.log(postId);
wx.navigateTo({
url: '../detail/article?id='+postId
})
}
<view class="post-container" bindtap="goDetailArticle" data-postid="{{item.postid}}">
<view class="post-author-date">
<image src="{{item.avatar}}" class="post-author"></image>
<text class="post-date">{{item.date}}</text>
</view>
<text class="post-title">{{item.title}}</text>
<image src="{{item.imgSrc}}" class="post-img"></image>
<text class="post-content">{{item.content}}</text>
</view>
被跳转的界面接受数据。
onLoad:function(options){
var postId=options.id;
this.data.postId = postId;
var data = postsData.glList[postId];//根据数据集合中自定义的id属性于数据的idx相同,实现获取具体的数据。
this.setData({...data});//发送数据到data中
console.log(postsData);
console.log(options);
}
3.3静态数据
var local_database = [
{
date:"07月29日 2020年",
title:"【保姆级·「驿站探险」·快速通关攻略】",
imgSrc:"/images/yizhan.JPG",
avatar:"/images/t1.JPG",
content:"牡丹亭的主线和副线我都快快做完了,分享一下心得。方便新手们参考。但我几乎算0氪玩家,用的人也比较非,一定还有更好更快的办法。",
author:"东西研究所",
postid: 0,
detail:"选人冒险属性高的(这个应该不用说吧)。去驿站出发前选人会显示体力的,挑体力高的人去,一次可以做多点任务。还要看人物天赋。我一开始抽到的人没什么厉害的,前期都在用卿级的冯梦龙,他算是卿级属性最好的。然后还有阿朵,自带天赋是摘花砍树都可以省体力,遇到那种-15的牡丹花之类的,相当于省一半体力了。但阿朵属性比较低,可以带珍宝配加属性。后来一些可以用的就是徐霞客(体力多,容易抽到)、王昭君(属性高,省粮草)、汪直、常遇春。别的冒险属性高的我没抽到。反正数值大家自己看,选体力多的就对了!还是体力,三白酒可以补50体力。每天在客栈可以领三次(10:00、16:00、21:00)。还有就是土行孙那里也能拿到。省去看广告的时间。地图上会有小泉水,发光的,不用仔细找也能看到。一次补50体力。同理还有摇钱树,也是发光的,点了能有铜钱(似乎耗费5体力)。反正大家地图上看到什么奇怪东西,又不用花什么体力都可以点一下。"
},
......
]
var mydata="jiangbai";
module.exports = {
glList: local_database,
jiangbai:mydata
}
3.4游戏逻辑
项目中翻牌小游戏是他人项目,目的是使小程序更为完整以及趣味化,同时学习其中的游戏逻辑,为后续的认知模型的大作业作准备。具体代码以及注释可看github上的项目。以下是我自己对这个小程序的一点理解
/*开始游戏*/
startGame: function ()
{
/*打乱牌堆,首先是选出参与游戏的牌,然后打乱*/
var tmp = this.data.allCard.sort(
.....
);
/*设置卡片的state,游戏刚开始时露出所有牌的正面,而后迅速变成背面*/
setTimeout(function () {
// 所有的牌翻到背面
// 开始计时了才让点
// 游戏开始计时
}
/*二维数组设定卡牌位置,通过获取坐标,检测是翻过来的第几张牌,通过卡牌的state来看玩家是否完成配对*/
onTap: function (event){
//1.牌翻过来,没有完成配对,修改卡牌的状态
//2.牌翻过来,完成配对,修改卡牌的状态,页面显示改变
//3.检查是否所有牌都已经翻过来,都已翻过来提示游戏结束 }
4.总结
4.1收获
小程序的新手入门,因为小程序的开发比较类似web,也算是复习了web前端的一点知识。从刚开始下载github上一些demo的一脸茫然,到现在已经可以开始着手自己写一个微信小程序的代码片段,并最后可以组成一个不太完整比较粗糙的小程序。之前不怎么喜欢看官方的开发文档,比较喜欢直接搜索或找demo学习,现在发现官方的开发文档才是最重要的最规范的。
4.2困难
刚开始看不懂github上一些项目非常完整的代码,找不到他们的数据在哪,后来才知道他们将数据放在服务器上。写代码的日常是页面接受不到数据,需要一直找bug,以及web的知识忘记了不少,布局上经常出现问题。微信组件也非常不熟悉,代码能力跟不上想法,不停地看博客教程和官方的开发文档。
4.3优化
使用的是静态数据,没有配置域名(没有服务器)而不能进行后台操作
人物图鉴的页面还没有写完整
渲染列表数据多了,容易卡
列表模块可以写成模版,是代码看起来更简洁
。。。。。。
5.参考资料
https://www.cnblogs.com/chenyingying0/archive/2020/03/23/12556083.html
写项目的时候,参考的博客很多,大多已经找不到链接,如有侵权,非常抱歉!
6.本次课程小项目中的图片以及文章还未获得授权!请勿商用!未经授权,请勿转载!
微信小程序——【百景游戏小攻略】的更多相关文章
- 微信小程序开发的游戏《拼图游戏》
微信小程序开发的游戏<拼图游戏> 代码直接考进去就能用 pintu.js // pintu.js Page({ /** * 页面的初始数据 */ data: { }, initGame: ...
- 微信小程序开发详解——小程序,大颠覆!
微信小程序开发 联系 苏念 188.1414.7927 微信小程序系统开发 微信新功能开发 小程序开发 小程序怎么开发 app小程序开发 简化小程序开发 微信小程序定制 小程序制作 开发微信小程序 ...
- 微信小程序来了,小程序都能做些什么
2017年的微信大动作就是微信小程序了,到底小程序都能做些什么?这是很多人关注的热点,小程序开发对企业又有什么帮助呢?下面让厦门微信小程序开发公司来为你就分析下. 微信小程序与APP的关系 ...
- 微信小程序快速移植支付宝小程序
移植背景: 1. 支付宝小程序开发文档只了解了大致框架,跑了demo,具体Api.组件没太多了解: 2. 已有微信小程序,移植支付宝小程序做预研(主要针对授权登录.支付等功能). 3. 移植的微信小程 ...
- 微信小程序迁移到头条小程序工具
最近公司需要将微信小程序迁移到头条小程序,比较得知微信和头条小程序的写法类似,只有文件名称不同,相关的指令不同,以及头条在ttml绑定的数据不可使用function,于是就写了node脚本来实现这些重 ...
- 微信小程序的开发——01小程序的执行流程是怎样的?
作者:叶小钗 转载至:https://www.cnblogs.com/yexiaochai/p/9346043.html 我们这边最近一直在做基础服务,这一切都是为了完善技术体系,这里对于前端来说便是 ...
- 微信小程序学习笔记一 小程序介绍 & 前置知识
微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...
- QQ小程序开发与发布小教程
QQ小程序QQApp,和微信小程序类似,可以直接在手机QQ中直接打开,应用内应用,省去了安装手机APP,非常方便.官方的介绍:QQ小程序为QQ体系下的应用开放平台,可为不同类型的产品提供框架,并在QQ ...
- 小程序登录及AppSecret(小程序密钥)
在授权开发以后,需要提交小程序密钥,有小程序密钥第三方才有能力获取用户的一些信息,提供一些能力! 平台分别提供多种方式实现微信登录: 1. 调用wx.login接口,静默获取openid 适用场景:无 ...
随机推荐
- mysql-9-limit
#进阶9:分页查询 /* 当要显示的数据,一页显示不全,需要分页提交sql请求 SELECT FROM JOIN ON WHERE GROUP BY HAVING ORDER BY LIMIT off ...
- 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和
048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...
- Flutter 开发从 0 到 1(三)布局与 ListView
上周日出去玩了,因此没时间写文章.我司加班到 11 点,第二天可以晚上班一个小时,加班到 12 点,可以晚上班两个小时,以此类推,为什么说这个,对的,加班第二天我没有多睡觉,而是起来抓紧时间写文章,好 ...
- vscode编写python,引用本地py文件出现红色波浪线
前言 引用本地py文件出现红色波浪线,如下图: 原因 经过查询得知,vscode中的python插件默认使用的是pylint来做代码检查,因此需要对pylint做一些配置 解决方案 在setting. ...
- CSS语法规范与代码风格
CSS语法规范与代码风格 1. 语法规范 CSS规则又两个主要的部分构成:选择器+一条或多条声明. 选择器:用于指定CSS样式的HTML标签,花括号内的是设置的具体样式 属性与属性值以键值对的形式出现 ...
- 手把手教你AspNetCore WebApi:Nginx(负载均衡)
前言 这几天小明又有烦恼了,系统上线一段时间后,系统性能出现了问题,缓存等都用上了,还是不能解决问题.马老板很大气,又买了3台服务器,让小明做个集群分流一下. 集群是什么? 是一种计算机系统,它通过一 ...
- 界面酷炫,功能强大!这款 Linux 性能实时监控工具超好用!
对于维护.管理Linux系统来说,它的性能监控非常重要,特别是实时监控数据,这个数据有利于我们判断服务器的负载压力,及时调整资源调配,也有助于更好的服务于业务.所以,今天民工哥给大家安利一款 Linu ...
- Ubuntu搜狗输入法安装
一.下载sogoupinyin_2.2.0.0108_amd64.deb 二.拷贝到服务器并安装 sudo dpkg -i sogoupinyin_2.2.0.0108_amd64.deb 三.设置搜 ...
- Drone 安装教程
Drone 安装教程 一. CentOS设置 1. 更换阿里源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/ ...
- Linux命令的执行
为什么在提示符下命令可以被执行呢? 执行命令过程 输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来 shell本身也是一个程序,只不过 ...