找茬游戏中是如何设计两个图片的不同之处的
2013-06-22 20:48
375 查看
使用程序自动生成不同是一件几乎不可能的任务 因此找茬游戏的图片还是需要作者自己PS 但是一对图只能使用一次实在是太浪费了
今天看了下Win8版的美女找茬的文件结构 搞清楚了他们的设计
首先处理图片
在原图片的基础上尽可能的修改多的地方 每个修改后的区域另存为图片
用JSON XML或者文本文件记录每个区域的坐标
保存的形式可以用 左上坐标+长宽 或者左上坐标+右下坐标 或者中心坐标+长宽的1/2
无论哪个都是4个整型 =.= 而最后一种格式 似乎于在应用中标识不同之处的矩形中更方便一些 但是生成数据难一点
这个应用使用的是文本文件保存区域的左上和右下坐标
![](http://img.blog.csdn.net/20130622201500609?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ3VHQmFieUJlYVI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
范围以用矩形区域内的图片替换原文件相同区域不会有问题为准
使用图片时
假定 游戏设定中每一关的不同数量相同 为N个 某一对图中修改的数量为M
从一对图像的M个不同点中随机选取N个 同时随机生成N个Boolean
读取源图像为并显示到左右窗口中 然后读取已选中的不同点的信息 (图像和坐标)
如果N个随机Boolean第i个为true 将此区域的图像通过坐标重叠显示在左屏幕的对应位置 如果是false 显示在右屏幕 (或者反之 true右 false左 这个不影响)
检测到鼠标点击事件(或者触屏的话是触摸事件)判断点击坐标是否在已选中的不同点的区域中
是就(通过已读取到的坐标)在左右屏幕同时标识 否就出现错误提示
JAVA语言的伪代码如下:
基本上就是这样 剩下的就是计时啊 道具啊什么的...
至于不同点区域的坐标 指望美工人工搞似乎工作量有点大 美工修图完了之后 还得量像素啊 位置啊什么的 然后切下来
可以写个程序自动分析处理完了的图片和原图片 对每个像素逐一进行对比 差异超过阈值为1否则为0 得到差异map
然后对差异map进行分析 获得差异的宽高和中心点 计算出需要切割的坐标和宽高 自动切割存储图片
今天看了下Win8版的美女找茬的文件结构 搞清楚了他们的设计
首先处理图片
在原图片的基础上尽可能的修改多的地方 每个修改后的区域另存为图片
用JSON XML或者文本文件记录每个区域的坐标
保存的形式可以用 左上坐标+长宽 或者左上坐标+右下坐标 或者中心坐标+长宽的1/2
无论哪个都是4个整型 =.= 而最后一种格式 似乎于在应用中标识不同之处的矩形中更方便一些 但是生成数据难一点
这个应用使用的是文本文件保存区域的左上和右下坐标
范围以用矩形区域内的图片替换原文件相同区域不会有问题为准
使用图片时
假定 游戏设定中每一关的不同数量相同 为N个 某一对图中修改的数量为M
从一对图像的M个不同点中随机选取N个 同时随机生成N个Boolean
读取源图像为并显示到左右窗口中 然后读取已选中的不同点的信息 (图像和坐标)
如果N个随机Boolean第i个为true 将此区域的图像通过坐标重叠显示在左屏幕的对应位置 如果是false 显示在右屏幕 (或者反之 true右 false左 这个不影响)
检测到鼠标点击事件(或者触屏的话是触摸事件)判断点击坐标是否在已选中的不同点的区域中
是就(通过已读取到的坐标)在左右屏幕同时标识 否就出现错误提示
JAVA语言的伪代码如下:
int imageId = getARandomImageId(MAX_USEABLE_IMAGE_ID); // 随机获得一个图像的ID Image src = new Image(imageId); // 获得原图片 ImageInfo info = new ImageInfo(imageId); //获得此图片的信息 包括不同的坐标啊什么的 drawIntoScreen(src,LEFT_SCREEN); // 将源图片绘制到左屏幕 drawIntoScreen(src,RIGHT_SCREEN); // 将源图片绘制到右屏幕 int [] diffList = getARandomDiffList(info.getDiffList(),DIFF_NUM_PER_STAGE); // 获得一个随机的图片的N个不同点的列表 Random r = new Random(); for (int i = 0; i < diffList.length; i++) { drawIntoScreen(info.getDiffImage(i),r.nextBoolean(),info.getDiffX(i),info.getDiffY(i)); // 将不同点的图片绘制到屏幕上 } startGame(); // 开始游戏 注册计时器 Lisenter什么的
基本上就是这样 剩下的就是计时啊 道具啊什么的...
至于不同点区域的坐标 指望美工人工搞似乎工作量有点大 美工修图完了之后 还得量像素啊 位置啊什么的 然后切下来
可以写个程序自动分析处理完了的图片和原图片 对每个像素逐一进行对比 差异超过阈值为1否则为0 得到差异map
然后对差异map进行分析 获得差异的宽高和中心点 计算出需要切割的坐标和宽高 自动切割存储图片
相关文章推荐
- 挑战OOAD:游戏中物品使用时候的不同功能,用OO的方式,该如何设计?
- c++提取两张相同背景的bitmap的不同部分 -->找茬游戏其实很简单,自动提取不同图片部分就OK了
- Android 中,应用程序需要的图片资源如何针对不同屏幕大小手机设计?
- 如何利用图片来提高设计效率?
- 在设计代码里实现绑定字段不同值显示不同图片的代码
- 一个游戏是如何被设计和开发出来的
- 网页设计[显示站点信息的导航及如何用CSS来控制图片大小]
- Java中关于如何读取不同路径下图片/文件
- 如何让一个表单同时提交到两个不同的页面
- android两个含有图片的TextView控件如何并列对称水平摆放
- 如何使用Createjs来编写HTML5游戏(二)使用EaselJS处理图片
- Android针对不同的手机屏幕大小设计图片资源与编码
- 如何高效设计游戏——游戏平衡:RTS显性平衡与隐形平衡
- 两个不同数据库之间的两个表如何关联起来查询数据
- 工具类:关于如何找到两个List数组中不同的数据的算法!
- 在类似qq或者微信聊天中。如何根据不同的手机发送图片
- 如何实现 两个视图不同速率的平移
- 设计两个不同的方法,判断一个数是否为2的阶次数