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

Project1

 找回密码
 注册会员
搜索
查看: 2959|回复: 6
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
178 小时
注册时间
2011-2-6
帖子
61
跳转到指定楼层
1
发表于 2014-5-16 12:14:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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

Lv3.寻梦者 (版主)

梦石
0
星屑
2315
在线时间
5539 小时
注册时间
2011-1-10
帖子
6619

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

2
发表于 2014-5-16 13:12:02 | 只看该作者
本帖最后由 H·H·Y 于 2014-5-16 13:14 编辑

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

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

点评

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

使用道具 举报

Lv2.观梦者

无节操

梦石
0
星屑
607
在线时间
795 小时
注册时间
2009-2-6
帖子
3939

开拓者贵宾

3
发表于 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 认可答案

查看全部评分

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
178 小时
注册时间
2011-2-6
帖子
61
4
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21609
在线时间
9412 小时
注册时间
2012-6-19
帖子
7117

开拓者短篇九导演组冠军

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 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
178 小时
注册时间
2011-2-6
帖子
61
6
 楼主| 发表于 2014-5-17 22:28:26 | 只看该作者
本帖最后由 888000 于 2014-5-17 22:31 编辑
moy 发表于 2014-5-16 14:48
#==============================================================================
# ★ Custom Adventu ...


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


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

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

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

使用道具 举报

Lv2.观梦者

无节操

梦石
0
星屑
607
在线时间
795 小时
注册时间
2009-2-6
帖子
3939

开拓者贵宾

7
发表于 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
Brandnew day, Brandnew Life
                              实在  中
暂为素材区版主,版其  琢磨
应援一下~
RPG制作大师授权素材推广计划
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-12 20:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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