设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2838|回复: 7
打印 上一主题 下一主题

[已经过期] 数学问题——如何获得倾斜后地图的坐标

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
跳转到指定楼层
1
发表于 2022-2-15 14:51:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 紫英晓狼1130 于 2022-2-18 22:47 编辑

这个问题必须结合范例来说
范例里添加了制作倾斜地图的脚本还有鼠标系统
目前只能获得上级地图的坐标
如何获得倾斜后地图的坐标
如下图所示
点击黄色区域可以print(即反馈)出(0,0)
点击蓝色区域可以print(即反馈)出(1,14)
点击红色区域可以print(即反馈)出(9,14)

补充一下倾斜脚本的说明,原来叫做ISO系统,设置的方式是将设置通行以及事件的地图命名为“ISO”,并置于显示的地图之下,这样就有真正的斜四方的效果了


Project2.zip (228.98 KB, 下载次数: 17)

未标题-2.png (20.86 KB, 下载次数: 23)

示例图

示例图
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴

Lv5.捕梦者

梦石
0
星屑
36601
在线时间
10834 小时
注册时间
2009-3-15
帖子
4817
2
发表于 2022-2-15 17:10:05 | 只看该作者
本帖最后由 soulsaga 于 2022-2-15 18:43 编辑

这是另一个ISO脚本啊...
換个倾斜方向如何?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6175
在线时间
794 小时
注册时间
2019-1-20
帖子
204
3
发表于 2022-2-17 11:32:28 | 只看该作者
如果你说的倾斜后地图的坐标是范例中的cx、cy,那个不对吧,
毕竟拖动窗口后坐标会改变哦,而且往右边走的变动也不对。
上级地图的坐标是指什么?
不会是下面我加的x,y和x2,y2吧?
那个不能用吗?

if $game_player.moving? == false
mouse_x, mouse_y = Mouse.get_mouse_pos
cx = (mouse_x+$game_map.display_x/4)/32
cy = (mouse_y+$game_map.display_y/4)/32
x=$game_player.x
y=$game_player.y
x2=$game_map.events[1].x
y2=$game_map.events[1].y
if Input.trigger?(Input::C)
p [cx,cy,x,y,x2,y2]
end
end

提高解答机会的方法:
看一下对应版本的帮助文件 看天气预报说今天不下雨
改变问题为更有可能的或常见的 如:天气自动变化下雨→天气系统 果然不准呀~
使用论坛的搜索功能查找相关问题 好丧啊... ...想看女装
清楚说明实际上你想解决的问题  想看坛友的女装  
脚本自己有改过的地方要标明  不要遮脸的
脚本有问题但不是默认的要全部贴出来 大胆点,尽情发
三包原则:包有BUG,包甩锅,包咕咕
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
4
 楼主| 发表于 2022-2-17 13:58:45 | 只看该作者
srwjrevenger 发表于 2022-2-17 11:32
如果你说的倾斜后地图的坐标是范例中的cx、cy,那个不对吧,
毕竟拖动窗口后坐标会改变哦,而且往右边走的 ...

我的目标是点击倾斜后的地图坐标,与事件无关
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42696
在线时间
7618 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

5
发表于 2022-2-19 00:37:48 | 只看该作者
大概看了一下,应该是个二元一次方程能解决的问题
原版的screen_x公式只跟real_x挂钩,y也一样,这里xy相互影响,鼠标坐标就等于screen_x,二元一次方程求解real_x和real_y就可以获得鼠标所在的地图坐标
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
6
发表于 2022-2-19 01:11:18 | 只看该作者
仔细想了想,既然脚本本身能弄成倾斜,那么,它本身应该就有判定触碰和倾斜的公式,然后,楼主要找的坐标可能在那里
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23209
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

7
发表于 2022-2-19 03:04:49 | 只看该作者
先说结论:无法获得精确的坐标,因为倾斜后,每个方块形的格子,会对应多达3个倾斜后的格子,并且对应关系是有奇偶性的,导致将方块形的格式变换为倾斜后的格子的一一对应成为不可能
但如果需求是获得3个倾斜后的格子中的任何一个,倒是可以,因为可以反过来映射
对于倾斜后的座标(x,y),它永远会对应方块形格子中的2或4个
地图的高h是18,宽w是22
观察(0,0),它对应的是(17, 0)和(18, 0),可以计为(17.5, 0)
而(0, 1)它对应的(16, 0), (17, 0), (16, 1)和(17,1)一共4个格子的四角,这可以计为(16.5, 0.5)
于是(0, 2)对应的是(15.5, 1),(1, 2)对应(16.5, 0.5),(2, 2)对应(17.5, 1), (1,1)对应(17,5, 0.5)
(9, 14)对应哪里呢,横坐标9需要对x补偿+9,纵坐标14需要对x补偿-14,一共是-5
横坐标9需要对y补偿+4.5,纵坐标14需要对y补偿+7,一共是11.5
所以从(17.5, 0)偏移(-5, 11.5)是(12.5, 11.5),观察图中,(9,14)占据的是(12, 11)(13,11)(12,12)和(13,12)四个格子的四角,结论正常。

好了,现在可以建立一个映射公式:
(x, y) => (h - x + y - 0.5, (x + y) / 2)
这是从斜向坐标到直角坐标的公式
然后把这个映射反过来——注意这里不惟一
即可

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
8
发表于 2022-2-21 17:21:39 | 只看该作者
虽然勉强符合楼主的要求,但我还是没搞懂脚本里的具体公式是怎么算的

  1. class Game_Player
  2.   def move_to_mouse
  3.     mx, my = Mouse.get_mouse_pos
  4.     mx = mx >> 5 << 5
  5.     my = my >> 4 << 4
  6.    
  7.     sx, sy = self.screen_x, self.screen_y
  8.    
  9.     d_sx, d_sy = mx - sx, my - sy
  10.     dx = (d_sx + d_sy + d_sy) >> 6
  11.     dy = (d_sy + d_sy - d_sx) >> 6
  12.    
  13.     #self.moveto(self.x + dx + 1, self.y + dy + 1)
  14.     p self.x + dx + 1, self.y + dy + 1
  15.   end
  16. end
复制代码


你脚本里 地图里有鼠标按键相关……懒得改了
就写个 并行执行事件测试
  1. # 【脚本】
  2. if Input.trigger?(Input::R)
  3.   $game_player.move_to_mouse
  4. end
复制代码


鼠标尽量在菱形的中心
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-26 18:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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