六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 155|回复: 0

[转]关于9宫格方向(不是scrollRect)

[复制链接]

升级  50.4%

234

主题

234

主题

234

主题

进士

Rank: 4

积分
752
 楼主| 发表于 2013-2-7 19:53:50 | 显示全部楼层 |阅读模式
http://uh.9ria.com/space-12147-do-blog-id-5690.html

[0,1,2,
3,4,5,
6,7,8]

9宫格是用数字来表示方向的一种办法,其意义就是
["leftup","up","rightup",
"left",null,"right",
"leftdown","down","rightdown"]
用相应的数字表达一种相对位置状态,要点需要4这个中间点,而且左上角是0

在表达相对位置的时候,这种方法最终会比较简洁,诸如:
判断左右:a % 3 < b % 3
判断上下:int(a / 3) < int(b / 3)
而不需要再写多个||

上面的可以说是将9宫格方式拆解成横纵两个方向的办法,更重要的是反向的做法
你只需要用下面的逻辑
(是左边 ? 0 : 是右边 ? 2 : 1) +(是上面 ? 0 : 是下面 ? 6 : 3)
就可以连写出一个表达式直接得出方向值,而不再需要写9个case


诸如,p是一个表示人物移动速度p(vx,vy)的Point坐标,labelNames是一个包含8方向(加上站立是9)的位图动画序列,每项是一个方向的序列,只需要用下面的代码就能直接取出当前应当显示的位图序列

var newState:Array = labelNames[
(p.x < -Math.abs(p.y / 2) ? 0 : p.x > Math.abs(p.y / 2) ? 2 : 1) +
(p.y < -Math.abs(p.x / 2) ? 0 : p.y > Math.abs(p.y / 2) ? 6 : 3)
];

所以表达方向值应当毫不犹豫的使用9宫格方式。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表