Project1

标题: RMVA如何使一个事件接近另一个事件 [打印本页]

作者: SiWangQi    时间: 2015-11-28 11:26
标题: RMVA如何使一个事件接近另一个事件
比如:我在做一个游戏,其中一个事件(事件A)可以让玩家用键盘来操纵,而另一个事件(事件B)需要来追逐(事件A),该怎么实现?
求大家来解答一下。
作者: cinderelmini    时间: 2015-11-28 11:52
玩家操作的为什么要用事件A而不用主角呢……
作者: SiWangQi    时间: 2015-11-28 11:55
cinderelmini 发表于 2015-11-28 11:52
玩家操作的为什么要用事件A而不用主角呢……

实话告诉你吧,其实,我在制作一个双人ARPG游戏,但是设置好怪物了以后,怪物就只追我,不追玩家2(事件做成的玩家),现在懂了吧
作者: 喵呜喵5    时间: 2015-11-28 11:58
SiWangQi 发表于 2015-11-28 11:55
实话告诉你吧,其实,我在制作一个双人ARPG游戏,但是设置好怪物了以后,怪物就只追我,不追玩家2(事件 ...

实话告诉你吧……就算追逐,怪物也只会选择一个追的,不会同时追玩家和事件……

要不然一个玩家往左跑一个玩家往右跑怪物还不精分了……
作者: 落雪鸦杀    时间: 2015-11-28 11:59
用自带的队伍功能不好吗……

作者: SiWangQi    时间: 2015-11-28 12:00
喵呜喵5 发表于 2015-11-28 11:58
实话告诉你吧……就算追逐,怪物也只会选择一个追的,不会同时追玩家和事件……

要不然一个玩家往左跑一 ...

实话告诉你吧,其实随机追谁都好,{:2_264:}只要追就可以了……
作者: SiWangQi    时间: 2015-11-28 12:02
落雪鸦杀 发表于 2015-11-28 11:59
用自带的队伍功能不好吗……

对不起,这不是我想要的效果……我想要的效果是有两个玩家(其中一个是事件做出来的),有一个怪物来追逐某一个玩家(玩家和事件都好)。
作者: 喵呜喵5    时间: 2015-11-28 12:17
https://rpg.blue/forum.php?mod=viewthread&tid=302841
作者: cinderelmini    时间: 2015-11-28 12:21
本帖最后由 cinderelmini 于 2015-11-28 12:24 编辑

实话告诉你吧:

  1. class Game_Character < Game_CharacterBase
  2.   #--------------------------------------------------------------------------
  3.   # ● 接近玩家
  4.   #--------------------------------------------------------------------------
  5.   def move_toward_event(id = 1)
  6.     move_toward_character($game_map.events[id])
  7.   end
  8. end
复制代码
这段Main前插入,
然后事件的移动方式选自定义,然后内容如下:

  1. ·脚本:@wait ||= 0; @wait = 30 + rand(30) if @wait < 0
  2. ·脚本:@a = rand(2) if @wait <= 1
  3. ·脚本:move_toward_player if @a == 0
  4. ·脚本:move_toward_event(2P玩家操作的事件ID) if @a == 1
  5. ·脚本:@wait -= 1
复制代码
然后把下面的循环执行和忽略障碍都勾上。
这个事件就会被玩坏了~
PS:为了避免被转换成传送门,已经用代码框框起来了。
作者: 猪衰衰    时间: 2015-11-28 12:32
https://rpg.blue/thread-246449-1-1.html
用了九夜神尊的事件寻路,解释起来大麻烦了直接上范例,WASD玩家2移动.事件接触的设计是用变量带入坐标让事件1在事件2左右上下一格处触发,略蛋疼.

Project1.rar

2.81 MB, 下载次数: 40


作者: SiWangQi    时间: 2015-11-28 12:35
cinderelmini 发表于 2015-11-28 12:21
实话告诉你吧:这段Main前插入,
然后事件的移动方式选自定义,然后内容如下:然后把下面的循环执行和忽略 ...

很好,谢谢你,但是……可不可以解释一下
RUBY 代码复制
  1. ·脚本:@wait ||= 0; @wait = 30 + rand(30) if @wait < 0
  2. ·脚本:@a = rand(2) if @wait <= 1
  3. ·脚本:move_toward_player if @a == 0
  4. ·脚本:move_toward_event(2P玩家操作的事件ID) if @a == 1
  5. ·脚本:@wait -= 1
是什么意思?我知道这些是在事件第三页的脚本里使用,但是有什么用还不知道,可以解释一下吗?
作者: cinderelmini    时间: 2015-11-28 12:39
本帖最后由 cinderelmini 于 2015-11-28 12:40 编辑

不是在事件第三页里用,是在设置事件行走图右边一点的【自主移动】里面的移动类型里面选【自定义】,
然后点在下面的【移动路线】,打开设置路线窗口,然后在右下角的【脚本】里一行一行输入进去的。

作用就是设置一个等待时间,时间到了就随机选一个对象(主角或者2P事件)去追。
作者: SiWangQi    时间: 2015-11-28 14:00
cinderelmini 发表于 2015-11-28 12:39
不是在事件第三页里用,是在设置事件行走图右边一点的【自主移动】里面的移动类型里面选【自定义】,
然后 ...

@cinderelmini
F:\错误提示.png
作者: SiWangQi    时间: 2015-11-28 14:02
cinderelmini 发表于 2015-11-28 12:39
不是在事件第三页里用,是在设置事件行走图右边一点的【自主移动】里面的移动类型里面选【自定义】,
然后 ...

@cinderelmini

出错了

错误提示.PNG (5.56 KB, 下载次数: 21)

错误提示.PNG

作者: SiWangQi    时间: 2015-11-28 15:02
SiWangQi 发表于 2015-11-28 14:02
@cinderelmini

出错了

我是这样填的;

图片.PNG (168.88 KB, 下载次数: 22)

图片.PNG

作者: SiWangQi    时间: 2015-11-28 16:46
SiWangQi 发表于 2015-11-28 15:02
我是这样填的;

可不可以用下面的代码里的:move_toward_character($game_map.events[7])
命令呢?好像意思是跟踪事件7的意思吧。
RUBY 代码复制
  1. def abs(x)
  2.   if x < 0
  3.     return -x
  4.   else
  5.     return x
  6.   end
  7. end
  8.  
  9. ITEM_MAX = 255
  10. class Game_Party < Game_Unit;def max_item_number(item);return ITEM_MAX;end;end
  11.  
  12. class Game_Event < Game_Character
  13.   def near_the_screen?(dx = 24, dy = 16)
  14.     ax = $game_map.adjust_x(@real_x) - Graphics.width / 2 / 32
  15.     ay = $game_map.adjust_y(@real_y) - Graphics.height / 2 / 32
  16.     ax >= -dx && ax <= dx && ay >= -dy && ay <= dy
  17.   end
  18. end
  19.  
  20. def attack_start
  21.     common_event = $data_common_events[$game_variables[21] + 80]
  22.     if common_event
  23.       child = Game_Interpreter.new(@depth + 1)
  24.       child.setup(common_event.list, same_map? ? @event_id : 0)
  25.       child.run
  26.     end
  27.   end
  28.  
  29. def setup_weapon
  30.     common_event = $data_common_events[$game_variables[21] + 60]
  31.     if common_event
  32.       child = Game_Interpreter.new(@depth + 1)
  33.       child.setup(common_event.list, same_map? ? @event_id : 0)
  34.       child.run
  35.     end
  36.   end
  37.  
  38.  
  39.   class Sprite_Base
  40.   def set_animation_rate
  41.     @ani_rate = 2
  42.   end
  43.   end


@cinderelmini
作者: SiWangQi    时间: 2015-11-28 16:47
SiWangQi 发表于 2015-11-28 16:46
可不可以用下面的代码里的:move_toward_character($game_map.events[7])
命令呢?好像意思是跟踪事件7的 ...

@cinderelmini
作者: SiWangQi    时间: 2015-11-28 17:03
SiWangQi 发表于 2015-11-28 16:47
@cinderelmini

好像是这个脚本,不是上面的。
@cinderelmini

RUBY 代码复制
  1. =begin
  2. ========================================
  3. マップイベントを呼び出すスクリプトです。
  4. イベントコマンドのスクリプトから実行します。
  5. 本スクリプトはRGSS3専用です。
  6.  
  7. ●使い方
  8. マップイベントID:4、ページ3を呼び出したい。
  9. call_map_event(4,3)
  10.  
  11. イベントページ無指定でマップイベント5を呼び出したい。
  12. start_map_event(5)
  13.  
  14. このように変数で指定することも可能です。
  15.  
  16. call_map_event($game_variables[1],$game_variables[2])
  17.  
  18.  
  19.  
  20. ●ページ指定でマップイベントを呼び出す。
  21. call_map_event(id,page)
  22.  
  23. 起動後の@event_idは指定先のイベントIDに依存します。
  24.  
  25.  
  26. ●ページ無指定でマップイベントを呼び出す。
  27. start_map_event(id)
  28.  
  29. 起動後の@event_idは指定先のイベントIDに依存します。
  30.  
  31.  
  32.  
  33. ●ページ指定でマップイベントを呼び出す。
  34. call_map_event_carried_id(id,page)
  35.  
  36. 起動後の@event_idは指定元のイベントIDに依存します。
  37. 但し、指定元の@event_idが0の場合はイベントは実行されません。
  38.  
  39.  
  40. ●ページ無指定でマップイベントを呼び出す。
  41. start_map_event_carried_id(id)
  42.  
  43. 起動後の@event_idは指定元のイベントIDに依存します。
  44. 但し、指定元の@event_idが0の場合はイベントは実行されません。
  45.  
  46. ●他マップのイベントをページ指定で呼び出す。
  47. call_other_map_event(map_id,event_id,page)
  48.  
  49. 他マップのイベントをページ指定で呼び出します。
  50.  
  51. ========================================
  52. =end
  53. #==============================================================================
  54. # ■ Vocab
  55. #------------------------------------------------------------------------------
  56. #  用語とメッセージを定義するモジュールです。定数でメッセージなどを直接定義す
  57. # るほか、グローバル変数 $data_system から用語データを取得します。
  58. #==============================================================================
  59.  
  60. module Vocab
  61.   EventOverflow   = "マップイベントまたはコモンイベントの呼び出しが上限を超えました。"
  62. end
  63. #==============================================================================
  64. # ■ Game_Interpreter
  65. #------------------------------------------------------------------------------
  66. #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  67. # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  68. #==============================================================================
  69. class Game_Interpreter
  70. #--------------------------------------------------------------------------
  71. #☆カスタム
  72. #--------------------------------------------------------------------------
  73.   #--------------------------------------------------------------------------
  74.   # ● IDからイベントをページ指定で起動
  75.   #     id   : 起動するイベントのID
  76.   #     page : 起動するイベントのページ
  77.   #--------------------------------------------------------------------------
  78.   def call_map_event(id,page)
  79.     event = $game_map.events[id]
  80.     @child = Game_Interpreter.new(@depth+1)
  81.     @child.setup(event.instance_variable_get(:@event).pages[page-1].list,id)
  82.     @child.run
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● IDからイベントを起動
  86.   #     id   : 起動するイベントのID
  87.   #--------------------------------------------------------------------------
  88.   def start_map_event(id)
  89.     event = $game_map.events[id]
  90.     @child = Game_Interpreter.new(@depth + 1)
  91.     @child.setup(event.list, id)
  92.     @child.run
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● IDからイベントをページ指定で起動(イベントIDは引き継ぎ)
  96.   #     id   : 起動するイベントのID
  97.   #     page : 起動するイベントのページ
  98.   #--------------------------------------------------------------------------
  99.   def call_map_event_carried_id(id,page)
  100.     event = $game_map.events[id]
  101.     @child = Game_Interpreter.new(@depth+1)
  102.     @child.setup(event.instance_variable_get(:@event).pages[page-1].list,@event_id)
  103.     @child.run
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● IDからイベントを起動(イベントIDは引き継ぎ)
  107.   #     id   : 起動するイベントのID
  108.   #--------------------------------------------------------------------------
  109.   def start_map_event_carried_id(id)
  110.     event = $game_map.events[id]
  111.     @child = Game_Interpreter.new(@depth + 1)
  112.     @child.setup(event.list, @event_id)
  113.     @child.run
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 別マップのマップイベントを呼び出す。(IDは引き継ぎ。)
  117.   #     map_id     : 起動するイベントがあるマップのID
  118.   #     event_id   : 起動するイベントID
  119.   #     page       : 起動するイベントのページ
  120.   #--------------------------------------------------------------------------
  121.   def call_other_map_event(map_id,event_id,page)
  122.     if @map_id != map_id
  123.       event = load_data(sprintf("Data/Map%03d.rvdata2", map_id)).events[event_id]
  124.       event = Game_Event.new(map_id, event)
  125.     else
  126.       event = $game_map.events[id]
  127.     end
  128.     @child = Game_Interpreter.new(@depth+1)
  129.     @child.setup(event.instance_variable_get(:@event).pages[page-1].list,@event_id)
  130.     @child.run
  131.   end
  132. end





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