我用Axure制作了一款火影小游戏 | PM老猫
Axure不仅仅是一个原型工具,除了原型之外还可以用来制作一些静态网页,这点对于不懂代码或前端的同学来说挺实用。之前整理了一版《Axure函数自查表》,因为感觉内容太多又对前端样式及脚本感到陌生,就直接用Axure设计生成了一个静态页面直接在服务端发布就替代了。
以前没事研究Axure时做过一款飞刀小游戏很粗糙,利用业余时间没事构思了一下,感觉用Axure做小游戏还是不难,主要难度应该都是在细节上(比如素材、动画等)。周末两天没事弄了下类似跑酷的小游戏《Naruto疾风传》←点击试玩 下面把游戏制作思路分享给大家,感兴趣的朋友可以相互
游戏试玩
电脑端试玩: 《Naruto疾风传》
手机端试玩:扫下方二维码,或者关注公众号[PM老猫]回复“小游戏”
游戏介绍
游戏主要分三种模式:经典模式、下忍模式、上忍模式。
经典模式:随着游戏分数的增加、游戏难度也会增加,在达到1000分时人物移动速度会提高,经典模式突破排行榜最高分可获得排行榜留名机会(排行榜永久有效)。
下忍模式:最简单,正常情况下游戏障碍物只有树枝,难度不会增加。
上忍模式:难度相对较高,障碍物除了树枝还会有手里剑。
游戏主框架
游戏主框架主要使用一个main动态面板(开始游戏、游戏中、游戏结束)的三个状态对游戏状态进行控制。开始、结束状态操作相对比较简单这里就不做详细介绍了,重点分享一些游戏中的设置与思路。
人物动作
人物自身跑动使用三张图片在动态面板中循环播放。因为游戏中人物需要左右来回跳动,所以还需要相反方向的三张图片放在另一动态面板中循环播放,在左右移动操作时,来回切换左右侧面板就可以了。
1、准备一个人物动态面板,面板中添加左右两个状态。
2、在人物面板中左状态中添加左侧面板(面板中套面板),左侧面板中添加三个状态,每个状态中放入对应的人物动作图片。
3、在人物面板中右侧状态中添加右侧面板,右侧面板中添加三个状态步骤跟左侧面板一样。
4、将左右侧面板设置为循环播放人物就动起来了,可以是载入时触发循环也可以通过开始按钮触发(图片顺序不能乱,否则动作就会不连贯)
人物图片:
刚开始的时候有考虑过直接用GIF图片代替,在网上找了很久很难找到人物跑动且背景透明的GIF,最重要是游戏需要左右切换往上跑的,所以找到GIF图片后还得进行一次翻转得到反方向的动作,尝试了几种方法要么翻转过来图片不动了,要么背景又变成不透明了。最后索性自己PS了一个。下图就是人物最初原图,通过PS把人物从突破里面扣出来,然后自己再P两个连贯的动作。
人物左右移动
1、在屏幕最上层放左右两个热区
2、通过点击左右侧的热区控制人物面板左右状态的切换。
3、让人物跳跃更逼真一些,可以在左右移动过程中让人物面板的播放停在跃起动作的状态中,到达目标位置后继续播放。
人物移动的时间也就是速度,可以设置根据一些条件缩短或延长,比如达1000分增加人物移动速度增加游戏的趣味性(刚开始可以不考虑,可以等游戏最基础的框架动起来了再去增加设置,因为东西越多后续控制起来越乱容易出BUG)。
场景—树
Naruto疾风传里的游戏场景是在树上左右跳动躲避障碍物,最基础的场景就是树。让树动起来也需要借助动态面板,主要让动态面板控制树的循环移动。
1、在游戏中添加左右两张树木的图片(图片长度最好是两屏的长度)
2、在游戏页面中添加一个树动态面板,面板中需要添加两个状态(状态下不需要内容主要用来切换触发切换事件),添加树面板切换时移动树图片往下移动(移动效果线性移动),再添加将树图片复原的移动(这里不需要设置移动效果)。
3、进入游戏时(也可以是开始按钮)触发树面板的循环移动了。
树的移动时间根据树图片的长度而定。想让树移动的比较丝滑就需要将树的最终位置与起始位置画面显示内容一模一样,要不然会有卡顿的感觉。
场景障碍物—树枝
树枝跟树一样,左右侧两个树枝分别用两个动态面板控制树枝移动。
树枝的移动速度需要与树干的移动速度同步(树枝移动距离/移动时间=树干移动距离/移动时间),要不然会感觉树枝不是长在树干上的。
树枝部分需要设置进入游戏画面时的初始位置错开,要不然左右两侧树枝同时落下可躲避机会很小。或者设置左右树枝关联动态面板的循环速度(循环速度就是控制树枝出现在有场景中的速度),这样还是有很小的概率同时出现也就增加的游戏的挑战性。
场景障碍物—手里剑
增加游戏难度与趣味性,加了两个手里剑,手里剑随机出现的位置通过Math.random()函数控制,在此游戏中也就主要控制x坐标的位置,位置公式为:手里剑出现的最小x坐标值+Math.random()X手里剑所出现范围宽度(如:[[50+Math.random()*270]])
与树干树枝一样,可以用一个动态面板控制的切换时间控制手里剑的移动与复原。
增加游戏的趣味性可以将动态面板的自动循环的触发设置一些条件,比如达到1000分增加难度触发手里剑下落。
游戏失败—触碰判断
同样借助动态面板的循环切换,在动态面板切换时触发判断。这个面板的循环速度要快我这里是设置的1毫秒切换一次(实际应该达不到1毫秒),慢了的话会给人没触碰到相应区域的感觉。
判断人物面板是否有接触到树枝、手里剑等,触碰到则停止控制其他道具移动的动态面板,最后进入游戏结束主面板。
同时增加游戏趣味性,在触碰时可以控制人物面板做旋转并移动,给人一种掉落的体验效果。
游戏得分
通过设置一个全局变量显示得分,在游戏过程中不停为全局变量赋值。直接使用
游戏失败触碰判断面板的切换事件控制的得分,如果触碰到障碍物则游戏结束,否则加分。
关于BGM
好玩的游戏没有超然的BGM是没有灵魂的,添加背景音乐最简单的方式就是在页面中添加一个内联框通过内联框访问MP3地址进行播放(现在很多刘浏览器都不支持这种方式自动播放,更别提在微信浏览器中直接播放了,最奇葩的不但不自动播放直接把MP3当文件下载了)。
研究了很久最后还是选择放弃直接通过Axure设置触发自动播放,最终通过修改Axure生成HTML文件加上几行自动播放代码才搞定,代码是在CSDN上找的能在微信浏览器中自动播放BGM(不知道有没有前端大神可以实现通过简短的js代码让音乐自动播放,最好能直接通过地址栏请求就能实现播放,欢迎留言交流)。
<script src="http: //res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<audio src="narutoBGM背景音乐.mp3" controls="controls" playsinline="true" webkit-playsinline="true"
x5-video-player-type="h5" x5-video-player-fullscreen="true" autoplay="autoplay" loop="loop" id="myPlay" style="display:none"></audio>
<script>
document.addEventListener('WeixinJSBridgeReady',
function () {
var video = document.getElementById("myPlay");
video.play();
},
false
);
document.addEventListener('touchstar', function () {
var video = document.getElementById("myPlay");
video.play();
}, false); $(function () {
var video = document.getElementById("myPlay");
$('body').click(function () {//有效
video.play();
}); });
</script>
游戏排名
为增加游戏可玩性与趣味性,增加了简单的排行榜功能,超越最高分则可以留名荣登榜首。
但这个必须借助服务端进行记录,Axure目前没法直接实现。
实现逻辑:
在服务端添加一个可以请求的地址,每次请求带上游戏得分作为Get请求参数,在服务端判断收到请求的得分是否高于当前排行榜最高分,如果高于最高分则给前端反馈一个文本框与提交按钮。用户通过文本框填写名称,提交后进行排行榜留名。如果未高出最高分则直接显示排行榜列表。
其他
为增加游戏可玩性与趣味性,可以增加些难度、道具、模式等等。比如随着游戏分数的增加角色外形随着变化;再比如增加一些剧情,救下女朋友获得一次免死等等。
原游戏规划中,规划了螺旋丸的道具收集到该道具获得一次免死,后来发现游戏弄的太复杂了没时间弄(毕竟为了排行榜特地干了回老本行在服务端用后台代码写了个排行榜功能)
Axure真的强大,尤其动态面板、中继器等元件挺好用的。
我用Axure制作了一款火影小游戏 | PM老猫的更多相关文章
- 【沙龙报名中】与微信&云开发官方团队零距离互动,揭秘爆款微信小游戏背后的技术!
有人说 微信小程序游戏的百花齐放 活像十几年前的4399小游戏称霸互联网的景象 " 歪,斗地主吗,三缺二, 不用下app,小程序就能玩,我保证不抢地主让你抢!" ...... &q ...
- 从零开始开发一款H5小游戏(二) 创造游戏世界,启动发条
本系列文章对应游戏代码已开源 Sinuous game 上一节介绍了canvas的基础用法,了解了游戏开发所要用到的API.这篇文章开始,我将介绍怎么运用这些API来完成各种各样的游戏效果.这个过程更 ...
- 从零开始开发一款H5小游戏(三) 攻守阵营,赋予粒子新的生命
本系列文章对应游戏代码已开源 Sinuous game. 每个游戏都会包含场景和角色.要实现一个游戏角色,就要清楚角色在场景中的位置,以及它的运动规律,并能通过数学表达式表现出来. 场景坐标 canv ...
- 介绍一款Android小游戏--交互式人机对战五子棋
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6589025 学习Android系统开发之余,编 ...
- 一款WP小游戏代码分享
首先声明游戏是H5的代码,当然游戏部分不是我写的,感谢@LeZhi的分享,关于H5我还在学习,这里只是简单介绍一下如何把一款现成的H5游戏封装成一款WP游戏(当然也可以做成Windows游戏). 大家 ...
- swift出师作,史丹佛大学游戏制作案例,计算器,小游戏
这两个案例得好好弄清楚,感觉在任何方面既然能够作为公开课被提到这所名校的课程里面自然有不得不学习的理由,感觉应该去入手一下,毕竟这种课,价格不匪,难以接触,能看到就当再教育了.
- 制作的第一个java小游戏
package java1; import java.awt.*; public class java1 extends Frame { //球桌和桌球图片 Image ball = Toolkit. ...
- 微信小游戏爆款秘笈 数据库MongoDB攻略篇
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB 发表于云+社区专栏 随着微信小游戏的爆发,越来越多开发者关注到MongoDB与小游戏业务的契合度. ...
- 使用Axure制作App原型应该怎样设置尺寸?
使用Axure制作的原型,如果你没有设置自适应视图的话它是不会自动适应任何设备的. 若要解释清楚这个问题需要的篇幅比较长,请大家自行参考 Point/Pixel/PPI/DPI 的意思和它们之间的关系 ...
随机推荐
- NB-IoT无线通信模块与Lora无线通信协议技术分析与前景展望
物联网的快速发展对无线通信技术提出了更高的要求,专为低带宽.低功耗.远距离.大量连接的物联网应用而设计的LPWAN(low-power Wide-Area Network,低功耗广域网)也快速兴起.物 ...
- 技术分享 | app测试中常用的Android模拟器
原文链接 Emulator Emualor 是 Android Studio 自带的模拟器,是官方提供的工具,Android 开发最常使用的就是这一款. 它功能非常齐全,电话本.通话等功能都可正常使用 ...
- DAST 黑盒漏洞扫描器 第三篇:无害化
0X01 前言 甲方扫描器其中一个很重要的功能重点,就是无害化,目的是尽量降低业务影响到可接受程度. 做过甲方扫描器,基本上对于反馈都有所熟悉. "我们的服务有大量报错,请问和你们有关么&q ...
- 软件成分分析(SCA)完全指南
上一篇文章中,我们讨论了 DAST 的概念.重要性及其工作原理.那在开发过程中如何查找开源软件包中的漏洞并学习如何修复?本指南带你一起了解 SCA 工具及其最佳实践. 如今,绝大多数代码驱动的应用程序 ...
- Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关
在 Apache ShardingSphere 5.1.1 发布后,ShardingSphere 合并了来自全球的团队或个人的累计 1028 个 PR,为大家带来 5.1.2 新版本.该版本在功能.性 ...
- Javaweb-在idea中配置Tomcat
解决警告问题 为什么会有这个问题:我们访问一个网站,需要制定一个文件夹名字 最后点OK,Tomcat就亮起来了 运行成功弹出界面:
- zabbix-5.0自动发现
1. 安装zabbix5.0 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.no ...
- 摸鱼人常备5个Python迷你项目,玩一整天不是问题(附源码)
大家好鸭,我是小熊猫 在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍5个通过Python构建的项目,以此来学习Python编程. 一.石头剪 ...
- 『现学现忘』Git后悔药 — 31、reset版本回退命令总结
目录 1.--soft回退说明 2.--mixed回退说明 3.--hard回退说明 4.总结 在Git中进行版本回退需要使用git reset命令. 以前面文章中的示例为例,当我准备在V4版本,回退 ...
- Java学习第二周
这一周观看了黑马程序员毕向东的教学视频学习了数组的创建:数组元素的使用及遍历,类的声明,成员方法的声明,构造器的声明 数据类型[] 数组名 = new 数据类型[长度];数据类型[] 数组名 = {数 ...