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

Project1

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

[已经解决] 为什么总是没有往复运动呢?移动战斗图脚本修改的问题

[复制链接]

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
跳转到指定楼层
1
发表于 2011-11-25 10:03:01 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 幻耶 于 2011-11-25 10:06 编辑

后知后觉的脚本,闪躲时会移动战斗图,我希望在命中时战斗图会左右左右左右震动一下,所以脚本126~145行是我添加的地方。但战斗时命中敌人只会左移一次,没有往复运动,请教解决方法!
  1. class Game_Battler
  2.   attr_accessor :add_x
  3.   attr_accessor :add_y
  4.   alias hzhj_old_ini initialize
  5.   def initialize
  6.     hzhj_old_ini
  7.     $shake = 0
  8.     @add_x = 0
  9.     @add_y = 0
  10.   end
  11. end
  12. class Sprite_Battler < RPG::Sprite
  13.   MoveSpeed = 18    # X 方向每次移动多少像素
  14.   MoveSpeed_Y = 16  # Y 方向每次移动多少像素
  15.   Jump_SE = RPG::AudioFile.new("016-Jump02", 100, 100)
  16.   
  17.   alias hzhj_old_initialize initialize
  18.   def initialize(*args)
  19.     hzhj_old_initialize(*args)
  20.     if not @battler.nil?
  21.       self.x = @battler.screen_x
  22.       self.y = @battler.screen_y
  23.       self.z = @battler.screen_y
  24.       @hzhj_play_jump = true
  25.     end
  26.     @hzhj_x = self.x
  27.     @hzhj_y = self.y
  28.   end
  29.   def battler=(value)
  30.     if @battler != value and value != nil
  31.       self.x = value.screen_x
  32.       self.y = value.screen_y
  33.       self.z = value.screen_y
  34.       @hzhj_play_jump = true
  35.     end
  36.     @hzhj_x = self.x
  37.     @hzhj_y = self.y
  38.     @battler = value
  39.   end
  40.   alias hzhj_old_update update
  41.   def update
  42.     if not @battler.nil? and not @battler.dead?
  43.       if self.x < @battler.screen_x + @battler.add_x
  44.         self.x = [self.x + MoveSpeed, @battler.screen_x + @battler.add_x].min
  45.       elsif self.x > @battler.screen_x + @battler.add_x
  46.         self.x = [self.x - MoveSpeed, @battler.screen_x + @battler.add_x].max
  47.       end
  48.       if self.y < @battler.screen_y + @battler.add_y
  49.         self.y = [self.y + MoveSpeed_Y, @battler.screen_y + @battler.add_y].min
  50.       elsif self.y > @battler.screen_y + @battler.add_y
  51.         self.y = [self.y - MoveSpeed_Y, @battler.screen_y + @battler.add_y].max
  52.       end
  53.       if self.x == @battler.screen_x and self.y == @battler.screen_y
  54.         @hzhj_play_jump = true
  55.       end
  56.     end
  57.     @hzhj_x = self.x
  58.     @hzhj_y = self.y
  59.     hzhj_old_update
  60.     self.x = @hzhj_x
  61.     self.y = @hzhj_y
  62.     self.z = @hzhj_y
  63.   end
  64.   def x
  65.     if @effect_hzhj
  66.       if @battler.nil?
  67.         return super
  68.       else
  69.         return @battler.screen_x
  70.       end
  71.     else
  72.       return super
  73.     end
  74.   end
  75.   def y
  76.     if @effect_hzhj
  77.       if @battler.nil?
  78.         return super
  79.       else
  80.         return @battler.screen_y
  81.       end
  82.     else
  83.       return super
  84.     end
  85.   end
  86.   def update_animation
  87.     @effect_hzhj = true
  88.     super
  89.     @effect_hzhj = false
  90.   end
  91.   def animation(*args)
  92.     @effect_hzhj = true
  93.     super(*args)
  94.     @effect_hzhj = false
  95.   end
  96.   def update_damage
  97.     @effect_hzhj = true
  98.     super
  99.     @effect_hzhj = false
  100.   end
  101.   def damage(*args)
  102.     @effect_hzhj = true
  103.     super(*args)
  104.     @effect_hzhj = false
  105.   end
  106. end
  107. class Scene_Battle
  108.   ACTOR_ADD_X = 64      # X 方向角色一共要移动的像素
  109.   ACTOR_ADD_Y = 48      # Y 方向角色一共要移动的像素
  110.   ENEMY_ADD_X = -64       # X 方向敌人一共要移动的像素
  111.   ENEMY_ADD_Y = -48       # Y 方向敌人一共要移动的像素
  112.   alias hzhj_old_update_phase4_step4 update_phase4_step4
  113.   def update_phase4_step4
  114.     hzhj_old_update_phase4_step4
  115.     for target in @target_battlers
  116.       next if target.dead?
  117.       if target.damage == "Miss"
  118.         if target.is_a?(Game_Actor)
  119.           target.add_x = ACTOR_ADD_X
  120.           target.add_y = ACTOR_ADD_Y
  121.         elsif target.is_a?(Game_Enemy)
  122.           target.add_x = ENEMY_ADD_X
  123.           target.add_y = ENEMY_ADD_Y
  124.         end
  125.       else
  126.         $shake += 1  # XXOO
  127.         case $shake
  128.         when 1..2
  129.           target.add_x -= 3
  130.         when 3..4
  131.           target.add_x += 6
  132.         when 5..6
  133.           target.add_x -= 6
  134.         when 7..8
  135.           target.add_x += 6
  136.         when 9..10
  137.           target.add_x -= 6
  138.         when 11..12
  139.           target.add_x += 6
  140.         when 13..14
  141.           target.add_x -= 6
  142.         when 15..16
  143.           target.add_x = 0
  144.         end
  145.         $shake = 0 if $shake == 16  # XXOO
  146.       end
  147.     end
  148.   end
  149.   alias hzhj_old_update_phase4_step5 update_phase4_step5
  150.   def update_phase4_step5
  151.     hzhj_old_update_phase4_step5
  152.     for target in @target_battlers
  153.       target.add_x = 0
  154.       target.add_y = 0
  155.     end
  156.   end
  157. end
复制代码
囡囚囨囚囨図囨囧

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
9
 楼主| 发表于 2011-11-30 13:20:57 | 只看该作者
两天了哦哦哦
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
44 小时
注册时间
2011-9-2
帖子
33
8
发表于 2011-11-28 09:35:11 | 只看该作者
顶一下顶一下
回复

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
7
 楼主| 发表于 2011-11-25 14:52:20 | 只看该作者
fux2 发表于 2011-11-25 14:44
那是你计算有问题= =,在你认为坐标改变的地方p一下坐标,看看变化。
并且这一句放在case结束后面就可以 ...

放在case结束后面也一样啊,class Scene_Battle这个类不能调用坐标target.x吧?所以只能用add_x这个增量
囡囚囨囚囨図囨囧
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42409
在线时间
7602 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

6
发表于 2011-11-25 14:44:19 | 只看该作者
幻耶 发表于 2011-11-25 14:39
这个样子啊?感觉还是老样子啊

那是你计算有问题= =,在你认为坐标改变的地方p一下坐标,看看变化。
并且这一句放在case结束后面就可以了,不用每句都写。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
5
 楼主| 发表于 2011-11-25 14:39:20 | 只看该作者
fux2 发表于 2011-11-25 14:18
坐标更高之后Graphics.update

这个样子啊?感觉还是老样子啊
  1.         $shake += 1  # XXOO
  2.         case $shake
  3.         when 1..2
  4.           target.add_x -= 3
  5.           Graphics.update
  6.         when 3..4
  7.           target.add_x += 6
  8.           Graphics.update
  9.         when 5..6
  10.           target.add_x -= 6
  11.           Graphics.update
  12.         when 7..8
  13.           target.add_x += 6
  14.           Graphics.update
  15.         when 9..10
  16.           target.add_x -= 6
  17.           Graphics.update
  18.         when 11..12
  19.           target.add_x += 6
  20.           Graphics.update
  21.         when 13..14
  22.           target.add_x -= 6
  23.           Graphics.update
  24.         when 15..16
  25.           target.add_x = 0
  26.           Graphics.update
  27.         end
  28.         $shake = 0 if $shake == 16  # XXOO
复制代码
囡囚囨囚囨図囨囧
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42409
在线时间
7602 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

4
发表于 2011-11-25 14:18:00 | 只看该作者
幻耶 发表于 2011-11-25 14:16
请教怎么个刷新法?

坐标更高之后Graphics.update
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
3
 楼主| 发表于 2011-11-25 14:16:29 | 只看该作者
fux2 发表于 2011-11-25 13:58
理论坐标改变时刷新一下画面就可以看到效果了。

请教怎么个刷新法?
囡囚囨囚囨図囨囧
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42409
在线时间
7602 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

2
发表于 2011-11-25 13:58:54 | 只看该作者
理论坐标改变时刷新一下画面就可以看到效果了。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 10:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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