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

Project1

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

[已经解决] 请问在哪里修改主角每步移动的距离(像素)??

 关闭 [复制链接]

Lv2.观梦者

沉默的羔狼

梦石
0
星屑
322
在线时间
77 小时
注册时间
2005-10-23
帖子
3534
跳转到指定楼层
1
发表于 2009-9-18 17:51:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
默认是32像素吧,想该一下。谢谢
★graykid的素材王国★除了现实,我们应该还有一个诗意的世界!

Lv1.梦旅人


梦石
0
星屑
89
在线时间
24 小时
注册时间
2006-5-27
帖子
11425

贵宾

2
发表于 2009-9-18 17:53:46 | 只看该作者
可以改为16px走格……
回复 支持 反对

使用道具 举报

Lv2.观梦者

沉默的羔狼

梦石
0
星屑
322
在线时间
77 小时
注册时间
2005-10-23
帖子
3534
3
 楼主| 发表于 2009-9-18 18:00:53 | 只看该作者
在哪改涅
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
128 小时
注册时间
2009-1-28
帖子
2790
4
发表于 2009-9-20 09:58:22 | 只看该作者

炼金术的根本法则是等价交换。想要获得,必须失去同等价值的东西。每当烦躁的时候,煎熬在不想做却又正在做的烦心事中的时候,我就安慰自己,提醒自己做这些事情的目的所在,告诉自己不要忽略所获得或者即将获得的回报,物质的,精神的,肉体的,灵魂的回报!只做想做的事情,就会失去不想失去的东西。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

5
发表于 2009-9-22 13:16:07 | 只看该作者
LS的只是改速度...


要改这个的话那就麻烦咯```
阻碍与事件的重合判断啦。。。。。
牵扯到很多·····
-.-
回复 支持 反对

使用道具 举报

Lv2.观梦者

沉默的羔狼

梦石
0
星屑
322
在线时间
77 小时
注册时间
2005-10-23
帖子
3534
6
 楼主| 发表于 2009-9-28 20:52:21 | 只看该作者
[quote]LS的只是改速度...


要改这个的话那就麻烦咯```
阻碍与事件的重合判断啦。。。。。
牵扯到很多·····
神思 发表于 2009-9-22 13:16 [/siz
对啊我想改小一点,每步一个像素:L
★graykid的素材王国★除了现实,我们应该还有一个诗意的世界!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

永久的旅行者

梦石
1
星屑
110
在线时间
404 小时
注册时间
2006-12-13
帖子
3091

开拓者贵宾第3届短篇游戏大赛主流游戏组季军第5届短篇游戏比赛季军

7
发表于 2009-10-2 12:57:56 | 只看该作者
本帖最后由 darkten 于 2009-10-2 13:29 编辑

在论坛某处无意中见到的...
没有试验过...
祝你成功...
  1. class Game_Player < Game_Character
  2. #--------------------------------------------------------------------------
  3. # ● 定数
  4. #--------------------------------------------------------------------------
  5. TOP_SPACE = BOTTOM_SPACE = 16 # 上下の判定無視領域
  6. LEFT_SPACE = RIGHT_SPACE = 16 # 左右の判定無視領域
  7. #--------------------------------------------------------------------------
  8. # ● 公開インスタンス変数
  9. #--------------------------------------------------------------------------
  10. attr_accessor :dot_moving # ドット移動の向き(nil:ドット移動していない 0:止まっている)
  11. #--------------------------------------------------------------------------
  12. # ● 初期化
  13. #--------------------------------------------------------------------------
  14. def initialize
  15. super
  16. # ドット移動開始、立ち止まらせる
  17. @dot_moving = 0
  18. end
  19. #--------------------------------------------------------------------------
  20. # ● 移動中判定
  21. #--------------------------------------------------------------------------
  22. def moving?(by_update = false)
  23. # 呼び出し元がupdate以外で、かつドット移動中のとき
  24. if !by_update and @dot_moving
  25. # 立ち止まっていなければ移動中
  26. return @dot_moving != 0
  27. else
  28. # ドット移動中でなく、かつ論理座標と実座標が違っていれば移動中
  29. return (!@dot_moving and (@real_x != @x * 128 or @real_y != @y * 128))
  30. end
  31. end
  32. #--------------------------------------------------------------------------
  33. # ● 移動ルートの強制
  34. # move_route : 新しい移動ルート
  35. #--------------------------------------------------------------------------
  36. def force_move_route(move_route)
  37. # 立ち止まらせる
  38. @dot_moving = 0
  39. super(move_route)
  40. end
  41. #--------------------------------------------------------------------------
  42. # ● フレーム更新
  43. #--------------------------------------------------------------------------
  44. def update
  45. # ローカル変数に座標を記憶
  46. last_real_x, last_real_y = @real_x, @real_y
  47. last_x, last_y = @x, @y
  48. # ローカル変数に移動中かどうかを記憶
  49. last_moving = moving?(true)
  50. # 移動中、イベント実行中、移動ルート強制中、
  51. # メッセージウィンドウ表示中のいずれでもない場合
  52. unless moving?(true) or $game_system.map_interpreter.running? or
  53. @move_route_forcing or $game_temp.message_window_showing
  54. # ドット移動
  55. dot_move(Input.dir4)
  56. end
  57. super
  58. # キャラクターが下に移動し、かつ画面上の位置が中央より下の場合
  59. if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
  60. # マップを下にスクロール
  61. $game_map.scroll_down(@real_y - last_real_y)
  62. end
  63. # キャラクターが左に移動し、かつ画面上の位置が中央より左の場合
  64. if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
  65. # マップを左にスクロール
  66. $game_map.scroll_left(last_real_x - @real_x)
  67. end
  68. # キャラクターが右に移動し、かつ画面上の位置が中央より右の場合
  69. if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
  70. # マップを右にスクロール
  71. $game_map.scroll_right(@real_x - last_real_x)
  72. end
  73. # キャラクターが上に移動し、かつ画面上の位置が中央より上の場合
  74. if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
  75. # マップを上にスクロール
  76. $game_map.scroll_up(last_real_y - @real_y)
  77. end
  78. # 移動中ではない場合
  79. unless moving?(true)
  80. # 座標が更新されたか、ドット移動中でなく前回プレイヤーが移動中だった場合
  81. if last_x != @x or last_y != @y or (!@dot_moving and last_moving)
  82. # 同位置のイベントとの接触によるイベント起動判定
  83. result = check_event_trigger_here([1,2])
  84. # 起動したイベントがない場合
  85. if result == false
  86. # デバッグモードが ON かつ CTRL キーが押されている場合を除き
  87. unless $DEBUG and Input.press?(Input::CTRL)
  88. # エンカウント カウントダウン
  89. if @encounter_count > 0
  90. @encounter_count -= 1
  91. end
  92. end
  93. # 起動したイベントがある場合
  94. else
  95. # 立ち止まる、ドット移動していないならそのまま
  96. @dot_moving = @dot_moving ? 0 : nil
  97. end
  98. end
  99. # C ボタンが押された場合
  100. if Input.trigger?(Input::C)
  101. # 同位置および正面のイベント起動判定
  102. check_event_trigger_here([0])
  103. check_event_trigger_there([0,1,2])
  104. end
  105. end
  106. end
  107. #--------------------------------------------------------------------------
  108. # ● 移動タイプ : カスタム
  109. #--------------------------------------------------------------------------
  110. def move_type_custom
  111. # 停止中でなければ中断
  112. if jumping? or moving?
  113. return
  114. end
  115. # 移動コマンドのリストの最後に到達するまでループ
  116. while @move_route_index < @move_route.list.size
  117. # 移動コマンドを取得
  118. command = @move_route.list[@move_route_index]
  119. # コマンドコード 0 番 (リストの最後) の場合
  120. if command.code == 0
  121. # オプション [動作を繰り返す] が ON の場合
  122. if @move_route.repeat
  123. # 移動ルートのインデックスを最初に戻す
  124. @move_route_index = 0
  125. end
  126. # オプション [動作を繰り返す] が OFF の場合
  127. unless @move_route.repeat
  128. # 移動ルート強制中の場合
  129. if @move_route_forcing and not @move_route.repeat
  130. # 移動ルートの強制を解除
  131. @move_route_forcing = false
  132. # オリジナルの移動ルートを復帰
  133. @move_route = @original_move_route
  134. @move_route_index = @original_move_route_index
  135. @original_move_route = nil
  136. end
  137. # 停止カウントをクリア
  138. @stop_count = 0
  139. end
  140. return
  141. end
  142. # 移動系コマンド (下に移動~ジャンプ) の場合
  143. if command.code <= 14
  144. # ドット移動強制終了
  145. @dot_moving = nil
  146. # コマンドコードで分岐
  147. case command.code
  148. when 1 # 下に移動
  149. move_down
  150. when 2 # 左に移動
  151. move_left
  152. when 3 # 右に移動
  153. move_right
  154. when 4 # 上に移動
  155. move_up
  156. when 5 # 左下に移動
  157. move_lower_left
  158. when 6 # 右下に移動
  159. move_lower_right
  160. when 7 # 左上に移動
  161. move_upper_left
  162. when 8 # 右上に移動
  163. move_upper_right
  164. when 9 # ランダムに移動
  165. move_random
  166. when 10 # プレイヤーに近づく
  167. move_toward_player
  168. when 11 # プレイヤーから遠ざかる
  169. move_away_from_player
  170. when 12 # 一歩前進
  171. move_forward
  172. when 13 # 一歩後退
  173. move_backward
  174. when 14 # ジャンプ
  175. jump(command.parameters[0], command.parameters[1])
  176. end
  177. # オプション [移動できない場合は無視] が OFF で、移動失敗の場合
  178. if not @move_route.skippable and not moving? and not jumping?
  179. return
  180. end
  181. @move_route_index += 1
  182. return
  183. end
  184. # ウェイトの場合
  185. if command.code == 15
  186. # ウェイトカウントを設定
  187. @wait_count = command.parameters[0] * 2 - 1
  188. @move_route_index += 1
  189. return
  190. end
  191. # 向き変更系のコマンドの場合
  192. if command.code >= 16 and command.code <= 26
  193. # コマンドコードで分岐
  194. case command.code
  195. when 16 # 下を向く
  196. turn_down
  197. when 17 # 左を向く
  198. turn_left
  199. when 18 # 右を向く
  200. turn_right
  201. when 19 # 上を向く
  202. turn_up
  203. when 20 # 右に 90 度回転
  204. turn_right_90
  205. when 21 # 左に 90 度回転
  206. turn_left_90
  207. when 22 # 180 度回転
  208. turn_180
  209. when 23 # 右か左に 90 度回転
  210. turn_right_or_left_90
  211. when 24 # ランダムに方向転換
  212. turn_random
  213. when 25 # プレイヤーの方を向く
  214. turn_toward_player
  215. when 26 # プレイヤーの逆を向く
  216. turn_away_from_player
  217. end
  218. @move_route_index += 1
  219. return
  220. end
  221. # その他のコマンドの場合
  222. if command.code >= 27
  223. # コマンドコードで分岐
  224. case command.code
  225. when 27 # スイッチ ON
  226. $game_switches[command.parameters[0]] = true
  227. $game_map.need_refresh = true
  228. when 28 # スイッチ OFF
  229. $game_switches[command.parameters[0]] = false
  230. $game_map.need_refresh = true
  231. when 29 # 移動速度の変更
  232. @move_speed = command.parameters[0]
  233. when 30 # 移動頻度の変更
  234. @move_frequency = command.parameters[0]
  235. when 31 # 移動時アニメ ON
  236. @walk_anime = true
  237. when 32 # 移動時アニメ OFF
  238. @walk_anime = false
  239. when 33 # 停止時アニメ ON
  240. @step_anime = true
  241. when 34 # 停止時アニメ OFF
  242. @step_anime = false
  243. when 35 # 向き固定 ON
  244. @direction_fix = true
  245. when 36 # 向き固定 OFF
  246. @direction_fix = false
  247. when 37 # すり抜け ON
  248. @through = true
  249. when 38 # すり抜け OFF
  250. @through = false
  251. when 39 # 最前面に表示 ON
  252. @always_on_top = true
  253. when 40 # 最前面に表示 OFF
  254. @always_on_top = false
  255. when 41 # グラフィック変更
  256. @tile_id = 0
  257. @character_name = command.parameters[0]
  258. @character_hue = command.parameters[1]
  259. if @original_direction != command.parameters[2]
  260. @direction = command.parameters[2]
  261. @original_direction = @direction
  262. @prelock_direction = 0
  263. end
  264. if @original_pattern != command.parameters[3]
  265. @pattern = command.parameters[3]
  266. @original_pattern = @pattern
  267. end
  268. when 42 # 不透明度の変更
  269. @opacity = command.parameters[0]
  270. when 43 # 合成方法の変更
  271. @blend_type = command.parameters[0]
  272. when 44 # SE の演奏
  273. $game_system.se_play(command.parameters[0])
  274. when 45 # スクリプト
  275. result = eval(command.parameters[0])
  276. end
  277. @move_route_index += 1
  278. end
  279. end
  280. end
  281. #--------------------------------------------------------------------------
  282. # ● フレーム更新 (移動)
  283. #--------------------------------------------------------------------------
  284. def update_move
  285. # ドット移動中で無いなら論理座標更新
  286. unless @dot_moving
  287. # 移動速度からマップ座標系での移動距離に変換
  288. distance = 2 ** @move_speed
  289. # 論理座標が実座標より下の場合
  290. if @y * 128 > @real_y
  291. # 下に移動
  292. @real_y = [@real_y + distance, @y * 128].min
  293. end
  294. # 論理座標が実座標より左の場合
  295. if @x * 128 < @real_x
  296. # 左に移動
  297. @real_x = [@real_x - distance, @x * 128].max
  298. end
  299. # 論理座標が実座標より右の場合
  300. if @x * 128 > @real_x
  301. # 右に移動
  302. @real_x = [@real_x + distance, @x * 128].min
  303. end
  304. # 論理座標が実座標より上の場合
  305. if @y * 128 < @real_y
  306. # 上に移動
  307. @real_y = [@real_y - distance, @y * 128].max
  308. end
  309. end
  310. # 移動時アニメが ON の場合
  311. if @walk_anime
  312. # アニメカウントを 1.5 増やす
  313. @anime_count += 1.5
  314. # 移動時アニメが OFF で、停止時アニメが ON の場合
  315. elsif @step_anime
  316. # アニメカウントを 1 増やす
  317. @anime_count += 1
  318. end
  319. end
  320. #--------------------------------------------------------------------------
  321. # ● ドット移動(追加)
  322. # dir : 方向(0,2,4,6,8)
  323. #--------------------------------------------------------------------------
  324. def dot_move(dir)
  325. @dot_moving = dir
  326. # 立ち止まっているかドット移動中でないならすぐにリターン
  327. if dir == 0 or !dir
  328. return
  329. end
  330. # 座標の保存
  331. last_real_x, last_real_y = @real_x, @real_y
  332. last_x, last_y = @x, @y
  333. # 移動速度からマップ座標系での移動距離に変換
  334. distance = 2 ** @move_speed
  335. # 座標を更新、進行方向側の二隅の座標を得る
  336. case dir
  337. when 2
  338. turn_down
  339. @real_y += distance
  340. dx, dy = 0, 1
  341. x1, y1 = @real_x + LEFT_SPACE, @real_y + 127 - BOTTOM_SPACE
  342. x2, y2 = @real_x + 127 - RIGHT_SPACE, y1
  343. when 4
  344. turn_left
  345. @real_x -= distance
  346. dx, dy = -1, 0
  347. x1, y1 = @real_x + LEFT_SPACE, @real_y + TOP_SPACE
  348. x2, y2 = x1, @real_y + 127 - BOTTOM_SPACE
  349. when 6
  350. turn_right
  351. @real_x += distance
  352. dx, dy = 1, 0
  353. x1, y1 = @real_x + 127 - RIGHT_SPACE, @real_y + TOP_SPACE
  354. x2, y2 = x1, @real_y + 127 - BOTTOM_SPACE
  355. when 8
  356. turn_up
  357. @real_y -= distance
  358. dx, dy = 0, -1
  359. x1, y1 = @real_x + LEFT_SPACE, @real_y + TOP_SPACE
  360. x2, y2 = @real_x + 127 - RIGHT_SPACE, y1
  361. end
  362. # 二隅がいずれもキャラクタの論理座標からはみ出している場合
  363. if (x1 / 128 != @x or y1 / 128 != @y) and (x2 / 128 != @x or y2 / 128 != @y)
  364. # 進行方向の二隅がともに通行可能か調べる
  365. @x, @y = x1 / 128 - dx, y1 / 128 - dy
  366. pass1 = passable?(@x, @y, dir)
  367. @x, @y = x2 / 128 - dx, y2 / 128 - dy
  368. pass2 = passable?(@x, @y, dir)
  369. # 座標を元に戻す
  370. @x, @y = last_x, last_y
  371. # 通行可能な場合
  372. if pass1 and pass2
  373. # 新しい実座標の計算
  374. @x, @y = (@real_x + 64) / 128, (@real_y + 64) / 128
  375. # 座標が変化したなら歩数更新
  376. if last_x != @x or last_y != @y
  377. increase_steps
  378. end
  379. # 通行不可能な場合
  380. else
  381. # 立ち止まる
  382. @dot_moving = 0
  383. # 実座標を矯正する
  384. case dir
  385. when 2
  386. @real_y = [(last_real_y + 64) / 128 * 128, last_real_y].max
  387. # 右側に寄っているとき
  388. if @real_x / 128 < @x
  389. # 右のイベントを先に処理
  390. x1, x2 = x2, x1
  391. end
  392. when 4
  393. @real_x = [(last_real_x + 64) / 128 * 128, last_real_x].min
  394. # 下側に寄っているとき
  395. if @real_y / 128 < @y
  396. # 下のイベントを先に処理
  397. y1, y2 = y2, y1
  398. end
  399. when 6
  400. @real_x = [(last_real_x + 64) / 128 * 128, last_real_x].max
  401. # 下側に寄っているとき
  402. if @real_y / 128 < @y
  403. # 下のイベントを先に処理
  404. y1, y2 = y2, y1
  405. end
  406. when 8
  407. @real_y = [(last_real_y + 64) / 128 * 128, last_real_y].min
  408. # 右側に寄っているとき
  409. if @real_x / 128 < @x
  410. # 右のイベントを先に処理
  411. x1, x2 = x2, x1
  412. end
  413. end
  414. # 接触イベントの起動判定(一つ起動したらもう一つは無視)
  415. check_event_trigger_touch(x1 / 128, y1 / 128) or
  416. check_event_trigger_touch(x2 / 128, y2 / 128)
  417. end
  418. end
  419. end
  420. end
  421. class Scene_Map
  422. def update
  423. # ループ
  424. loop do
  425. # マップ、インタプリタ、プレイヤーの順に更新
  426. # (この更新順序は、イベントを実行する条件が満たされているときに
  427. # プレイヤーに一瞬移動する機会を与えないなどの理由で重要)
  428. $game_map.update
  429. $game_system.map_interpreter.update
  430. $game_player.update
  431. # システム (タイマー)、画面を更新
  432. $game_system.update
  433. $game_screen.update
  434. # プレイヤーの場所移動中でなければループを中断
  435. unless $game_temp.player_transferring
  436. break
  437. end
  438. # 場所移動を実行
  439. transfer_player
  440. # トランジション処理中の場合、ループを中断
  441. if $game_temp.transition_processing
  442. break
  443. end
  444. end
  445. # スプライトセットを更新
  446. @spriteset.update
  447. # メッセージウィンドウを更新
  448. @message_window.update
  449. # ゲームオーバーの場合
  450. if $game_temp.gameover
  451. # ゲームオーバー画面に切り替え
  452. $scene = Scene_Gameover.new
  453. return
  454. end
  455. # タイトル画面に戻す場合
  456. if $game_temp.to_title
  457. # タイトル画面に切り替え
  458. $scene = Scene_Title.new
  459. return
  460. end
  461. # トランジション処理中の場合
  462. if $game_temp.transition_processing
  463. # トランジション処理中フラグをクリア
  464. $game_temp.transition_processing = false
  465. # トランジション実行
  466. if $game_temp.transition_name == ""
  467. Graphics.transition(20)
  468. else
  469. Graphics.transition(40, "Graphics/Transitions/" +
  470. $game_temp.transition_name)
  471. end
  472. end
  473. # メッセージウィンドウ表示中の場合
  474. if $game_temp.message_window_showing
  475. return
  476. end
  477. # エンカウント カウントが 0 で、エンカウントリストが空ではない場合
  478. if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  479. # イベント実行中かエンカウント禁止中でなければ
  480. unless $game_system.map_interpreter.running? or
  481. $game_system.encounter_disabled
  482. # トループを決定
  483. n = rand($game_map.encounter_list.size)
  484. troop_id = $game_map.encounter_list[n]
  485. # トループが有効なら
  486. if $data_troops[troop_id] != nil
  487. # バトル呼び出しフラグをセット
  488. $game_temp.battle_calling = true
  489. $game_temp.battle_troop_id = troop_id
  490. $game_temp.battle_can_escape = true
  491. $game_temp.battle_can_lose = false
  492. $game_temp.battle_proc = nil
  493. end
  494. end
  495. end
  496. # B ボタンが押された場合
  497. if Input.trigger?(Input::B)
  498. # イベント実行中かメニュー禁止中でなければ
  499. unless $game_system.map_interpreter.running? or
  500. $game_system.menu_disabled
  501. # メニュー呼び出しフラグと SE 演奏フラグをセット
  502. $game_temp.menu_calling = true
  503. $game_temp.menu_beep = true
  504. end
  505. end
  506. # デバッグモードが ON かつ F9 キーが押されている場合
  507. if $DEBUG and Input.press?(Input::F9)
  508. # デバッグ呼び出しフラグをセット
  509. $game_temp.debug_calling = true
  510. end
  511. # ドット移動中でなくプレイヤーの移動中である場合を除き
  512. unless !$game_player.dot_moving and $game_player.moving?
  513. # 各種画面の呼び出しを実行
  514. if $game_temp.battle_calling
  515. call_battle
  516. elsif $game_temp.shop_calling
  517. call_shop
  518. elsif $game_temp.name_calling
  519. call_name
  520. elsif $game_temp.menu_calling
  521. call_menu
  522. elsif $game_temp.save_calling
  523. call_save
  524. elsif $game_temp.debug_calling
  525. call_debug
  526. end
  527. end
  528. end
  529. end
复制代码
回复 支持 反对

使用道具 举报

Lv2.观梦者

沉默的羔狼

梦石
0
星屑
322
在线时间
77 小时
注册时间
2005-10-23
帖子
3534
8
 楼主| 发表于 2009-10-7 19:18:17 | 只看该作者
多谢,但不知道怎么改
★graykid的素材王国★除了现实,我们应该还有一个诗意的世界!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

永久的旅行者

梦石
1
星屑
110
在线时间
404 小时
注册时间
2006-12-13
帖子
3091

开拓者贵宾第3届短篇游戏大赛主流游戏组季军第5届短篇游戏比赛季军

9
发表于 2009-10-9 11:06:54 | 只看该作者
多谢,但不知道怎么改
graykid 发表于 2009-10-7 19:18

把脚本直接插入脚本编辑器,main上面即可...
不过受影响的只是主角,而且是只限于玩家的控制下才有效果...
(就是说事件设置的移动指令还是默认的32像素...)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-2 02:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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