查看: 3218|回复: 6

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

[复制链接]
梦石
0
星屑
5241
在线时间
760 小时
注册时间
2009-1-21
回帖
236
发表于 2012-8-17 18:44:18 | 显示全部楼层 |阅读模式

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

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

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

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

說明

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


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

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

20120224212548746.jpg

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

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


20120224212601237.jpg


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



腳本
[pre lang="ruby" line="1"]=begin
RPGツクールVXAce用スクリプト素材
イベントの接触エリアを拡大

2012年4月09日
tamuraさんは遊び足りない 製作
http://tamurarpgvx.blog137.fc2.com/

【概要】
イベントが「接触している」とみなす範囲を広げます。


【導入方法】
スクリプトエディタを開き、左のリストの一番下、「ここに追加」と書いてある部分の
下の空欄を選び、右クリック、「挿入」を選ぶ。
出来た空欄に、「名前」の所でファイル名を入れておくといい。
右に空白の領域に、このテキストファイル前文をコピーして貼り付け。


【使い方】
・あるイベントの「実行内容」に、イベントコマンド「注釈」で、
接触エリア;3
などと記述して下さい。
通常、イベントに衝突しないと、「プレーヤーと接触」「イベントと接触」の
イベントは動作しませんが、上記のように注釈をつける事によって、
注釈をつけたイベントから3マス離れたエリアに侵入すると、接しているとみなして
イベントが起動します。

・接触エリアに侵入するとすぐに開始するイベントは、注釈を付けたイベントの
 トリガーを「プレーヤーと接触」もしくは「イベントと接触」のどちらかにします。
 どちらでも働きは同じです。
・エリア内で決定ボタンを押すと始まるイベントの場合は、注釈を付けたイベントの
 トリガーを「決定ボタン」として下さい。

・エリアの形状を選べます。
接触エリア;3;1
で、エリアはダイヤモンド型でなく、正方形となります。
接触エリア;3;0
など、2番目を1以外にするか、あるいは記述しないと従来通りダイヤ型になります。

【改訂履歴】
2012.02.24 初回作成。
2012.02.25 場所移動に対応。
2012.03.01 エリアがマップの限界をはみ出してしまうとエラーを起こすのを修正。
2012.03.06 エリアの形状を、ダイヤモンド型か正方形か選べるようにした。
2012.03.20 正方形でないマップだと不具合が出る問題を修正。
            ひとつも機能しているイベントが無い場合にエラーが出る問題への予防。
2012.03.29 プライオリティが「通常キャラと同じ」以外でも機能するようにした。
2012.04.09 製作中にイベントを消去するとエラー落ちするのを修正。

=end
#==============================================================================
# ■ Tamura_Aria_Touch
#------------------------------------------------------------------------------
#   初期状態では、このスクリプトは動かないイベントにしか使えません。
#   イベントを動かしたい場合はIS_MOVE = true として下さい。
#   ただし、処理が重くなるはずですので非推奨です。
#==============================================================================
module Tamura_Area_Touch
  IS_MOVE = false
end


#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
#  ダメージエリアの設定関数を呼び出します。
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh_area_touch
    refresh_area_touch_default
    $game_player.area_touch_reset #接触エリアのリセット。
  end
  alias :refresh_area_touch_default :refresh
  alias :refresh :refresh_area_touch
end

#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
#  プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
# 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
#==============================================================================
class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ● 接触エリアを再設定する。(イベントのページが変更された時など)
  #--------------------------------------------------------------------------
  def area_touch_reset
    $event_touch_area = []
    for i in 0 ... $game_map.width
      retu = []
      for j in 0 ... $game_map.height
        retu.push [nil , nil]
      end
      $event_touch_area.push retu
    end
   
    #今パーティがいるマップにおける、全てのイベントを調べ、
    #現在、機能しているイベントページから「注釈」を抜き出す。
    for i in 1 .. $game_map.events.size
      event = $game_map.events
      next unless event
      list = $game_map.events.list
      next unless list
      for j in 0 ... list.size
        if list[j].code == 108 #「注釈」である。
          tyuusyaku = list[j].parameters[0]
          touch_area_rewrite(tyuusyaku , event)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 接触エリアのリセット
  #--------------------------------------------------------------------------
  def touch_area_rewrite(tyuusyaku , event)
    if /接触エリア/ =~ tyuusyaku
      str1 = tyuusyaku.scan(/接触エリア(\S+)/)
      str = str1[0][0].scan(/;(\d+)/)
      str.push [0] if str[1] == nil
      if str[1][0].to_i == 1 #正方形型
        w = str[0][0].to_i #範囲
        for x in ( event.x - w ) .. ( event.x + w )
          for y in  ( event.y - w ) .. ( event.y + w )
            if x < $game_map.width and y < $game_map.height
              #接触エリア
              $event_touch_area[x][y] = [event.x , event.y , event.trigger]
            end
          end
        end
      else
        w = str[0][0].to_i #範囲
        for x in ( event.x - w ) .. ( event.x + w )
          d = ( event.x - x ).abs #中心からの距離(絶対値)
          for y in  ( event.y - w + d ) .. ( event.y + w - d )
            if x < $game_map.width and y < $game_map.height
              #接触エリア
              $event_touch_area[x][y] = [event.x , event.y , event.trigger]
            end
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 決定ボタンによるイベント起動判定
  #--------------------------------------------------------------------------
  def check_action_event_touch_area
    check_action_event_touch_area_default
    if $event_touch_area[$game_player.x][$game_player.y][0] != nil
      if $event_touch_area[$game_player.x][$game_player.y][2] == 0
        ex = $event_touch_area[$game_player.x][$game_player.y][0]
        ey = $event_touch_area[$game_player.x][$game_player.y][1]
        $game_player.start_map_event_all_pri(ex,ey,[0])
        #$game_player.start_map_event(ex,ey,[0], true)
      end
    end
  end
  alias :check_action_event_touch_area_default :check_action_event
  alias :check_action_event :check_action_event_touch_area
  #--------------------------------------------------------------------------
  # ● イベント起動 プライオリティは無視。
  #--------------------------------------------------------------------------
  def start_map_event_all_pri(x,y,triggers)
    $game_map.events_xy(x, y).each do |event|
      if event.trigger_in?(triggers)
        event.start
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 場所移動の実行
  #--------------------------------------------------------------------------
  def perform_transfer_event_area
    perform_transfer_event_area_default
    $game_player.area_touch_reset
  end
  alias :perform_transfer_event_area_default :perform_transfer
  alias :perform_transfer :perform_transfer_event_area
end
  

#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#  マップ画面の処理を行うクラスです。
#==============================================================================
class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_touch_area_sce_map
    update_touch_area_sce_map_default
    begin
      if $event_touch_area[$game_player.x][$game_player.y][0] != nil
        if $event_touch_area[$game_player.x][$game_player.y][2] == 1 or 2
          ex = $event_touch_area[$game_player.x][$game_player.y][0]
          ey = $event_touch_area[$game_player.x][$game_player.y][1]
          $game_player.start_map_event_all_pri(ex,ey,[1,2])
          #$game_player.start_map_event(ex,ey,[1,2], true)
        end
      end
    rescue
      $game_player.area_touch_reset
    end
    #接触エリアのリセット。動くイベントに対応の場合。
    $game_player.area_touch_reset if Tamura_Area_Touch::IS_MOVE
  end
  alias :update_touch_area_sce_map_default :update
  alias :update :update_touch_area_sce_map
end[/pre]


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

還是說 這三個 也要加進去?
「プレーヤーから接触」「イベントから接触」「決定ボタン」
梦石
0
星屑
48
在线时间
841 小时
注册时间
2010-8-11
回帖
1029
发表于 2012-8-17 20:43:16 | 显示全部楼层
本帖最后由 945127391 于 2012-8-17 20:46 编辑

首先,在事件的第一个事件指令中放一个注释,输入以下内容:
  1. 接触エリア;3
复制代码
如下
未命名.jpg
然后用一号区域填满事件的响应范围,如下

然后角色在一号区域的范围内就可以响应事件了
未命名2.jpg
回复

使用道具 举报

梦石
0
星屑
5241
在线时间
760 小时
注册时间
2009-1-21
回帖
236
 楼主| 发表于 2012-8-17 20:54:45 | 显示全部楼层
945127391 发表于 2012-8-17 20:43
首先,在事件的第一个事件指令中放一个注释,输入以下内容:如下

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

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

可是  依照你的解說

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

%%%.png

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

還請你費心講解了
回复

使用道具 举报

梦石
0
星屑
48
在线时间
841 小时
注册时间
2010-8-11
回帖
1029
发表于 2012-8-17 21:01:43 | 显示全部楼层
御之嵐 发表于 2012-8-17 20:54
所以說  接触エリア;3   的 3   跟 繪製的區域編號 有關?

可是  依照你的解說

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

点评

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

使用道具 举报

梦石
0
星屑
2306
在线时间
1010 小时
注册时间
2012-4-30
回帖
1455

开拓者

发表于 2012-8-17 21:08:03 | 显示全部楼层
接触エリア;3  是在里NPC距离3图块的区域内将会触发这个事件  和区域木有关系。。

点评

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

使用道具 举报

梦石
0
星屑
1630
在线时间
423 小时
注册时间
2010-12-26
回帖
284
发表于 2012-8-17 22:06:52 | 显示全部楼层
你会日语吗?

点评

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

使用道具 举报

梦石
0
星屑
1630
在线时间
423 小时
注册时间
2010-12-26
回帖
284
发表于 2012-8-17 22:17:42 | 显示全部楼层
台湾的日语环境好啊!日本人应该不少吧!

点评

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部