游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6413|回复: 12

关于菱形地图块的选择问题

[复制链接]

1

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2009-5-3 22:23:00 | 显示全部楼层 |阅读模式
一个菱形的地图块,假设为15x7,那么在鼠标移到上面的时候,怎样区分鼠标当前的位置是空白区域还是有效区域?
*******@*******
*****@@@@@*****
**@@@@@@@@@@@**
@@@@@@@@@@@@@@@
**@@@@@@@@@@@**
*****@@@@@*****
*******@*******

如图所示:就是说,如何才能判断当前的鼠标点的位置是“*”(无效)区域还是“@”(无效)区域呢?

1

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2009-5-3 23:11:00 | 显示全部楼层

Re: 关于菱形地图块的选择问题

附件是一张示例图,如何确定当前触摸笔点的位置是在黑色区域中还是在红色方框内?

12

主题

88

帖子

188

积分

注册会员

Rank: 2

积分
188
发表于 2009-5-4 08:21:00 | 显示全部楼层

Re: 关于菱形地图块的选择问题

wyg_vip: 关于菱形地图块的选择问题

一个菱形的地图块,假设为15x7,那么在鼠标移到上面的时候,怎样区分鼠标当前的位置是空白区域还是有效区域...


其实这涉及到算法问题,当然有很多算法可以做到这一点。只是选择哪个算法效率高问题,或者你也可以用点是否在多边形的内部算法,这些算法baidu一下,它会列出你想要的。但我只是想说,楼主能问上这个问题,似乎想要制作地图编辑器?如果真这样,我可以提供更好算法你,但这么做对你的工作没任何好处,而且软件性能低下。很多程度上说软件性能决定于我们如何设计程序,不同的设计方法对软件性能也是不同的。跟选择什么好算法没关系。如果真要在地图编辑上响应出不同区域响应不出的事件的话,完全可以用别的方法来代替

1

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2009-5-4 09:28:00 | 显示全部楼层

Re: Re: 关于菱形地图块的选择问题

jasaczeam: Re: 关于菱形地图块的选择问题



其实这涉及到算法问题,当然有很多算法可以做到这一点。只是选择哪个算法效率高问题,或者你也可以用点...



这个项目不光要用到PC,还有手机的版本,所以在触摸屏手机上也会遇到同样的问题。编辑器只是整个工程的一个组成部分。

所以,你说的确实很对,因为手机端性能的局限,算法效率确实不能太低下了,而且手机端很多数学函数都是不支持的,这也是我颇为难的原因。


有什么好的替代思路么? [em5]

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2009-5-4 11:03:00 | 显示全部楼层

Re:关于菱形地图块的选择问题

既然都是大小一致排列整齐的菱形地图块,那么直接坐标变换就可以了。
只是几次加减乘除,效率上也没什么问题

1

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2009-5-4 11:20:00 | 显示全部楼层

Re: Re:关于菱形地图块的选择问题

kaikai: Re:关于菱形地图块的选择问题

既然都是大小一致排列整齐的菱形地图块,那么直接坐标变换就可以了。
只是几次加减乘除,效率上也没什么问题



怎么直接转换?我上传的附件中,能自动区分是黑色区域还是红色区域吗?

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-5-4 14:25:00 | 显示全部楼层

Re:关于菱形地图块的选择问题

15*7这么小用不着什么算法吧,写死在程序里就行了

1

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2009-5-4 15:33:00 | 显示全部楼层

Re: Re:关于菱形地图块的选择问题

verilog2004: Re:关于菱形地图块的选择问题

15*7这么小用不着什么算法吧,写死在程序里就行了



这只是一个Title,而且不是具体的,是我用来举例说明的,实际的地图中需要用到成百上千个这样的小Title组成一张大的斜45°地图,拼成的地图鱼单一的小Title也有相同的情况:左上、右上、左下、右下角都有空白区域,也就是无效区域,同样需要判断鼠标是否选中了无效区域。

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2009-5-4 16:30:00 | 显示全部楼层

Re: Re: Re:关于菱形地图块的选择问题

wyg_vip: Re: Re:关于菱形地图块的选择问题




怎么直接转换?我上传的附件中,能自动区分是黑色区域还是红色区域吗?

比如先假设:
x,y表示地图显示坐标,x正向向右,y正向向下。
u,v表示地图逻辑坐标,u正向向右下,v正向向左下。
对(u,v)为(0,0)的逻辑tile位置它的左上角的显示坐标定义为P(x,y)=(0,0)
.P../\....
.../..\...
../....\..
./......\.
.\....../.
..\..../..
...\../...
....\/....
于是(u,v)坐标按你的图应当得到:
..0,0 /.............
.0,1 / 1,0 /........
0,2 / 1,1 / 2,0 /...
.../ 1,2 / 2,1 / 3,0
......../ 2,2 / 3,1.
............./ 3,2..
公式从(x,y)求(u,v)为:
u=(x-7)/15+y/7
v=y/7-(x-7)/15

公式从(u,v)求(x,y)为:
x=15*(u-v)/2+7
y=7*(u+v)/2

1

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2009-5-4 19:28:00 | 显示全部楼层

Re: Re: Re: Re:关于菱形地图块的选择问题

kaikai: Re: Re: Re:关于菱形地图块的选择问题


比如先假设:
x,y表示地图显示坐标,x正向向右,y正向向下。
u,v表示地图逻辑坐标,u正向向右下,v正向...



测试了一下,发现有数值不准的情况。以下相关的数值:

m_nTileWidth = 30 ;//地图块的宽度,是图片的宽度。
m_nTileHeight = 16;//地图块的高度,是图片的高度。
m_nMapWidth = 20 ;//地图的宽度
m_nMapHeight = 15 ;//地图的高度

地图数组的大小是这样建立的:m_nMapTiles[][] = new Tiles[m_nMapHeight][m_nMapWidth];

相关数值代入以上公式以后,x、y都会有不同程度的偏差。是不是跟我的地图数组建立方式有关?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 11:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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