Project1

标题: [XP/VA]求助占其系統如何做地形影響? [打印本页]

作者: sdgn    时间: 2018-10-7 21:39
标题: [XP/VA]求助占其系統如何做地形影響?
有找到一些人的範例但想改成移動範圍受地形不同而及時增減...
(非根據腳色立足點 而是根據原本的最大範圍內所有地形做增減... 類似機戰那樣)
無奈 想/試 不出該如何改造
作者: fux2    时间: 2018-10-10 11:37
不要直接以步数为半径生成移动范围,去尝试每条可行路径就行。
下面是我很久以前写的战旗获取可行动范围的方法,有点不堪入目,但是应该能看懂意思
楼主的需求需要再定义个行动力,以及地形对行动力的影响


RUBY 代码复制
  1. module SLG_Module
  2.   Node = Struct.new(:x,:y,:mp)
  3.   def self.get_movable_area(event,maxp)
  4.     cutflag=0
  5.     offx = [-1, 0, 1, 0]
  6.     offy = [0, 1, 0, -1]
  7.     pMap = Table.new($game_map.width,$game_map.height)
  8.     temp = Node.new(event.x,event.y,maxp)
  9.     rets = []
  10.     retable = Table.new($game_map.width,$game_map.height)
  11.     retable[temp.x,temp.y] = 1
  12.     allpath = [temp.clone]
  13.     while cutflag<allpath.size
  14.       n=allpath.size
  15.       i = cutflag
  16.       while i < allpath.size
  17.         for j in 0...4
  18.           temp.x=allpath[i].x+offx[j]
  19.           temp.y=allpath[i].y+offy[j]
  20.           temp.mp=allpath[i].mp-1
  21.           next if temp.mp<0
  22.           next unless event.passable?(temp.x,temp.y,0)
  23.           next if pMap[temp.x,temp.y]>0
  24.           allpath << temp.clone
  25.           rets << Point.new(temp.x,temp.y)
  26.           retable[temp.x,temp.y] = 1
  27.         end
  28.         pMap[allpath[i].x,allpath[i].y] = 1
  29.         i+=1
  30.       end
  31.       cutflag=n
  32.     end
  33.     bit = SLG_Area.new
  34.     bit.set_data(rets)
  35.     return [bit,retable]
  36.   end
  37. end





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1