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

Project1

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

[已经解决] RMVA如何使一个事件接近另一个事件

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2014-9-20
帖子
33
跳转到指定楼层
1
发表于 2015-11-28 11:26:39 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
比如:我在做一个游戏,其中一个事件(事件A)可以让玩家用键盘来操纵,而另一个事件(事件B)需要来追逐(事件A),该怎么实现?
求大家来解答一下。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2014-9-20
帖子
33
18
 楼主| 发表于 2015-11-28 17:03:02 | 只看该作者
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

点评

这个脚本貌似是用来强行运行指定事件的,利用并行事件判断怪物和玩家2P的距离然后用这个的话也许可以做出追到2P的时候做出和追到主角一样的事。  发表于 2015-11-28 17:15
这里面也没有呀~其实那个方法就是默认里面带的呀,于是到底要表达什么呢?(其实可以用点评的,不用一直连楼什么的~)  发表于 2015-11-28 17:06
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2014-9-20
帖子
33
17
 楼主| 发表于 2015-11-28 16:47:02 | 只看该作者
SiWangQi 发表于 2015-11-28 16:46
可不可以用下面的代码里的:move_toward_character($game_map.events[7])
命令呢?好像意思是跟踪事件7的 ...

@cinderelmini
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2014-9-20
帖子
33
16
 楼主| 发表于 2015-11-28 16:46:22 | 只看该作者
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

点评

这个是ARPG用的吧,攻击召唤公共事件什么的……具体不是很清楚……  发表于 2015-11-28 17:12
还有下面的  发表于 2015-11-28 17:11
那么上面的脚本是干嘛的呢?  发表于 2015-11-28 17:10
PS:这个代码框里根本没有【move_toward_character($game_map.events[7])】吧→_→  发表于 2015-11-28 16:53
可以啊,原理就跟窝⑨楼的那个一样的呀~窝只是为了使用方便才那样写。  发表于 2015-11-28 16:52
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2014-9-20
帖子
33
15
 楼主| 发表于 2015-11-28 15:02:54 | 只看该作者
SiWangQi 发表于 2015-11-28 14:02
@cinderelmini

出错了

我是这样填的;

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

图片.PNG

点评

第一行和第二行顺序换过来,这两行顺序不能倒,必须先赋值才能用来对比和计算。  发表于 2015-11-28 15:10
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2014-9-20
帖子
33
14
 楼主| 发表于 2015-11-28 14:02:54 | 只看该作者
cinderelmini 发表于 2015-11-28 12:39
不是在事件第三页里用,是在设置事件行走图右边一点的【自主移动】里面的移动类型里面选【自定义】,
然后 ...

@cinderelmini

出错了

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

错误提示.PNG

点评

一共有5行,要分开来一行一行按顺序填进去才行  发表于 2015-11-28 14:55
你具体怎么填的?  发表于 2015-11-28 14:54
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2014-9-20
帖子
33
13
 楼主| 发表于 2015-11-28 14:00:43 | 只看该作者
cinderelmini 发表于 2015-11-28 12:39
不是在事件第三页里用,是在设置事件行走图右边一点的【自主移动】里面的移动类型里面选【自定义】,
然后 ...

@cinderelmini
F:\错误提示.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9397
在线时间
2748 小时
注册时间
2008-9-5
帖子
3543

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

12
发表于 2015-11-28 12:39:22 | 只看该作者
本帖最后由 cinderelmini 于 2015-11-28 12:40 编辑

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

作用就是设置一个等待时间,时间到了就随机选一个对象(主角或者2P事件)去追。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2014-9-20
帖子
33
11
 楼主| 发表于 2015-11-28 12:35:22 | 只看该作者
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
是什么意思?我知道这些是在事件第三页的脚本里使用,但是有什么用还不知道,可以解释一下吗?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

店长

梦石
13
星屑
1282
在线时间
1810 小时
注册时间
2010-10-6
帖子
779

蛤蛤蛤蛤开拓者

10
发表于 2015-11-28 12:32:07 | 只看该作者
https://rpg.blue/thread-246449-1-1.html
用了九夜神尊的事件寻路,解释起来大麻烦了直接上范例,WASD玩家2移动.事件接触的设计是用变量带入坐标让事件1在事件2左右上下一格处触发,略蛋疼.

Project1.rar

2.81 MB, 下载次数: 40

努力填新坑中!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-10 16:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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