虽然勉强符合楼主的要求,但我还是没搞懂脚本里的具体公式是怎么算的
你脚本里 地图里有鼠标按键相关……懒得改了 就写个 并行执行事件测试
鼠标尽量在菱形的中心 |
先说结论:无法获得精确的坐标,因为倾斜后,每个方块形的格子,会对应多达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) 这是从斜向坐标到直角坐标的公式 然后把这个映射反过来——注意这里不惟一 即可 |
仔细想了想,既然脚本本身能弄成倾斜,那么,它本身应该就有判定触碰和倾斜的公式,然后,楼主要找的坐标可能在那里 |
![]() 原版的screen_x公式只跟real_x挂钩,y也一样,这里xy相互影响,鼠标坐标就等于screen_x,二元一次方程求解real_x和real_y就可以获得鼠标所在的地图坐标 |
srwjrevenger 发表于 2022-2-17 11:32 我的目标是点击倾斜后的地图坐标,与事件无关 |
如果你说的倾斜后地图的坐标是范例中的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 |
本帖最后由 soulsaga 于 2022-2-15 18:43 编辑 这是另一个ISO脚本啊... 換个倾斜方向如何? |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2025-2-17 02:57
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.