Project1

标题: 冰面怎么做? [打印本页]

作者: naruto2z    时间: 2013-3-20 12:24
标题: 冰面怎么做?
我想做一个冰面,怎么设置?
就是主角在这种地板上,只能向自己面向的方向滑行,直到撞到不能通行的物体或者离开地板才能改变方向,怎么做?
(举个例子:比如宠物小精灵里冰系会馆经常用的那种设置)
作者: 0newing    时间: 2013-3-20 12:45
我有个想法,不过貌似很耗也很麻烦……
就是用事件画地板,事件执行内容是主角向前移动,在墙(也就是你想停下的地方)处执行以下条件分歧……

作者: 瑕妹子    时间: 2013-3-20 12:50
在阁下十分熟悉条件分歧的使用的情况下,可以这么实现:
首先需要改动一点点脚本,以实现角色只能往单方向移动
在Game_Player下的309行到312行
  1.    when 2;  move_down
  2.     when 4;  move_left
  3.     when 6;  move_right
  4.     when 8;  move_up
复制代码
改为:
  1.     when 2;  
  2.       if $game_switches[1] == false  #若1号开关打开,无法向下移动,以下同理
  3.         move_down                    #开关的ID由阁下自己决定,不一定非要1-4号ID的开关
  4.       end
  5.     when 4;  
  6.       if $game_switches[2] == false
  7.         move_left
  8.       end
  9.     when 6;  
  10.       if $game_switches[3] == false
  11.         move_right
  12.       end
  13.     when 8;  
  14.       if $game_switches[4] == false
  15.         move_up
  16.       end
复制代码
这样就可以进行冰面移动路线的设置了。
举个例子,假如在某一个位置角色只能向左移动,那么就把1,3,4号开关打开即可。
而其实更多情况,还需对角色的朝向来进行判定。
由于过于麻烦,请阁下自行尝试。
作者: 119143201    时间: 2013-3-20 12:51
你 说的因该是跟重装机兵里打大象的那个镇子差不多的意思,人只能在冰面上滑行,遇到障碍物才能停止,
事件的话太过复杂,冰面大的话,用事件那工程就超大了,容我考虑一下。
作者: naruto2z    时间: 2013-3-20 17:09
0newing 发表于 2013-3-20 12:45
我有个想法,不过貌似很耗也很麻烦……
就是用事件画地板,事件执行内容是主角向前移动,在墙(也就是你想 ...

怎么用事件设置? 表示设置完后 撞墙了 角色没法拐歪了  怎么设置?
作者: naruto2z    时间: 2013-3-20 17:31
119143201 发表于 2013-3-20 12:51
你 说的因该是跟重装机兵里打大象的那个镇子差不多的意思,人只能在冰面上滑行,遇到障碍物才能停止,
事件 ...

咋个整法?
作者: 怪蜀黍    时间: 2013-3-20 18:42
本帖最后由 protosssonny 于 2013-3-21 11:04 编辑

教程:http://rpg.blue/thread-300206-1-1.html
范例: 冰面滑行系统.rar (240.74 KB, 下载次数: 81)
截图:
脚本:
RUBY 代码复制
  1. #==============================================================================
  2. # ★ 冰面滑动
  3. #------------------------------------------------------------------------------
  4. # 作者:protosssonny
  5. # 转载请保留脚本来源:[url]www.66RPG.com[/url]
  6. #--------------------------------------------------------------------------
  7. # 请在下面设定冰面图块的ID
  8.   Ice_Tile = [1537,1538,1539]
  9.  
  10. # 可以在事件脚本中输入以下命令来查看当前角色脚下的图块ID,以便确定冰面图块:
  11. #     $game_map.show_tile_id
  12. #==============================================================================
  13.  
  14. #==============================================================================
  15. # ■ Game_Map
  16. #------------------------------------------------------------------------------
  17. #  处理地图的类。包含卷动以及可以通行的判断功能。本类的实例请参考 $game_map 。
  18. #==============================================================================
  19.  
  20. class Game_Map  
  21.   #--------------------------------------------------------------------------
  22.   # ● 判断冰面
  23.   #     x : X 坐标
  24.   #     y : Y 坐标
  25.   #--------------------------------------------------------------------------
  26.   def ice?(x, y)
  27.     return false unless valid?(x, y)
  28.     return true if Ice_Tile.include?($game_map.data[x, y, 0])
  29.   end  
  30.   #--------------------------------------------------------------------------
  31.   # ● 显示当前图块ID (测试用的脚本命令)
  32.   #--------------------------------------------------------------------------
  33.   def show_tile_id
  34.     p $game_map.data[$game_player.x, $game_player.y, 0]
  35.   end  
  36. end  
  37. #==============================================================================
  38. # ■ Game_Player
  39. #------------------------------------------------------------------------------
  40. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  41. # 本类的实例请参考 $game_player。
  42. #==============================================================================
  43.  
  44. class Game_Player < Game_Character
  45.   #--------------------------------------------------------------------------
  46.   # ● 更新画面
  47.   #--------------------------------------------------------------------------
  48.   def update
  49.     last_real_x = @real_x
  50.     last_real_y = @real_y
  51.     last_moving = moving?
  52.     if $game_map.ice?(@x, @y) # 在冰上移动
  53.       @walk_anime = false
  54.       move_on_ice
  55.     else
  56.       @walk_anime = true
  57.     end  
  58.     move_by_input
  59.     super
  60.     update_scroll(last_real_x, last_real_y)
  61.     update_vehicle
  62.     update_nonmoving(last_moving)
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 方向键移动处理
  66.   #--------------------------------------------------------------------------
  67.   def move_on_ice
  68.     return unless movable?
  69.     return if $game_map.interpreter.running?
  70.     return if @move_failed
  71.     case self.direction
  72.     when 2
  73.       move_down
  74.     when 4
  75.       move_left
  76.     when 6
  77.       move_right
  78.     when 8
  79.       move_up
  80.     end
  81.   end
  82. end  
  83.   #--------------------------------------------------------------------------
  84.   # ● 判断是否奔跑中
  85.   #--------------------------------------------------------------------------
  86.   def dash?
  87.     return false if @move_route_forcing
  88.     return false if $game_map.disable_dash?
  89.     return false if in_vehicle?
  90.     return Input.press?(Input::A) unless $game_map.ice?(@x, @y) #加本行即可
  91.   end

作者: naruto2z    时间: 2013-3-20 22:42
protosssonny 发表于 2013-3-20 18:42
教程:http://rpg.blue/thread-300206-1-1.html
范例:
截图:

万分感谢~~~  感激不尽啊  这个问题折磨我一下午了  
作者: naruto2z    时间: 2013-3-20 23:21
protosssonny 发表于 2013-3-20 18:42
教程:http://rpg.blue/thread-300206-1-1.html
范例:
截图:

突然遇见一个问题  为什么我按住ctrl后 可以无视地形了? 直接从石头上跟滑冰一样就滑过去了 这是为什么啊? 不安ctrl就是该停停 该滑滑 按住ctrl就无视地形的滑了 这什么情况?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1