设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

请问如何在区域内将事件的位置随机化?

查看数: 2932 | 评论数: 6 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-5-16 12:14

正文摘要:

想让宝箱的位置随机出现,但怕随机到墙里面或者堵住路,故打算设定某一区域内随机。 但是不知道具体怎样操作……希望尽量不要用到脚本。 同时,也想防止两个事件同时随机到一个位置。 ...

回复

moy 发表于 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?换成
RUBY 代码复制
  1. ( events_xy(x,y).empty? && !$game_player.pos?(x,y) )

就可以了。。。(虽然我觉得这是地图设计问题

点评

谢谢指点-w-  发表于 2014-5-18 08:23
喵呜喵5 发表于 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 认可答案

查看全部评分

888000 发表于 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
moy 发表于 2014-5-16 14:48:43
本帖最后由 moy 于 2014-5-16 15:26 编辑

RUBY 代码复制
  1. #==============================================================================
  2. # ★ Custom Adventure 区域随机事件定位
  3. # -- Last Updated: 2014.5.16
  4. # -- by Moy
  5. # -- 转载请保留以上信息
  6. #==============================================================================
  7. #==============================================================================
  8. # ■ Game_Map
  9. #==============================================================================
  10. class Game_Map
  11.   #--------------------------------------------------------------------------
  12.   # ● 获取区域内的随机(空闲)坐标
  13.   #--------------------------------------------------------------------------
  14.   def get_region_xy(region)
  15.     @region_map = Hash.new if @region_map.nil?
  16.     if @region_map[region].nil?
  17.       @region_map[region] = Array.new
  18.       index = 0
  19.       for x in 0..width
  20.         for y in 0..height
  21.           if region_id(x,y) == region
  22.             @region_map[region][index]= [x,y]
  23.             index += 1
  24.           end
  25.         end
  26.       end
  27.     else
  28.       index = @region_map[region].length
  29.     end
  30.     if index > 0
  31.       x,y = @region_map[region][rand(index)]
  32.       return x,y if events_xy(x, y).empty?
  33.     end
  34.     return -1,-1
  35.   end
  36. end
  37.  
  38. #==============================================================================
  39. # ■ Game_Interpreter
  40. #==============================================================================
  41. class Game_Interpreter
  42.   #--------------------------------------------------------------------------
  43.   # ● 将本事件放入某区域的随机位置上
  44.   #--------------------------------------------------------------------------
  45.   def put_in_region(region)
  46.     x,y = $game_map.get_region_xy(region)
  47.     if x != -1 && y != -1
  48.       get_character(0).moveto(x,y)
  49.     end
  50.   end
  51. end

在地图上划定区域后,在事件的自动运行页中加入脚本put_in_region(n)就可以,n是区域的编号
正好自己的坑也要用到,就贴出来了。不过我只是初步测试了一下,有没有隐患我不知道

点评

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

评分

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

查看全部评分

H·H·Y 发表于 2014-5-16 13:12:02
本帖最后由 H·H·Y 于 2014-5-16 13:14 编辑

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

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

点评

O(∩_∩)O谢谢  发表于 2014-5-16 18:25
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-25 11:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表