微信小程序——【百景游戏小攻略】
微信小程序——【百景游戏小攻略】
本次课程小项目中的图片以及文章还未获得授权!请勿商用!未经授权,请勿转载!
博客班级 | 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 适用场景:无 ...
随机推荐
- C++中_T()和L的区别
转载:https://blog.csdn.net/amusi1994/article/details/53898960 前言 本文旨在介绍于VC++常见的两个类型:_T()和L 概念 字符串前面加 ...
- Oracle Database XE 11gR2 SQL 命令行的显示调整
操作系统:Windows 10 x64 Oracle Database XE 11gR2 参考:在cmd命令行使用sqlplus时的页面显示问题 通过 cmd 命令行或运行 SQL 命令行查看一张表的 ...
- Ubuntu通过Apache安装WebDav
使用KeePass保存密码,在个人服务器上安装WebDav协议. # 安装Apache2服务器 sudo aptitude install -y apache2 # 开启Apache2中对WebDav ...
- Selenium截屏 图片未加载的问题解决--【懒加载】
需求: 截屏后转PDF. 问题: selenium截屏后,图片未加载 如下图: 原因: 网站使用了懒加载技术:只有在浏览器中纵向滚动条滚动到指定的位置时,页面的元素才会被动态加载. 什么是图片懒加载? ...
- HttpReports 2.0 发布了 !!!
前言介绍 HttpReports 是基于.Net Core 开发的APM监控系统,使用MIT开源协议,主要功能包括,统计, 分析, 可视化, 监控,追踪等,适合在微服务环境中使用. Github地址: ...
- LVS+keepalive
LVS+keepalive 什么是keepalive Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,HA),其实两种不同的含义:广义来讲 ...
- Jenkins从节点上构建自动化测试项目时报错:java.io.IOException: Unexpected termination of the channel
在mac电脑上配置了Jenkins从节点,在该从节点上构建app UI 自动化测试项目,运行一些用例后报如下错误: java.io.EOFException at java.io.ObjectInpu ...
- redis协议规范
好多年前看过redis的代码,那个时候还是2.6的版本,集群和哨兵还没加入正式代码,这几年redis发展的好快.简略翻译一篇文章redis的https://redis.io/topics/protoc ...
- python -re库
正则表达式的语法 正则表达式语法由字符和操作符构成 正则表达式的常用操作符: print("--正则表达式常用操作符--") mata="11356352135 abcd ...
- MeteoInfoLab脚本示例:Hamawari-8 netCDF data
示例数据:ftp://ftp.bom.gov.au/anon/sample/catalogue/Satellite/IDE00220.201507140300.nc 该数据的分辨率很高(22000*2 ...