查看: 3462|回复: 6

[已经解决] 请问如何在区域内将事件的位置随机化?

[复制链接]
梦石
0
星屑
50
在线时间
178 小时
注册时间
2011-2-6
回帖
41
发表于 2014-5-16 12:14:56 | 显示全部楼层 |阅读模式

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

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

×
想让宝箱的位置随机出现,但怕随机到墙里面或者堵住路,故打算设定某一区域内随机。
但是不知道具体怎样操作……希望尽量不要用到脚本。
同时,也想防止两个事件同时随机到一个位置。
梦石
0
星屑
2310
在线时间
5539 小时
注册时间
2011-1-10
回帖
6353

青铜编剧史诗剧作家剧作品鉴家

发表于 2014-5-16 13:12:02 | 显示全部楼层
本帖最后由 H·H·Y 于 2014-5-16 13:14 编辑

使用随机数变量,在设置事件位置里面设置事件XY坐标的时候用这个变量

学校电脑没有RM。。范例回家再做吧

点评

O(∩_∩)O谢谢  发表于 2014-5-16 18:25
回复

使用道具 举报

无节操

梦石
0
星屑
608
在线时间
795 小时
注册时间
2009-2-6
回帖
3910

开拓者贵宾

发表于 2014-5-16 14:48:43 | 显示全部楼层
本帖最后由 moy 于 2014-5-16 15:26 编辑

[pre lang="ruby" line="1"]#==============================================================================
# ★ Custom Adventure 区域随机事件定位
# -- Last Updated: 2014.5.16
# -- by Moy
# -- 转载请保留以上信息
#==============================================================================
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # ● 获取区域内的随机(空闲)坐标
  #--------------------------------------------------------------------------
  def get_region_xy(region)
    @region_map = Hash.new if @region_map.nil?
    if @region_map[region].nil?
      @region_map[region] = Array.new
      index = 0
      for x in 0..width
        for y in 0..height
          if region_id(x,y) == region
            @region_map[region][index]= [x,y]
            index += 1
          end
        end
      end
    else
      index = @region_map[region].length
    end
    if index > 0
      x,y = @region_map[region][rand(index)]
      return x,y if events_xy(x, y).empty?
    end
    return -1,-1
  end
end

#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 将本事件放入某区域的随机位置上
  #--------------------------------------------------------------------------
  def put_in_region(region)
    x,y = $game_map.get_region_xy(region)
    if x != -1 && y != -1
      get_character(0).moveto(x,y)
    end
  end
end[/pre]
在地图上划定区域后,在事件的自动运行页中加入脚本put_in_region(n)就可以,n是区域的编号
正好自己的坑也要用到,就贴出来了。不过我只是初步测试了一下,有没有隐患我不知道

点评

论坛收藏是个好功能嗯=w=  发表于 2014-5-16 18:46

评分

参与人数 1梦石 +2 收起 理由
taroxd + 2 认可答案

查看全部评分

Brandnew day, Brandnew Life
                             规 实在  中
暂为素材区版主,版其  琢磨
应援一下~
RPG制作大师授权素材推广计划
回复

使用道具 举报

梦石
0
星屑
50
在线时间
178 小时
注册时间
2011-2-6
回帖
41
 楼主| 发表于 2014-5-16 17:12:37 | 显示全部楼层
本帖最后由 888000 于 2014-5-16 17:14 编辑
moy 发表于 2014-5-16 14:48
#==============================================================================
# ★ Custom Adventu ...


O(∩_∩)O谢谢~但是如果有多个事件在同一区域随机位置,可以防止极偶然的随机到同一坐标上的情况么?(因为出现几率较低,测试的话也不太现实的样子……)

啊啊……(锤头!)是我有点表达不清……比如某个位置本来是空闲的,但是可能出现两个随机位置的事件都随机到这里了的情况么?

点评

moy
判断里写了不会放在有事件的坐标上,因为事件是一个一个运行的,因此应该不会有什么问题。  发表于 2014-5-16 17:52
回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2014-5-16 17:47:14 | 显示全部楼层

点评

谢谢大大。  发表于 2014-5-16 18:32
moy
另外真亏你能找到1年前的帖子(  发表于 2014-5-16 17:56
moy
这个是指定事件啦。。另外,我可以吐槽一下纯链接吗。  发表于 2014-5-16 17:54

评分

参与人数 1星屑 +150 收起 理由
taroxd + 150 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
178 小时
注册时间
2011-2-6
回帖
41
 楼主| 发表于 2014-5-17 22:28:26 | 显示全部楼层
本帖最后由 888000 于 2014-5-17 22:31 编辑
moy 发表于 2014-5-16 14:48
#==============================================================================
# ★ Custom Adventu ...


还是有一些问题……
关于多个事件随机到同一地点……
为了增加重叠几率,4个事件4个坑,理想情况应该是4个坑被填满,但是……

事件示意

事件示意

区域示意

区域示意

目测应该是随机的地点已有事件的话,不会过去,但也不会重新随机一个。

bug示意

bug示意

目前的克服方法是给每个事件一个单独的区域……但是如果能修改下脚本的话就更好了。

另外随机地点可能随机到主角所处的坐标。
回复

使用道具 举报

无节操

梦石
0
星屑
608
在线时间
795 小时
注册时间
2009-2-6
回帖
3910

开拓者贵宾

发表于 2014-5-18 02:14:50 | 显示全部楼层
本帖最后由 moy 于 2014-5-18 02:20 编辑
888000 发表于 2014-5-17 22:28
还是有一些问题……
关于多个事件随机到同一地点……
为了增加重叠几率,4个事件4个坑,理想情况应该是4 ...


关于不重新随机,其实,我本来就没打算让他重新随机。。。。除非你每个事件都是堆在可视地图外的区域,只靠随机传进来,不然完全没有必要。。我既然设置了4个坑,为什么一开始一定要把事件放在坑外?让他先占一个,其他的随机去不就好了…没有必要非要在意在这4个坑的出现概率或者什么的吧。
毕竟只是“可能出现在其他位置”这样的初衷……而不是“有相同的概率出现在数个位置”这么精确吧?
非要循环的话,把31~33的
  1.       x,y = @region_map[region][rand(index)]
  2.       return x,y if events_xy(x, y).empty?
复制代码
换成

  1. return -1,-1 if index <= 0 #找遍位置都不行你还是留在原地吧- -b
  2. loc_map = @region_map[region].dup
  3. begin
  4.   loc_num = rand(index)
  5.   x,y = loc_map[loc_num]
  6. end while not events_xy(x, y).empty?
  7. loc_map.delete(loc_num)
  8. index -= 1
  9. return x,y
复制代码
单纯循环虽然方便,但是这样会造成频繁的从4个位置中挑那1个空位的事情,你知道那个位置在哪,但你就是得用四分之一的概率去蒙……所以我的解决办法是,复制那个数组,并在每次成功时删掉对应的点。
不过这样的代码我木有测试,会不会出现其他问题我不知道 。

至于随机转移可以出现在主角的位置我是知道的- -b,因为这个脚本我在用的时候只是为了怪物和宝箱或者某些物品位置的初始化,所以根本不需要考虑主角的坐标。反正我也不会在刚进图的时候就把主角扔到怪物或者宝箱头上
如果你真的非常介意。把上面的events_xy(x, y).empty?换成
[pre lang="ruby" line="1"]( events_xy(x,y).empty? && !$game_player.pos?(x,y) )[/pre]
就可以了。。。(虽然我觉得这是地图设计问题

点评

谢谢指点-w-  发表于 2014-5-18 08:23
Brandnew day, Brandnew Life
                             规 实在  中
暂为素材区版主,版其  琢磨
应援一下~
RPG制作大师授权素材推广计划
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部