Project1

标题: 用事件或者脚本控制地图中 待机 移动 跑动(高速跑动) [打印本页]

作者: 89444640    时间: 2016-9-23 12:43
标题: 用事件或者脚本控制地图中 待机 移动 跑动(高速跑动)
本帖最后由 89444640 于 2016-10-15 11:30 编辑

更新一下测试工程,阿尔西斯是控制事件,在重力脚本存在于脚本存在于脚本库时,用事件控制显示角色停止时动画都不能。删掉即可正常显示角色停止时动画。
[attach]316529[/attach]



高速跑动这个可以先不考虑

首先MeowSnow同学提出了
Input.press?(Input::LEFT) or Input.press?(Input::RIGHT) or Input.press?(Input::UP) or Input.press?(Input::DOWN)
来控制角色待机与行走的状态。
试了一下效果不错。
但是仅限于只有待机与走动两种状态

如果需要有三种甚至更多的移动状态,那就无法用条件分歧判断了。
目前想法是,在一些地图上 有 待机 走动 慢速跑动 高速跑动四种类状态,因为不是act,暂不考虑走与跑的过渡、高速跑动这些不好实现的问题。
如何实现最低 三种状态 待机 走动 跑动

跑动是按空格键加速的脚本。
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Game_Player
  3. #==============================================================================
  4. class Game_Player
  5. #--------------------------------------------------------------------------
  6. # ● フレーム更新
  7. #--------------------------------------------------------------------------
  8. alias xrxs25_update update
  9. def update
  10.    # 移動中、イベント実行中、移動ルート強制中、
  11.    # メッセージウィンドウ表示中のいずれでもない場合
  12.    unless moving? or $game_system.map_interpreter.running? or
  13.           @move_route_forcing or $game_temp.message_window_showing
  14.      if Input.press?(Input::C)
  15.        # 速度の変更
  16.        @move_speed = 5
  17.      else
  18.        @move_speed = 4
  19.      end
  20.    end
  21.    # 呼び戻す
  22.    xrxs25_update
  23. end
  24. end




无法用并行处理现实的,是重力ACT脚本的地图,
需要在ACT脚本用的地图中,可以实现待机 走 跑三种状态。因为只有一个角色,可以用脚本来控制角色图像。
这个脚本多少有点干扰正常rpg剧情,必须手动剧情结束后删,这个我没辙。

普通地图角色经常更改,因此需要在普通地图中,以单独使用事件,来控制待机、走、跑三种状态。
1当角色不移动时,判断角色当前朝向,更改成相应方向待机。
2当角色慢速移动时,更改为行走动作
3当角色按空格键加速时,更改为小幅度跑动。

重力脚本
见10楼 原来的发错了orz
RUBY 代码复制
  1.  

压缩文件中是ACT脚本中用到的素材。暂防一下注册就能下走的人,我手找,万一有漏的--b,请叫我补一下。
行走,跑动,待机三个图像都在里面。待机未调整完成,暂且用这个。


请各位帮忙,非常感谢。
作者: soulsaga    时间: 2016-9-23 12:43
RUBY 代码复制
  1. # A ボタンが押された場合
  2.     if Input.press?(Input::A) and not $ud_ok
  3.       @twojump = 1 if @twojump == 0 and down1(((@x * 128 + @revise_x) / 128.0).round,
  4.       ((@y * 128 + @revise_y) / 128.0).round, 5, true)
  5.       if (not @apassed) and @twojump <= $airjump
  6.         @apassed = true
  7.         @jumpnow = JUMPMAX
  8.         se_name = @twojump == 1 ? "ACT 跳02.wav" : "ACT 跳01.wav"
  9.         Audio.se_play("Audio/SE/#{se_name}")
  10.         @twojump += 1
  11.       else
  12.         @jumpnow += 3        
  13.       end
  14.     else
  15.       @apassed = false
  16.     end
  17. #----------------------自由落体--------------------------------
  18. if not $ud_ok
  19.       @jumpnow -= 10
  20.       if @jumpnow < 0
  21.         $game_variables[1] = @jumpnow
  22.         #$game_switches[1] = true
  23.         @character_name = "主角ACT12下落" if $game_switches[1] != true
  24.         @jumpnow = [@jumpnow, -JUMPMAX].max
  25.         if not down1(((@x * 128 + @revise_x) / 128.0).round,
  26.           ((@y * 128 + @revise_y) / 128.0).round, -@jumpnow, true)
  27.           @jumpnow = 0
  28.           @twojump = 0
  29.           @character_name = "主角 行走 长袖" if $game_switches[1] != true
  30.           #$game_switches[1] = false
  31.         end
  32.       elsif @jumpnow > 0
  33.         @character_name = @twojump == 1 ? "主角 ACT用跳跃" : "主角ACT11两段跳"
  34.         @jumpnow = [@jumpnow, JUMPMAX].min
  35.         if not up1(((@x * 128 + @revise_x) / 128.0).round,
  36.           ((@y * 128 + @revise_y) / 128.0).round, @jumpnow, true)
  37.           @jumpnow = 0
  38.         end
  39.       end
  40.     end

作者: soulsaga    时间: 2016-9-23 13:16
本帖最后由 soulsaga 于 2016-9-23 13:18 编辑

要事件能控制3种行走类型?
作者: yang1zhi    时间: 2016-9-23 13:21
XAS里面有跑步,你可以看看
作者: 89444640    时间: 2016-9-23 13:42
yang1zhi 发表于 2016-9-23 13:21
XAS里面有跑步,你可以看看

半天找到个xp的还过过期了- -b继续找……
作者: 89444640    时间: 2016-9-23 13:59
89444640 发表于 2016-9-23 13:42
半天找到个xp的还过过期了- -b继续找……

看到了关于冲刺图像的描述
#--------------------------------------------------------------------------
# 主角冲刺方位图像?
#--------------------------------------------------------------------------
  def hero_dash_quarter_graphic?(actor)
    if moving?
    RPG::Cache.character(actor.character_name.to_s + "_dash_quarter", actor.character_hue) rescue return false
    end
  end
  
#--------------------------------------------------------------------------
# 主角方位图像?
#--------------------------------------------------------------------------
  def hero_quarter_graphic?(actor)
    RPG::Cache.character(actor.character_name.to_s + "_quarter", actor.character_hue) rescue return false
  end

#--------------------------------------------------------------------------
# 主角更换图像?
#--------------------------------------------------------------------------
  def hero_charge_graphic?(actor)
   nome = Database_Bullet::SELF_MOTIONS[@wp_tool_id]  
   RPG::Cache.character(actor.character_name + nome.to_s + "_Charge", actor.character_hue) rescue return false
  end
但是完全不会弄orz
好像还需要判断角色在地面而不在空中冲刺时才更改为跑动图像。
脚本盲没辙啊--b
作者: MeowSnow    时间: 2016-9-23 14:02
本帖最后由 MeowSnow 于 2016-9-23 14:04 编辑

_(:з」∠)_可以继续用纯事件完成啊~把条件分歧套两次就好了,
如果按下方向键
    如果按下空格键——速度=5,切换跑步行走图
    不满足按下空格键——速度=4,切换走路行走图
不满足按下方向键——切换待机行走图
   
作者: 89444640    时间: 2016-9-23 14:14
本帖最后由 89444640 于 2016-9-23 14:19 编辑
MeowSnow 发表于 2016-9-23 14:02
_(:з」∠)_可以继续用纯事件完成啊~把条件分歧套两次就好了,
如果按下方向键
    如果按下空格键——速度 ...


普通脚本中套成这样就能用了。


虽然会有个,按着空格和方向的时候,碰到障碍物就静止在跑步的某一个动作上orz
但是开了重力脚本的地图我就 - -b
作者: soulsaga    时间: 2016-10-8 14:41
本帖最后由 soulsaga 于 2016-10-8 15:41 编辑

这么久了还没有大神帮忙解決么..

话说很难理解呢..在重力脚地图用上面的事件会出现什么情況?
或且说在重力脚本地图对话时角色图像是怎样的情況?
是速度改变无效还是图像改变无效?

  1. $ud_ok = true #上下失效
  2. $airjump = 1  #空中连跳
  3. #用插入脚本暂时来消除重力系统bug,就是这个 $ud_ok = true/false
  4. #==============================================================================
  5. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  6. #==============================================================================

  7. # ————————————————————————————————————
  8. # 全方向ドット移動 Ver ε
  9. # 配布元・サポートURL
  10. # [url]http://members.jcom.home.ne.jp/cogwheel/[/url]

  11. #==============================================================================
  12. # ■ Game_Player
  13. #------------------------------------------------------------------------------
  14. #  プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
  15. # 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
  16. #==============================================================================
  17. class Game_Player < Game_Character
  18.   #--------------------------------------------------------------------------
  19.   # ● 定数
  20.   #--------------------------------------------------------------------------
  21.   UP    = 48                  # 上方向の余裕(0 < UP < 63)
  22.   DOWN  = -5                  # 这个是垂直方向微调 下方向の余裕(0 < DOWN <63)
  23.   SIDE  = 32                  # 左右方向の余裕(0 < SIDE <63)
  24.   SLANT = false               # 移動ルートの斜め移動時、速度修正
  25.   JUMPMAX = 100              
  26.   JUMPADD = 10              
  27.   #--------------------------------------------------------------------------
  28.   # ● 公開インスタンス変数
  29.   #--------------------------------------------------------------------------
  30.   attr_reader   :event                    # イベント時移動速度
  31.   attr_accessor :move_speed               # 移動速度
  32.   #--------------------------------------------------------------------------
  33.   # ● フレーム更新
  34.   #--------------------------------------------------------------------------
  35.   alias :update_original :update
  36.   def update
  37.     @data_count -= 1 if @data_count and @data_count > 0
  38.     # @walk:歩行速度 @dash:ダッシュ時移動速度
  39.     # @event:イベント時移動速度(0の時は、イベント時に速度変更をしない)
  40.     [url=home.php?mod=space&uid=348285]@walk[/url]  = 4
  41.     [url=home.php?mod=space&uid=81012]@Dash[/url]  = 5
  42.     @event = 4
  43.     @event = 5 if $game_variables[88] == 1 #88号变量为判断是否事件移动速度是否跑动
  44.     #==============================================================================
  45. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  46. #==============================================================================
复制代码

作者: soulsaga    时间: 2016-10-10 20:16
本帖最后由 soulsaga 于 2016-10-10 20:53 编辑

不知为何我测试没问题呢..
作者: 89444640    时间: 2016-10-12 10:04
本帖最后由 89444640 于 2016-10-12 10:12 编辑
soulsaga 发表于 2016-10-10 20:16
不知为何我测试没问题呢..


是不是回档了?刚才我的回复不见了。
更新一楼测试工程。当重力脚本只要存在于脚本库中,就会出现问题。
当重力脚本打开的时候,就无法用事件来控制角色待机图像了。因为这个脚本对正常rpg运行影响实在太大,在脚本存在时,rpg地图经常会出现走入墙内的状态,非常难受。
简直无可救药。
作者: soulsaga    时间: 2016-10-12 14:56
本帖最后由 soulsaga 于 2016-10-12 15:50 编辑

我已经找出问题所在了.
RUBY 代码复制
  1. if not $ud_ok
  2.       @jumpnow -= 10
  3.       if @jumpnow < 0
  4.         @character_name = "主角ACT12下落"
  5.         @jumpnow = [@jumpnow, -JUMPMAX].max
  6.         if not down1(((@x * 128 + @revise_x) / 128.0).round,
  7.           ((@y * 128 + @revise_y) / 128.0).round, -@jumpnow, true)
  8.           @jumpnow = 0
  9.           @twojump = 0
  10.           @character_name = "主角 行走 长袖"


注译了第4行和第10行就可以正常替换行走图了..那看来是因为这里强制替换了图像的原因跟事件的替换行走图起冲突了吧

最后改成这杽亲测能通过..
RUBY 代码复制
  1. #-----------------------按跳跃-----------------------------------------------
  2. # A ボタンが押された場合
  3.     if Input.press?(Input::A) and not $ud_ok
  4.       $game_switches[1] = true
  5.       @twojump = 1 if @twojump == 0 and down1(((@x * 128 + @revise_x) / 128.0).round,
  6.       ((@y * 128 + @revise_y) / 128.0).round, 5, true)
  7.       if (not @apassed) and @twojump <= $airjump
  8.         @apassed = true
  9.         @jumpnow = JUMPMAX
  10.         se_name = @twojump == 1 ? "ACT 跳02.wav" : "ACT 跳01.wav"
  11.         Audio.se_play("Audio/SE/#{se_name}")
  12.         @twojump += 1
  13.       else
  14.         @jumpnow += 3        
  15.       end
  16.     else
  17.       @apassed = false
  18.     end
  19. #----------------------自由落体--------------------------------
  20.     if not $ud_ok and $game_switches[1] == true
  21.       @jumpnow -= 10
  22.       if @jumpnow < 0
  23.         @character_name = "主角ACT12下落"
  24.         @jumpnow = [@jumpnow, -JUMPMAX].max
  25.         if not down1(((@x * 128 + @revise_x) / 128.0).round,
  26.           ((@y * 128 + @revise_y) / 128.0).round, -@jumpnow, true)
  27.           @jumpnow = 0
  28.           @twojump = 0
  29.           @character_name = "主角 行走 长袖"
  30.           $game_switches[1] = false
  31.         end
  32.       elsif @jumpnow > 0
  33.         @character_name = @twojump == 1 ? "主角 ACT用跳跃" : "主角ACT11两段跳"
  34.         @jumpnow = [@jumpnow, JUMPMAX].min
  35.         if not up1(((@x * 128 + @revise_x) / 128.0).round,
  36.           ((@y * 128 + @revise_y) / 128.0).round, @jumpnow, true)
  37.           @jumpnow = 0
  38.         end
  39.       end
  40.     end

主要是加了开关和判断..
另外开头这些设置
  # ● 定数
  #--------------------------------------------------------------------------
  UP    = 16                  # 上方向の余裕(0 < UP < 63)
  DOWN  = -5                  # 这个是垂直方向微调 下方向の余裕(0 < DOWN <63)
  SIDE  = 32                  # 左右方向の余裕(0 < SIDE <63)

左右设成0的话..就不会陷入墙壁内了..


作者: 89444640    时间: 2016-10-13 07:59
本帖最后由 89444640 于 2016-10-13 09:53 编辑
soulsaga 发表于 2016-10-12 14:56
我已经找出问题所在了.
    if not $ud_ok
      @jumpnow -= 10


谢谢,我测试一下~
请问是需要把game_switches[1] 这里的开关改成自己需要的开关并且,打开 才会使重力脚本生效吗?还是自动运行?

那个上下左右我改过,改成0经常会出现人物悬空因为图块横版,画的是底边禁止通行如果想不悬空必须得有少量地面的透视,绘制起来很困难。
而且我以前试过,如果设定成0,rpg模式是没问题了,但是在act模式下,一些本来可以跳上去的平台,就跳不上去了,而且如果是站里点位一格的情况,跳上去非常困难,非常难以瞄准,而且手感极硬。
无解了。

然后 这种设定情况有致命bug。可以试一下,
无论当前地图有无并行处理的更改角色图像脚本,
跳上平台后,如果在平台边缘不按其他键只按方向键,会一直走下去。而不会下落,这个bug对横版act极其致命。

在两段跳的时候会直接跳出第二段。

原脚本的情况是在边缘通行为 “可”的时候,人物会自动下落,直到站立到另外一个通行为“否”的图块上为止。

估计这个不好解决了。智能化一条直线线没平台的地图看霞效果,平时走还得用普通的行走图。
作者: soulsaga    时间: 2016-10-13 13:14
本帖最后由 soulsaga 于 2016-10-13 13:31 编辑

总算解決了..
RUBY 代码复制
  1. if not $ud_ok
  2.       @jumpnow -= 10
  3.       if @jumpnow < 0
  4.         $game_variables[1] = @jumpnow
  5.         @character_name = "主角ACT12下落" if $game_switches[1] != true
  6.         @jumpnow = [@jumpnow, -JUMPMAX].max
  7.         if not down1(((@x * 128 + @revise_x) / 128.0).round,
  8.           ((@y * 128 + @revise_y) / 128.0).round, -@jumpnow, true)
  9.           @jumpnow = 0
  10.           @twojump = 0
  11.           @character_name = "主角 行走 长袖" if $game_switches[1] != true
  12.         end
  13.       elsif @jumpnow > 0
  14.         @character_name = @twojump == 1 ? "主角 ACT用跳跃" : "主角ACT11两段跳"
  15.         @jumpnow = [@jumpnow, JUMPMAX].min
  16.         if not up1(((@x * 128 + @revise_x) / 128.0).round,
  17.           ((@y * 128 + @revise_y) / 128.0).round, @jumpnow, true)
  18.           @jumpnow = 0
  19.         end
  20.       end
  21.     end

然后事件设定如下图...

开关和变量编号都可以自行设定..除此以外的场合不需要..无视吧..
作者: 89444640    时间: 2016-10-13 16:19
本帖最后由 89444640 于 2016-10-13 16:49 编辑

[quote]soulsaga 发表于 2016-10-13 13:14
总算解決了..
能切换了,但是运行起来 ,下落的时候回强制运行并行处理事件,造成了本来应该头发飘动的下落图变成了
用待机或者行走护着跑动的图像下落--b


本来应该用这个图的

作者: 89444640    时间: 2016-10-15 10:36
本帖最后由 89444640 于 2016-10-15 10:54 编辑
soulsaga 发表于 2016-10-13 17:02
# A ボタンが押された場合
    if Input.press?(Input::A) and not $ud_ok
      @twojump = 1 if @twojump ...


普通平台没事 斜角楼梯有问题!
一旦地图关闭并行事件,斜角楼梯下落就会不刷新。这到底是什么地方干扰了

我开别的工程就没事。但是自己这地图就这德行。

终于找到毛病了 场景切换时候踩到了版边的与主角接触的事件然后处理就混乱了,平台跳跃有跑动干扰无比难跳。赶紧关上
我再多测试一会,应该能用了。




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