gamemaker吧 关注:13,696贴子:95,891
  • 9回复贴,共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 07:46:07
      广告
      不感兴趣
      开通SVIP免广告
      。。。你带了个什么package。。具体的参考一下这里~绘制棋盘样式可以用你自己的办法
      http://tieba.baidu.com/f?kz=576731040


      IP属地:四川4楼2010-06-01 08:50
      回复
        喔..抱歉..
        那是我自己做的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
          回复
            喔,那个是我自己写的~所以是从大部分人能看懂的方式来做,自然比没有任何说明的FF战略版的例子简单的多~,不过阻挡机制不是有没有的问题哦,改一下就能有的~~


            IP属地:四川7楼2010-06-01 10:46
            收起回复
              ....
              其实我不知道怎麼改你的范例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
                回复