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

Project1

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

[已经解决] 请教随机遇敌怪物出现的位置

[复制链接]

Lv2.观梦者

梦石
0
星屑
871
在线时间
292 小时
注册时间
2010-9-9
帖子
65
跳转到指定楼层
1
发表于 2014-2-21 09:14:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 czsRwind 于 2014-2-24 11:13 编辑

请教下各位大大,我用的是下面这个随机遇敌系统。
然后随机出现的怪物位置很无序,想请教一下大大们,怎么设置为固定位置。
出现的位置大致为这个区域,且最好是能跟我方队伍一样,成队列排列的
RUBY 代码复制
  1. if i < 4
  2.           member.x = 240 - i * 20
  3.           member.y = 160 + i * 25
  4.         else
  5.           member.x = 220 - i * 20
  6.           member.y = 160 + (i - 4) * 25
  7.         end

简单的修改了一下,把77到79行修改为上面这一段就可以,不过有个问题。每一个回合结束后,总会小卡一下,不知道怎么解决
RUBY 代码复制
  1. #==============================================================================
  2. # ★ RGSS3_ランダムトループ Ver1.1
  3. #==============================================================================
  4. =begin
  5.  
  6. 作者:tomoaky
  7. webサイト:ひきも記 ([url]http://hikimoki.sakura.ne.jp/[/url])
  8.  
  9. 指定したトループの中身(出現エネミー)をランダムに変更します、
  10. どんな敵が出現するか分からないおまけイベントバトルなどにどうぞ。
  11.  
  12. 候補の設定が空の配列だった場合はすべてのエネミーが候補になります、
  13. 名前が空のエネミーは自動的に除外されます。
  14.  
  15. 2012.01.07  Ver1.1
  16.  ・複数のトループをランダム化できるようになりました
  17.  ・最低出現数の設定を追加
  18.  ・座標の計算式を変更
  19.  
  20. 2011.12.15 Ver1.0
  21.   公開
  22.  
  23. =end
  24.  
  25. #==============================================================================
  26. # □ 設定項目
  27. #==============================================================================
  28. module TMRDTRP
  29.   ENEMIES = {}      # この行はいじらない
  30.   EXCLUDE = {}      # この行はいじらない
  31.   MIN_ENEMY = {}    # この行はいじらない
  32.   MAX_ENEMY = {}    # この行はいじらない
  33.  
  34.   # トループID31番の設定
  35.   ENEMIES[34] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]     # 出現するエネミーの候補
  36.   EXCLUDE[34] = []                                  # 除外するエネミー
  37.   MIN_ENEMY[34] = 2                                 # 最低出現数
  38.   MAX_ENEMY[34] = 4                                 # 最高出現数
  39.  
  40.   # トループID32番の設定
  41.   ENEMIES[35] = []          # 出現するエネミーの候補(空なら全エネミーを候補に)
  42.   EXCLUDE[35] = [29, 30]    # 除外するエネミー
  43.   MIN_ENEMY[35] = 3         # 最低出現数
  44.   MAX_ENEMY[35] = 6         # 最高出現数
  45.  
  46. end
  47.  
  48. #==============================================================================
  49. # ■ Game_Troop
  50. #==============================================================================
  51. class Game_Troop < Game_Unit
  52.   #--------------------------------------------------------------------------
  53.   # ● セットアップ
  54.   #     troop_id : 敵グループ ID
  55.   #--------------------------------------------------------------------------
  56.   alias tmrdtrp_game_troop_setup setup
  57.   def setup(troop_id)
  58.     if TMRDTRP::ENEMIES[troop_id]
  59.       $data_troops[troop_id].members = []
  60.       if TMRDTRP::ENEMIES[troop_id].empty?
  61.         list = []
  62.         (1...$data_enemies.size).each do |id|
  63.           list[id - 1] = id unless $data_enemies[id].name == ""
  64.         end
  65.       else
  66.         list = TMRDTRP::ENEMIES[troop_id].clone
  67.       end
  68.       list -= TMRDTRP::EXCLUDE[troop_id] if TMRDTRP::EXCLUDE[troop_id]
  69.       max = TMRDTRP::MAX_ENEMY[troop_id]
  70.       max = max ? [[max, 1].max, 8].min : 6
  71.       min = TMRDTRP::MIN_ENEMY[troop_id]
  72.       min = min ? [[min, 1].max, max].min : 1
  73.       n = rand(rand(max - min + 1) + 1) + min
  74.       (0...n).each do |i|
  75.         member = RPG::Troop::Member.new
  76.         member.enemy_id = list[rand(list.size)]
  77.         space = [rand(480 / n), 64].max
  78.         member.x = i * space + 272 - (n - 1) * space / 2 + rand(32) - 16
  79.         member.y = 232 + rand(64) + (i % 2 * 24)
  80.         $data_troops[troop_id].members[i] = member
  81.       end
  82.     end
  83.     tmrdtrp_game_troop_setup(troop_id)
  84.   end
  85. end

QQ截图20140221091235.png (263.31 KB, 下载次数: 22)

QQ截图20140221091235.png

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
2
发表于 2014-2-21 10:49:57 | 只看该作者
77行到79行
77行设定间隔
78行设定x坐标
79行设定y坐标
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
871
在线时间
292 小时
注册时间
2010-9-9
帖子
65
3
 楼主| 发表于 2014-2-21 11:29:18 | 只看该作者
tan12345 发表于 2014-2-21 10:49
77行到79行
77行设定间隔
78行设定x坐标

这个我知道,不过公式的计算上面很费劲,我试过很多种,最好的一种也只是成一排队形,而且是从左上到右下的排列。我想请教的是,有没有办法让敌人出现的排列是从右上到左下的,然后敌人数量超过5的时候,第5个敌人开始从第二排开始排列。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
4
发表于 2014-2-21 12:00:47 | 只看该作者
具体怎么排你自己写,我负责解释吧。
space = [rand(480 / n), 64].max
这句的意思是,设定间隔space的值为:取0到480除以敌人数量的随机值(比如只有1个敌人,那么480/1=480,取0-480之间的随机一个数值),和64比较,取大的那个(比如前面随机出18这个随机值,18和64,64大,间隔space就等于64;如果前面随机到100,100比64大,那么space就等于100),我这样解释你OK?
member.x = i * space + 272 - (n - 1) * space / 2 + rand(32) - 16
这句话我先翻译一下,member.x就是敌人的x坐标,i代表第几个敌人(比如一共有5个敌人,第1个敌人i就是0,第2个敌人i就是1,第3个敌人i就是2,依此类推),后面有个rand(32)意思是0-32的随机值,我这样一翻译,整句话的意思是:
敌人的x坐标就等于第几个敌人乘以间隔,再加上272,减去……忽然发现好累,{:2_270:}你自己看吧
member.y = 232 + rand(64) + (i % 2 * 24)
我只翻译,不说话:敌人的y坐标,等于232加上0到64的随机任意一个数,加上敌人是单数还是双数?(单数就是加上0,双数就是加上24)

点评

谢谢你这么详细的解释,其实这个我也看懂那么一些,从早上到现在也在一直测试。不过还是谢谢你i  发表于 2014-2-21 12:34
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
92 小时
注册时间
2013-2-23
帖子
130
5
发表于 2014-2-23 00:16:04 | 只看该作者
抱歉,对于卡我也无能为力......不知道简化下写法可否?

  1.           member.x = 240 - (i > 4 ? i + 1 : i) * 20
  2.           member.y = 160 + (i > 4 ? i - 4 : i) * 25
复制代码

点评

我去试试看,谢谢你的简化!  发表于 2014-2-23 11:02
梦想是成为触手的新手DE☆SU(<ゝω·)绮罗星 ~☆
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-16 16:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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