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

Project1

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

[已经解决] 這個 日本的 事件接觸擴大 沒反應

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3011
在线时间
648 小时
注册时间
2009-1-21
帖子
273
跳转到指定楼层
1
发表于 2012-8-17 18:44:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 御之嵐 于 2012-8-17 21:46 编辑

出處
http://tamurarpgvx.blog137.fc2.com/blog-entry-129.html

說明

次に、イベントコマンド「注釈」を使い、以下のように記述。



こうすると、イベントから3マスまでは接触しているとみなします。

3マスとは、以下のようなエリアです。



イベントのトリガーが「プレーヤーから接触」「イベントから接触」の場合はエリアに入るとすぐに、

トリガーが「決定ボタン」の場合は、エリア内で決定ボタンを押すと、イベントを開始します。





※ エリアを、上記のようなダイヤ型か、正方形かを選べるようになりました。
※ 縦横が同じ長さでないマップでエラー、動作しているイベントが一つもないマップでエラーが起きるのを修正。



腳本
RUBY 代码复制
  1. =begin
  2. RPGツクールVXAce用スクリプト素材
  3. イベントの接触エリアを拡大
  4.  
  5. 2012年4月09日
  6. tamuraさんは遊び足りない 製作
  7. [url]http://tamurarpgvx.blog137.fc2.com/[/url]
  8.  
  9. 【概要】
  10. イベントが「接触している」とみなす範囲を広げます。
  11.  
  12.  
  13. 【導入方法】
  14. スクリプトエディタを開き、左のリストの一番下、「ここに追加」と書いてある部分の
  15. 下の空欄を選び、右クリック、「挿入」を選ぶ。
  16. 出来た空欄に、「名前」の所でファイル名を入れておくといい。
  17. 右に空白の領域に、このテキストファイル前文をコピーして貼り付け。
  18.  
  19.  
  20. 【使い方】
  21. ・あるイベントの「実行内容」に、イベントコマンド「注釈」で、
  22. 接触エリア;3
  23. などと記述して下さい。
  24. 通常、イベントに衝突しないと、「プレーヤーと接触」「イベントと接触」の
  25. イベントは動作しませんが、上記のように注釈をつける事によって、
  26. 注釈をつけたイベントから3マス離れたエリアに侵入すると、接しているとみなして
  27. イベントが起動します。
  28.  
  29. ・接触エリアに侵入するとすぐに開始するイベントは、注釈を付けたイベントの
  30.  トリガーを「プレーヤーと接触」もしくは「イベントと接触」のどちらかにします。
  31.  どちらでも働きは同じです。
  32. ・エリア内で決定ボタンを押すと始まるイベントの場合は、注釈を付けたイベントの
  33.  トリガーを「決定ボタン」として下さい。
  34.  
  35. ・エリアの形状を選べます。
  36. 接触エリア;3;1
  37. で、エリアはダイヤモンド型でなく、正方形となります。
  38. 接触エリア;3;0
  39. など、2番目を1以外にするか、あるいは記述しないと従来通りダイヤ型になります。
  40.  
  41. 【改訂履歴】
  42. 2012.02.24 初回作成。
  43. 2012.02.25 場所移動に対応。
  44. 2012.03.01 エリアがマップの限界をはみ出してしまうとエラーを起こすのを修正。
  45. 2012.03.06 エリアの形状を、ダイヤモンド型か正方形か選べるようにした。
  46. 2012.03.20 正方形でないマップだと不具合が出る問題を修正。
  47.             ひとつも機能しているイベントが無い場合にエラーが出る問題への予防。
  48. 2012.03.29 プライオリティが「通常キャラと同じ」以外でも機能するようにした。
  49. 2012.04.09 製作中にイベントを消去するとエラー落ちするのを修正。
  50.  
  51. =end
  52. #==============================================================================
  53. # ■ Tamura_Aria_Touch
  54. #------------------------------------------------------------------------------
  55. #   初期状態では、このスクリプトは動かないイベントにしか使えません。
  56. #   イベントを動かしたい場合はIS_MOVE = true として下さい。
  57. #   ただし、処理が重くなるはずですので非推奨です。
  58. #==============================================================================
  59. module Tamura_Area_Touch
  60.   IS_MOVE = false
  61. end
  62.  
  63.  
  64. #==============================================================================
  65. # ■ Game_Map
  66. #------------------------------------------------------------------------------
  67. #  ダメージエリアの設定関数を呼び出します。
  68. #==============================================================================
  69. class Game_Map
  70.   #--------------------------------------------------------------------------
  71.   # ● リフレッシュ
  72.   #--------------------------------------------------------------------------
  73.   def refresh_area_touch
  74.     refresh_area_touch_default
  75.     $game_player.area_touch_reset #接触エリアのリセット。
  76.   end
  77.   alias :refresh_area_touch_default :refresh
  78.   alias :refresh :refresh_area_touch
  79. end
  80.  
  81. #==============================================================================
  82. # ■ Game_Player
  83. #------------------------------------------------------------------------------
  84. #  プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
  85. # 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
  86. #==============================================================================
  87. class Game_Player < Game_Character
  88.   #--------------------------------------------------------------------------
  89.   # ● 接触エリアを再設定する。(イベントのページが変更された時など)
  90.   #--------------------------------------------------------------------------
  91.   def area_touch_reset
  92.     $event_touch_area = []
  93.     for i in 0 ... $game_map.width
  94.       retu = []
  95.       for j in 0 ... $game_map.height
  96.         retu.push [nil , nil]
  97.       end
  98.       $event_touch_area.push retu
  99.     end
  100.  
  101.     #今パーティがいるマップにおける、全てのイベントを調べ、
  102.     #現在、機能しているイベントページから「注釈」を抜き出す。
  103.     for i in 1 .. $game_map.events.size
  104.       event = $game_map.events[i]
  105.       next unless event
  106.       list = $game_map.events[i].list
  107.       next unless list
  108.       for j in 0 ... list.size
  109.         if list[j].code == 108 #「注釈」である。
  110.           tyuusyaku = list[j].parameters[0]
  111.           touch_area_rewrite(tyuusyaku , event)
  112.         end
  113.       end
  114.     end
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 接触エリアのリセット
  118.   #--------------------------------------------------------------------------
  119.   def touch_area_rewrite(tyuusyaku , event)
  120.     if /接触エリア/ =~ tyuusyaku
  121.       str1 = tyuusyaku.scan(/接触エリア(\S+)/)
  122.       str = str1[0][0].scan(/;(\d+)/)
  123.       str.push [0] if str[1] == nil
  124.       if str[1][0].to_i == 1 #正方形型
  125.         w = str[0][0].to_i #範囲
  126.         for x in ( event.x - w ) .. ( event.x + w )
  127.           for y in  ( event.y - w ) .. ( event.y + w )
  128.             if x < $game_map.width and y < $game_map.height
  129.               #接触エリア
  130.               $event_touch_area[x][y] = [event.x , event.y , event.trigger]
  131.             end
  132.           end
  133.         end
  134.       else
  135.         w = str[0][0].to_i #範囲
  136.         for x in ( event.x - w ) .. ( event.x + w )
  137.           d = ( event.x - x ).abs #中心からの距離(絶対値)
  138.           for y in  ( event.y - w + d ) .. ( event.y + w - d )
  139.             if x < $game_map.width and y < $game_map.height
  140.               #接触エリア
  141.               $event_touch_area[x][y] = [event.x , event.y , event.trigger]
  142.             end
  143.           end
  144.         end
  145.       end
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 決定ボタンによるイベント起動判定
  150.   #--------------------------------------------------------------------------
  151.   def check_action_event_touch_area
  152.     check_action_event_touch_area_default
  153.     if $event_touch_area[$game_player.x][$game_player.y][0] != nil
  154.       if $event_touch_area[$game_player.x][$game_player.y][2] == 0
  155.         ex = $event_touch_area[$game_player.x][$game_player.y][0]
  156.         ey = $event_touch_area[$game_player.x][$game_player.y][1]
  157.         $game_player.start_map_event_all_pri(ex,ey,[0])
  158.         #$game_player.start_map_event(ex,ey,[0], true)
  159.       end
  160.     end
  161.   end
  162.   alias :check_action_event_touch_area_default :check_action_event
  163.   alias :check_action_event :check_action_event_touch_area
  164.   #--------------------------------------------------------------------------
  165.   # ● イベント起動 プライオリティは無視。
  166.   #--------------------------------------------------------------------------
  167.   def start_map_event_all_pri(x,y,triggers)
  168.     $game_map.events_xy(x, y).each do |event|
  169.       if event.trigger_in?(triggers)
  170.         event.start
  171.       end
  172.     end
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 場所移動の実行
  176.   #--------------------------------------------------------------------------
  177.   def perform_transfer_event_area
  178.     perform_transfer_event_area_default
  179.     $game_player.area_touch_reset
  180.   end
  181.   alias :perform_transfer_event_area_default :perform_transfer
  182.   alias :perform_transfer :perform_transfer_event_area
  183. end
  184.  
  185.  
  186. #==============================================================================
  187. # ■ Scene_Map
  188. #------------------------------------------------------------------------------
  189. #  マップ画面の処理を行うクラスです。
  190. #==============================================================================
  191. class Scene_Map < Scene_Base
  192.   #--------------------------------------------------------------------------
  193.   # ● フレーム更新
  194.   #--------------------------------------------------------------------------
  195.   def update_touch_area_sce_map
  196.     update_touch_area_sce_map_default
  197.     begin
  198.       if $event_touch_area[$game_player.x][$game_player.y][0] != nil
  199.         if $event_touch_area[$game_player.x][$game_player.y][2] == 1 or 2
  200.           ex = $event_touch_area[$game_player.x][$game_player.y][0]
  201.           ey = $event_touch_area[$game_player.x][$game_player.y][1]
  202.           $game_player.start_map_event_all_pri(ex,ey,[1,2])
  203.           #$game_player.start_map_event(ex,ey,[1,2], true)
  204.         end
  205.       end
  206.     rescue
  207.       $game_player.area_touch_reset
  208.     end
  209.     #接触エリアのリセット。動くイベントに対応の場合。
  210.     $game_player.area_touch_reset if Tamura_Area_Touch::IS_MOVE
  211.   end
  212.   alias :update_touch_area_sce_map_default :update
  213.   alias :update :update_touch_area_sce_map
  214. end



我目前 只有照他 圖(1)  的方法配置
沒有反應

還是說 這三個 也要加進去?
「プレーヤーから接触」「イベントから接触」「決定ボタン」

Lv1.梦旅人

梦石
0
星屑
48
在线时间
841 小时
注册时间
2010-8-11
帖子
1135
2
发表于 2012-8-17 20:43:16 | 只看该作者
本帖最后由 945127391 于 2012-8-17 20:46 编辑

首先,在事件的第一个事件指令中放一个注释,输入以下内容:
  1. 接触エリア;3
复制代码
如下

然后用一号区域填满事件的响应范围,如下

然后角色在一号区域的范围内就可以响应事件了

未命名2.jpg (9.6 KB, 下载次数: 43)

未命名2.jpg
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3011
在线时间
648 小时
注册时间
2009-1-21
帖子
273
3
 楼主| 发表于 2012-8-17 20:54:45 | 只看该作者
945127391 发表于 2012-8-17 20:43
首先,在事件的第一个事件指令中放一个注释,输入以下内容:如下

然后用一号区域填满事件的响应范围,如下

所以說  接触エリア;3   的 3   跟 繪製的區域編號 有關?

可是  依照你的解說

一號區域
我這樣 還是沒反應...=.=



抱歉  小的  理解力  比較差一點

還請你費心講解了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
841 小时
注册时间
2010-8-11
帖子
1135
4
发表于 2012-8-17 21:01:43 | 只看该作者
御之嵐 发表于 2012-8-17 20:54
所以說  接触エリア;3   的 3   跟 繪製的區域編號 有關?

可是  依照你的解說

咦,我的可以耶
该不会是你没有按回车吧.......
你试一下弄成这样:

点评

恩 可以使用了 ,不知道為什麼就是了 ,不過真的和繪製區域沒關聯 感謝幫忙!!  发表于 2012-8-17 21:33
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1384
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

5
发表于 2012-8-17 21:08:03 | 只看该作者
接触エリア;3  是在里NPC距离3图块的区域内将会触发这个事件  和区域木有关系。。

点评

神奇的偶遇  发表于 2012-8-17 22:07
恩 了解了,可以使用了 原因不明 感謝幫忙  发表于 2012-8-17 21:33
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1215
在线时间
423 小时
注册时间
2010-12-26
帖子
337
6
发表于 2012-8-17 22:06:52 | 只看该作者
你会日语吗?

点评

一點點 皮毛而已 只看得懂 非常簡單的  发表于 2012-8-17 22:13
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1215
在线时间
423 小时
注册时间
2010-12-26
帖子
337
7
发表于 2012-8-17 22:17:42 | 只看该作者
台湾的日语环境好啊!日本人应该不少吧!

点评

目前 還沒碰過,不過同學 有在學校遇到就是了,兩個日本妹  发表于 2012-8-17 22:20
摘自《暗悲传》
某人
天啊!我无骂无打怎么这么多的狗,每天都要来咬我呢?......天理何在
某人
在路上看到了许多行人说道我眼前怎么全是无肺黑心肝在行走呢?
某人
有时被整的实在是受不了,很想杀狗,看看他们的心脏是黑的吗?
某人
我很喜欢黑夜与下雨,或许我只能在虚拟世界能过上一般人的生活......
某人
无论别人无良心骂我,诅咒死,刻意整蛊......希望能坚持活着!要永远记住那些人的奸诈嘴脸!
某人
又有谁能出来主持公道呢?谁能理解你,谁能站出来说句话.....他是无辜又悲苦......这真是无聊的故事吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 13:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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