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

Project1

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

[已经解决] 关于按键跳跃系统如何在对话等事件中不能执行?

 关闭 [复制链接]

Lv2.观梦者

梦石
0
星屑
354
在线时间
1036 小时
注册时间
2011-5-19
帖子
2098
跳转到指定楼层
1
发表于 2011-8-3 17:56:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 MSQ 于 2011-8-3 19:26 编辑

我加入了DeathKing大大的按键跳跃系统,但在有关对话一类的事件中,只要按了跳跃键,主角就一直跳……
  不知有哪位大大帮帮忙,我真的很想要加入按键跳跃系统。
  以下是脚本:
  1. #==============================================================================

  2. # ■ [VX] 按键跳跃

  3. #    [VX] Jump Skill

  4. #------------------------------------------------------------------------------

  5. #   让角色拥有跳跃的能力,这个功能类似于《暗黑破坏神II》中野蛮人的技能。

  6. #    这个脚本是友好的,在作者公开的白皮书下,你可以实现很多效果!

  7. #

  8. #    当玩家按下键时,主角就会执行跳跃,根据配置的不同,可以做出“跳跃技能”

  9. #    为生活技能的效果。

  10. #

  11. #------------------------------------------------------------------------------

  12. #    更新作者: DeathKing

  13. #    许可协议: FSL

  14. #    项目版本: 1.1.0107

  15. #    最后更新: 2011-01-07

  16. #    引用网址:

  17. #------------------------------------------------------------------------------

  18. #    - 1.1.0107 By DeathKing

  19. #      * 整理配置模块;

  20. #      * 优化算法,使他运行更为流畅;

  21. #

  22. #    - 1.0.0613 By DeathKing

  23. #      * 初始版本完成;

  24. #

  25. #==============================================================================



  26. #------------------------------------------------------------------------------

  27. # ▼ 登记FSL

  28. #------------------------------------------------------------------------------

  29. $fscript = {} if $fscript == nil

  30. $fscript["JumpSkill"] = "1.1.0107"



  31. #------------------------------------------------------------------------------

  32. # ▼ 通用配置模块

  33. #------------------------------------------------------------------------------

  34. #  在游戏中你可以修改这些常量!

  35. #  记得使用::解析域!

  36. #  FSL::JumpSkill::常量 = ***

  37. #------------------------------------------------------------------------------

  38. module FSL

  39.   module JumpSkill

  40.      

  41.     # 允许跳跃,当这个为false时则不允许跳跃

  42.     JUMP_ALLOWED = true

  43.     # 每次跳跃的距离

  44.     JUMP_LENGTH = 2

  45.     # 跳跃对应按键,可以配合全键盘脚本使用

  46.     JUMP_BUTTON = Input::Z

  47.       

  48.     # 如果这个id不为0的话,只有在制定id的角色在

  49.     # 队伍中且MP足够、会跳跃技能才可施放。

  50.     # 如果JUMP_SKILL_ID为0,则指需要满足指定角色

  51.     # 在队伍中

  52.       

  53.     # 跳跃技能对应主角编号

  54.     JUMP_ACTOR_ID = 0

  55.     # 跳跃技能对应编号,一个开关属性,

  56.     # 要求跳跃技能对应主角习得此技能才可跳跃

  57.     JUMP_SKILL_ID = 0

  58.     # 每次跳跃消耗的MP

  59.     JUMP_COST_MP  = 1

  60.       

  61.     # 如果不想听见烦人的音乐,请让他等于一个空字符串

  62.     # 一个SE文件示范:"Audio/SE/Jump1"

  63.       

  64.     # 跳跃技能SE音效文件名(可跳跃的场合)

  65.     JUMP_ABLE_SE       = ""  #"Audio/SE/Jump1"

  66.     # 跳跃技能SE音效文件名(不可跳跃的场合)

  67.     JUMP_DISABLE_SE    = ""  #"Audio/SE/Buzzer1"

  68.       

  69.   end # JumpSkill

  70. end # FSL



  71. #==============================================================================

  72. # ■ Game_Player

  73. #------------------------------------------------------------------------------

  74. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。

  75. # 本类的实例请参考 $game_player。

  76. #==============================================================================



  77. class Game_Player < Game_Character

  78.    

  79.   include FSL::JumpSkill

  80.    

  81.   alias jump_skill_update update

  82.    

  83.   #---------------------------------------------------------------------------

  84.   # ● 刷新画面

  85.   #---------------------------------------------------------------------------

  86.   def update

  87.     jump_by_input

  88.     jump_skill_update

  89.   end

  90.   #---------------------------------------------------------------------------

  91.   # ● 是否按下跳跃键

  92.   #---------------------------------------------------------------------------

  93.   def jump_by_input

  94.     # 判断是否按下了跳跃键

  95.     return false unless Input.trigger?( JUMP_BUTTON )

  96.     # 判断是否可跳跃

  97.     if jumpable?

  98.       # 是的话就执行跳跃

  99.       # 播放跳跃SE

  100.       Audio.se_play( JUMP_ABLE_SE ) if JUMP_ABLE_SE != ""

  101.       # 扣除MP

  102.       unless JUMP_ACTOR_ID == 0

  103.         $game_actors[JUMP_ACTOR_ID].mp -= JUMP_COST_MP

  104.       end

  105.       # 执行跳跃

  106.       sjump

  107.       return true

  108.     else

  109.       # 否的话就播放无法跳跃的音效

  110.       Audio.se_play( JUMP_DISABLE_SE ) if JUMP_DISABLE_SE != ""

  111.       return false

  112.     end

  113.   end

  114.   #---------------------------------------------------------------------------

  115.   # ● 是否可跳跃

  116.   #---------------------------------------------------------------------------

  117.   #     此方法不会检查跳跃目的地是否可以通行,关于跳跃目的地是否可以通行,

  118.   #     是由sjump方法完成的。

  119.   #---------------------------------------------------------------------------

  120.   def jumpable?

  121.     # 不允许跳跃就返回false

  122.     return false unless JUMP_ALLOWED

  123.     jump_skill_actor = $game_actors[JUMP_ACTOR_ID]

  124.     jump_skill = $data_skills[JUMP_SKILL_ID]

  125.     # 获得主角是否有跳跃技能

  126.     unless JUMP_ACTOR_ID == 0

  127.       unless JUMP_SKILL_ID == 0

  128.         # 如果角色不在队伍中就无法使用

  129.         unless $game_party.members.include?( jump_skill_actor )

  130.           return false

  131.         else

  132.           # 如果指定角色不会改技能就无法使用

  133.           return false unless jump_skill_actor.skill_learn?( jump_skill )

  134.           # 如果角色的MP不够就无法使用

  135.           return false unless jump_skill_actor.mp >= JUMP_COST_MP

  136.           return true

  137.         end

  138.       else

  139.         return true

  140.       end

  141.     else

  142.       return true

  143.     end

  144.   end

  145.   #---------------------------------------------------------------------------

  146.   # ● 超级跳跃

  147.   #     x_plus : X 座标增值

  148.   #     y_plus : Y 座标增值

  149.   #---------------------------------------------------------------------------

  150.   #     此跳跃可以搜寻跳跃能力内的最大跳跃限度,遗憾的是,这个只能搜寻一条

  151.   #     直线。

  152.   #---------------------------------------------------------------------------

  153.   def sjump

  154.     # 数据初始化

  155.     x_plus = y_plus = 0

  156.     # 获得主角朝向,使用逆推搜寻

  157.     case @direction

  158.     when 2

  159.       JUMP_LENGTH.downto(1) do |i|

  160.         if passable?( x , y + i )

  161.           x_plus, y_plus = 0, i

  162.           break

  163.         end

  164.       end

  165.     when 4

  166.       JUMP_LENGTH.downto(1) do |i|

  167.         if passable?( x - i , y )

  168.           x_plus, y_plus = -i, 0

  169.           break

  170.         end

  171.       end

  172.     when 6

  173.       JUMP_LENGTH.downto(1) do |i|

  174.         if passable?( x + i , y )

  175.           x_plus, y_plus = i, 0

  176.           break

  177.         end

  178.       end

  179.     when 8

  180.       JUMP_LENGTH.downto(1) do |i|

  181.         if passable?( x , y - i )

  182.           x_plus, y_plus = 0, -i

  183.           break

  184.         end

  185.       end

  186.     end # case @direction

  187.     if x_plus.abs > y_plus.abs            # 横向距离较大

  188.       x_plus < 0 ? turn_left : turn_right

  189.     elsif x_plus.abs > y_plus.abs         # 纵向距离较大

  190.       y_plus < 0 ? turn_up : turn_down

  191.     end

  192.     @x += x_plus

  193.     @y += y_plus

  194.     distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round

  195.     @jump_peak = 10 - @move_speed + distance

  196.     @jump_count = @jump_peak * 2

  197.     @stop_count = 0

  198.     straighten

  199.   end

  200. end
复制代码
谢谢各位了。{:nm_4:}  

Lv1.梦旅人

梦石
0
星屑
48
在线时间
678 小时
注册时间
2010-8-11
帖子
1533
2
发表于 2011-8-3 19:42:27 | 只看该作者
用公共事件不就行了= =||
这个……跳跃系统不需要特地做一个脚本= =
-当xx开关开启时,
--按住xx键时
---4方向分歧
----跳!
懂了不=w=(谁看得懂啊= =)

点评

MSQ
哎~~~一个人都没有,我都心碎了~~~就认可吧,我都自费了100经验了(谁稀罕!),感谢参与,我运用事件又更加熟练了的说~~~=w=~~表示经验不能浪费。  发表于 2011-8-5 10:28
MSQ
除非一开始就告诉玩家:在对话时禁止按跟跳跃有关的键………………  发表于 2011-8-4 02:12
MSQ
所以我表示压力很大的说~~本来还以为按键跳跃系统和队员跟随脚本有冲突,结果现在好像根本不能用……ORZ。  发表于 2011-8-4 02:11
MSQ
工程太大,压缩后30多mb,无法上传。  发表于 2011-8-4 01:06
MSQ
。。。。。。我的工程还没脱离vx。。。。。。素材还没全加上。。。。。能行吧?算了,我先把素材加上,等会再放上来。。。。。。  发表于 2011-8-3 21:45
小艾工作室开张= =
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
354
在线时间
1036 小时
注册时间
2011-5-19
帖子
2098
3
 楼主| 发表于 2011-8-3 19:49:28 | 只看该作者
RPGmaster 发表于 2011-8-3 19:42
用公共事件不就行了= =||
这个……跳跃系统不需要特地做一个脚本= =
-当xx开关开启时,

呃~~我平常还自命事件党,结果这下出丑了,谢谢。我先试试,成功后再结账。

点评

真的耶=A=肿么办  发表于 2011-8-4 01:19
那么我发工程好了……等等……  发表于 2011-8-4 01:12
上工程吧= =  发表于 2011-8-3 21:42
可能性1:没去掉那个脚本 可能性2:没有设定按钮 可能性3:那个NPC触动方式为“接触” 可能性4:在对话有不等待或等待 可能性5:请给工程= =  发表于 2011-8-3 20:46
我擦,先让一个开关打开,在公共事件里用“并行处理”开关是之前开的开关 试试看  发表于 2011-8-3 20:14
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-11 02:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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