cocos游戏: 不规则响应区域处理
1、问题:
平时使用的按钮之类的都是规则图形,但是有些比如一些世界地图之类的,
地图块是不规则的,边缘都是弯弯曲曲的,而且有些有交叉,处理这样的
点击块就比较麻烦了
2、几点解决思路
2.1 如果地图块之间有点间隙,或者距离不是很近,那么可以采用每个
地图块中添加多个小的响应区域,做好标记,那几个响应区域对应那个地图,
这样点击小地图块就是相当于点击对应的地图了,这种不容易做到精准,只能大致
区域,因为地图边缘如果比较弯曲,需要放很多小的响应区域了
2.2 我们可以把整张地图看做一个整体,然后对这张地图生成一个字母数组,为啥要
生成一个字母数组呢?又用什么方式生成字母数组呢?
2.2.1 我们点击时肯定有位置,这样我们可以把位置转化为刚才生成的字母数组中的字母,
假如是1,我们认为点击了第一块地图,如果是2,我们就认为点击了第二块地图...
2.2.2 怎么生成地图的字母数组呢?
现在脚本语言如php,python都能读取 png 图片的像素 rgba 值,我们先对图片做个特殊处理,
用 psd 之类的工具,把地图快分别涂成不同的颜色值,这样我们就能根据颜色值来区分不用的地图块了,
然后就可以写脚本对这个地图进行处理,生成这个地图特有的字符表了,我们不需要每个像素都生成一个
字母,可以每个几个像素,比如8,或者6个,看需要的精细程度,那些没有地图快的地方,我们可以用" "
空格字符来表示
2.2.3 怎么使用这个字母数组呢
获取 touch 在地图上的位置,然后除去上面的8,然后根据得到的idxX,idxY在数组中索引,获取对应的字母,
然后根据什么字母判断点击的区域
代码1:图片处理
#!/usr/bin/env php
<?php // require_once("vendor/autoload.php"); // use Dlindberg\Pasteboard\Pasteboard; $file = "/Users/staff/Desktop/1.png";
$img = @imagecreatefrompng($file);
$size = getimagesize($file);
$width = $size[0];
$height = $size[1]; $strArr = array(); $pixelWidth = 8;
for ($j=0; $j < ceil($height/$pixelWidth); $j++) {
$strArr[] = str_repeat(" ", ceil($width/$pixelWidth));
} $lastY = 0;
for ($y=0; $y < $height; $y+=$pixelWidth) {
for ($x=0; $x < $width; $x+=$pixelWidth) {
$rgb = imagecolorat($img, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF; $strX = $x/$pixelWidth;
$strY = $y/$pixelWidth; // printf("rgb r: %x g: %x b: %x \n", $r, $g, $b); if ($r == 0x8a && $g == 0x54 && $b == 0x60) {
$strArr[$strY][$strX] = "1";
} if ($r == 0x1c && $g == 0xfe && $b == 0xfc) {
$strArr[$strY][$strX] = "2";
} if ($r == 0x41 && $g == 0x24 && $b == 0xDC) {
$strArr[$strY][$strX] = "3";
} if ($r == 0xfe && $g == 0x71 && $b == 0x1d) {
$strArr[$strY][$strX] = "4";
} if ($r == 0x1c && $g == 0xe8 && $b == 0x27) {
$strArr[$strY][$strX] = "5";
} }
} // var_dump($strArr); $tmp = "";
foreach ($strArr as $key => $value) {
$tmp .= sprintf("\"%s\",\n", $value);
} function copy2clipboard($string){
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w"), // stderr is a file to write to
);
$process = proc_open('pbcopy', $descriptorspec, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], $string);
fclose($pipes[0]);
fclose($pipes[1]); $return_value = proc_close($process);
return $return_value;
}
} copy2clipboard($tmp); // Pasteboard::set($tmp);
代码2:字母获取
getMask: function(touch) {
var arr = [字母];
var p = touchPos;
var x = Math.floor(p.x / 8);
//80是因为图片是左上角开始,而在 cocos 中的坐标是左下角开始,80是整个图片高度/8得到的数组长度
var y = 80 - Math.floor(p.y / 8);
if(y < 0 || x < 0 || y >= arr.length || x >= arr[y].length) {
return "";
}
return arr[y].charAt(x);
}
cocos游戏: 不规则响应区域处理的更多相关文章
- UGUI之不规则按钮的响应区域
比如一些不规则按钮最好可以设置它的响应区域.如下图所示,用Polygon Collider2D组件圈出精灵响应事件的区域. 注意 IsRaycastLocationValid 的判断区域是RectTr ...
- cocos游戏的真正入口,用C++实现的demo版本
1.cocos游戏的出发点 在main函数中有一句: return CCApplication::sharedApplication()->run(); 2.经过层层深入发现,真正的入口: ...
- collectionviewcell 添加删除按钮 响应区域的问题
在collectionviewcell 的右上角添加了一个删除按钮,但是发现只有cell和删除按钮重合的区域才会响应点击事件 后来doctor 李说这是iOS 事件响应链的机制(http://www. ...
- Cocos游戏引擎,让小保安成就大梦想
秦丕胜是大连的一位保安.与非常多自学成才的人一样,2010年,在考上日照职业技术学院一年后便退了学. 因为没有高学历.加上喜欢自由,他来到了大连成为了一名保安.从高中開始,秦丕胜就酷爱代码,他曾自豪地 ...
- H5微信页面开发 IOS系统 input输入框失去焦点,软键盘关闭后,被撑起的页面无法回退到原来正常的位置,导致弹框里的按钮响应区域错位
H5微信页面开发,软键盘弹起后,若原输入框被遮挡,页面整体将会上移,然而当输入框失焦,软键盘收起后,页面未恢复,导致弹框里的按钮响应区域错位. 解决方案:给输入框(或select选择框)添加失去焦点的 ...
- iOS - 扩展UIButton的响应区域
扩展UIButton的响应区域 引言 通常在iOS开发中通常会遇到产品说按钮的响应区域不大 而UI给我们的设计是按钮的面积 而不是按钮的响应面积 所以在这种情况下需要我们自己去扩展按钮的响应区域 思考 ...
- 【Cocos游戏实战】功夫小子第八课之游戏打包和相关问题说明
至此,功夫小子系列的Cocos2d-x的实战文章就结束了. 源代码地址: https://github.com/SuooL/KungfuBoy 如须要资源请邮件我 1020935219@qq.com ...
- android 扩大view的响应区域
1.Android提供TouchDelegate帮助实现扩大一个很小的view的点击区域 例如:https://developer.android.com/training/gestures/view ...
- H5C3--background中cover,背景样式,提升响应区域+精灵图的使用
一.cover的使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
随机推荐
- Vue.js 源码分析(十五) 指令篇 v-bind指令详解
指令是Vue.js模板中最常用的一项功能,它带有前缀v-,比如上面说的v-if.v-html.v-pre等.指令的主要职责就是当其表达式的值改变时,相应的将某些行为应用到DOM上,先介绍v-bind指 ...
- 第一节: Redis之String类型和Hash类型的介绍和案例应用
一. String类型基础 1.类型介绍 典型的Key-Value集合,如果要存实体,需要序列化成字符串,获取的时候需要反序列化一下. 2. 指令Api说明 3.常用Api说明 (1).StringS ...
- nginx的6种负载均衡策略
在服务器集群中,Nginx起到一个反向代理服务器的作用.为了避免单独一个服务器压力过大导致服务器奔溃,就需要将不同用户的请求转发给不同给不同的服务器,保证集群中的每一台服务器都能正常运作,这种机制就叫 ...
- 使用 jQuery.TypeAhead 让文本框自动完成 (一)(最简单的用法)
项目地址:https://github.com/twitter/typeahead.js 直接贴代码了: @section headSection { <script type="te ...
- 『珂朵莉树 Old Driver Tree』
珂朵莉树 珂朵莉树其实不是树,只是一个借助平衡树实现的数据结构,主要是对于有区间赋值的数据结构题,可以用很暴力的代码很高效地完成任务,当然这是建立在数据随机的基础上的. 即使数据不是随机的,写一个珂朵 ...
- MySQL5.8下载及安装——免安装版
1.下载MySQL5.8下载地址:https://dev.mysql.com/downloads/mysql/ 图一: 图二: 2.如何安装.配置mysql-8.0.17-winx64.zip下载完成 ...
- 嵌入式Linux+NetCore 笔记一
记录嵌入式Linux+NetCore培训中遇到的一些问题以及解决方法 十一放假期间发现园里大神大石头(NewLife团队)开了一个嵌入式Linux+NetCore培训,就报名参加了.更幸运的是,我刚好 ...
- NopCommerce源代码分析之用户验证和权限管理
目录 1. 介绍 2. UML 2.1 实体类UML图 2.2 业务相关UML图 3. 核心代码分析 3.1 实体类源代码 3.2 业务相关源代码 3.3 相关控制器源代码 3.4 ...
- JPA笔记3 OneToOne
package one_to_one; import javax.persistence.Entity; import javax.persistence.FetchType; import java ...
- SPC软控件提供商NWA的产品在各行业的应用(化工行业)
Northwest Analytical (NWA)是全球领先的“工业4.0”制造分析SPC软件控件提供商.产品(包含: NWA Quality Analyst , NWA Focus EMI 和 N ...