gamemaker吧 关注:13,696贴子:95,910
  • 5回复贴,共1

[问题]关於棋盘slg的可行走范围绘制

取消只看楼主收藏回复

最近在研究棋盘slg引擎(只对slg与arpg有兴趣的人...)
目前卡在行走时 判断可行走范围的部分
已经做出这样子了

可以根据输入的range来绘画行走范围
也可以判断是否有阻碍物
但是预想中,最下方那格应该是不能行走的
我用mp_grid_path(id,path,xstart,ystart,xgoal,ygoal,allowdiag)来建立一个path然后在用path_get_length(ind)/gridsize来判断这个路径是否超过能走的步数
不过好像出了问题,而我不知道问题在哪
附上gmk
http://cid-a5a99a6495eb21a7.skydrive.live.com/self.aspx/GM8/test.gmk


1楼2010-05-31 22:31回复
    2楼2010-05-31 22:33
    回复
      2026-02-24 05:15:16
      广告
      不感兴趣
      开通SVIP免广告
      喔..抱歉..
      那是我自己做的package
      主要是把ds_list与ds_grid的程式码简化
      补上gex
      http://cid-a5a99a6495eb21a7.skydrive.live.com/self.aspx/GM8/%e6%93%b4%e5%b1%95%e5%8c%85/data.gex
      里面data系列的就是针对list对应的函式
      如:data_get data_set data_add data_create
      grid系列就是针对grid
      grid_create grid_set grid_get grid_get_x(意思为得到grid的宽度)
      grid_get_y(得到长度)
      


      5楼2010-06-01 10:31
      回复
        那个范例我是研究过的
        那个好像没有阻挡物使格子减少的机制
        我有看过另一个范例是有这个机制的
        不过实在不能完全了解
        只能以片面猜他是如何实做
        附上那个范例
        http://cid-a5a99a6495eb21a7.skydrive.live.com/self.aspx/GM8/%e7%af%84%e4%be%8b/DIA%5E_FFT%5E_ATK.gm6
        


        6楼2010-06-01 10:36
        回复
          ....
          其实我不知道怎麼改你的范例T.T


          8楼2010-06-01 11:21
          回复
            研究了几天有一点心得了
            在这边分享一下
            mp_grid_create(left,top,hcells,vcells,cellwidth,cellheight)
            这个函式就跟创建一个grid意思差不多(不过他不可以以grid的函式去存取...我试过..),不过他等於是在地图上画透明的格子(把他想成战棋游戏的格子就好了)。
            left与top代表要从room的哪里开始画格子,可以当成draw函数的x,y。
            hcells与vcells代表要创造几*几的格子,当成横纵。
            cellwidth与cellheight呢,就是你的一个格子的大小是多少,当成宽与高。
            这个函数使用后会回传一个ID供其他函数使用。
            做完了之后,你就会有一个hcells * vcells的grid了,而预设的是每个格子都可以行走。
            更改格子属性的函数:
            mp_grid_clear_all(id) 把所有的格子设为可行走,id就是之前create得到的id。
            mp_grid_clear_cell(id,h,v) 让特定的格子变为可行走,h跟v不是x与y轴喔,是索引值。
            mp_grid_clear_rectangle(id,left,top,right,bottom) 让一个矩阵范围内的所有格子变为可行走,要注意的是后面四个参数为真实的x与y轴(当成draw_rectangle)。
            mp_grid_add_cell(id,h,v) 这个是让所有格子设为不能行走。
            mp_grid_add_rectangle(id,left,top,right,bottom) 将一个矩阵范围内的所有格子设为不能行走。
            mp_grid_add_instances(id,obj,prec) 将一个实例的碰撞范围内的格子设为不能行走,prec是是否使用精准判断,如果要作战棋游戏建议设为true(我就是为了这个卡了一段时间orz)。
            mp_grid_path(id,path,xstart,ystart,xgoal,ygoal,allowdiag) path为一个已经存在的路径(就是你要先创造一个..),起点(xstart,ystart)到终点(xgoal,ygoal),allowdiag是是否与许走斜线(true or false),如果有找到一条可行走的路径则回传1,并把路径存到path里(原本的路径会被覆盖),没有则回传0。
            mp_grid_draw(id) debug用,可行走区域画绿色,不能行走画红色。
            


            9楼2010-06-02 09:45
            回复