赞 | 5 |
VIP | 71 |
好人卡 | 22 |
积分 | 6 |
经验 | 32145 |
最后登录 | 2013-8-9 |
在线时间 | 184 小时 |
Lv2.观梦者 天仙
- 梦石
- 0
- 星屑
- 620
- 在线时间
- 184 小时
- 注册时间
- 2008-4-15
- 帖子
- 5023
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 雪流星 于 2012-2-25 15:07 编辑
更新日誌︰
- 2011-01-11
- 增加使用元件ID判斷,修改中間無法通行的元件是牆壁時也會跳躍的 BUG - 2011-01-12
- 增加使用元件ID判斷,修改中間無法通行的元件是櫃台、欄杆等元件時也會跳躍的 BUG
- class Game_Map
- def get_tile_id(x, y)
- a = data[x, y, 0]
- return 0 unless a
- a-=2000
- map_tile_id_0 = (a >= 0) ? a/48 : (a+593)
- map_tile_id_1 = (data[x, y, 1]-2000) / 48
- map_tile_id_2 = (data[x, y, 2])
-
- map_tile_id_0 = 0 if map_tile_id_0 == -42 # A
- map_tile_id_1 = 0 if map_tile_id_1 == -42 # I
- map_tile_id_2 = 0 if map_tile_id_2 == -42 # B~E
-
- # 图块 ID 矫正
- map_tile_id_0 = map_tile_id_1 if map_tile_id_1 > 0
- unless @events.nil?
- for event in @events.values
- if event.pos?(x, y) and event.tile_id > 0
- # 若是事件使用地图元件,使用该地图元件的ID
- map_tile_id_2 = event.tile_id
- end
- end
- end
- # 返回 [底层ID, 上层ID]
- return [map_tile_id_0, map_tile_id_2]
- end
- end
- class Game_Character
- def get_map_tile_id(x, y)
- return $game_map.get_tile_id(x, y)
- end
- def can_jump?
- # 面向與方向鍵不同時不跳躍
- return false if Input.dir4 != @direction
- # 測試行走(按下Ctrl)時不跳躍
- return false if debug_through?
- x_f1 = x_f2 = @x
- y_f1 = y_f2 = @y
- case @direction
- when 2
- y_f2 += 2
- y_f1 += 1
- when 4
- x_f2 -= 2
- x_f1 -= 1
- when 6
- x_f2 += 2
- x_f1 += 1
- when 8
- y_f2 -= 2
- y_f1 -= 1
- end
- # 前第一格判斷
- if can_walk?(x_f1, y_f1)# 判斷前一格是否能行走
- return false
- elsif [18, 19, 22, 26, 27, 30, 34, 35, 38, 42, 43, 46].include?(get_map_tile_id(x_f1, y_f1)[0])
- return false # 前一格的A層為山、森林、欄杆元件時不能跳躍
- elsif get_map_tile_id(x_f1, y_f1)[1]>1
- return false # 前一格的B~E層無法通行時也不能跳躍
- elsif $game_map.counter?(x_f1, y_f1)
- return false # 前一格為櫃台時無法跳躍
- elsif !$game_map.events_xy(x_f1, y_f1).empty?
- return false
- end
- # 判斷面前兩格是否相同
- return false if get_map_tile_id(x_f1, y_f1) == get_map_tile_id(x_f2, y_f2)
- # 判斷面前一格是否牆壁元件
- wall_tile = (89..96).to_a + (105..112).to_a + (121..128).to_a # 獲取牆壁元件ID
- w_top_tile = (81..88).to_a + (97..104).to_a + (113..120).to_a # 獲取牆頂元件ID
- if wall_tile.include?(get_map_tile_id(x_f1, y_f1)[0]) # 若前一格為牆壁元件
- # 判斷當前格是否為牆(此功能需配合四方通行判斷腳本才能看出效用)
- if w_top_tile.include?(get_map_tile_id(@x, @y)[0])
- return get_map_tile_id(@x, @y) == get_map_tile_id(x_f2, y_f2)
- else
- return false
- end
- end
- # 判斷前二格是否能行走
- return can_walk?(x_f2, y_f2)
- end
- end
- class Game_Event < Game_Character
- def can_jump?
- return false if @list[0].code != 108 # 第一个指令不是“注释”时返回 false
- return @list[0].parameters[0] == "jumpable"
- end
- end
- class Game_Player < Game_Character
- alias old_move_by_input move_by_input
- def move_by_input
- # 不能行動時忽略所有動作
- return unless movable?
- # 解釋器執行時忽略所有動作
- return if $game_map.interpreter.running?
- d = Input.dir4
- # 能夠跳躍時
- if can_jump?
- # 判斷跳躍方向
- case d
- when 2; jump(0, 2) # 向下跳
- when 4; jump(-2, 0) # 向左跳
- when 6; jump(2, 0) # 向右跳
- when 8; jump(0, -2) # 向上跳
- end
- end
- # 呼叫原有方法
- old_move_by_input
- end
- end
复制代码 插入 main 前面,地圖上若空一格無法通行,就會像黃金太陽那樣跳過去
範例工程︰
GS_Jump.rar
(238.73 KB, 下载次数: 12055)
|
评分
-
查看全部评分
|