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

Project1

 找回密码
 注册会员
搜索

改变战斗图位置

查看数: 2451 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-5-20 10:02

正文摘要:

我想设置一个效果,战斗的时候角色战斗坐标会移动几步,然后在定位在一个坐标上,然后在进入正常战斗。 战斗显示用活动块在这里 class Sprite_Battler < RPG::Sprite 最后几行     # 设置活动块的坐标 & ...

回复

黑米馒头 发表于 2022-5-22 12:20:04
qq634488405 发表于 2022-5-21 09:30
我上面的表述有些错误,Scene_Battle里不需要initialize,把initialize方法删了就好 ...

感谢 完美解决
qq634488405 发表于 2022-5-21 09:30:28
黑米馒头 发表于 2022-5-21 08:46
已经看到效果了,不过有个BUG,在地图上面遇到明雷的话,开始战斗,会先显示一段人物战斗图移动的效果, ...

我上面的表述有些错误,Scene_Battle里不需要initialize,把initialize方法删了就好
黑米馒头 发表于 2022-5-21 08:46:51
qq634488405 发表于 2022-5-21 00:32
Scene_Battle 1里initialize中# 生成活动块

放到start_phase1前面

已经看到效果了,不过有个BUG,在地图上面遇到明雷的话,开始战斗,会先显示一段人物战斗图移动的效果,然后进入战斗,然后又会在显示一段移动效果,接着出现战斗指令,如何把地图上的那一段效果去掉,直接就是战斗显示战斗图的移动效果~

改变战斗图位置.rar (188.11 KB, 下载次数: 10)
qq634488405 发表于 2022-5-21 00:32:40
本帖最后由 qq634488405 于 2022-5-21 09:31 编辑
黑米馒头 发表于 2022-5-20 23:17
大佬,按你的方法,进入战斗的时候战斗图是移动了几下,可是好像看不到移动的效果,而是直接显示移动结束 ...


Scene_Battle 1里main中# 生成活动块这一段
  1. # 生成活动块
  2. @spriteset = Spriteset_Battle.new
复制代码

放到start_phase1前面
  1. @message_window = Window_Message.new
  2.     # 原来@spriteset = Sptiteset_Battle.new
  3.     # 初始化等待计数
  4.     @wait_count = 0
  5.     # 执行过渡
  6.     if $data_system.battle_transition == ""
  7.       Graphics.transition(20)
  8.     else
  9.       Graphics.transition(40, "Graphics/Transitions/" +
  10.         $data_system.battle_transition)
  11.     end
  12.     # 生成活动块
  13.     @spriteset = Spriteset_Battle.new
  14.     # 开始自由战斗回合
  15.     start_phase1
  16.     # 主循环
  17.     loop do
复制代码

这个是每个战斗图依次动,如果要所有战斗图一起动,Spriteset_Battle的update就这么写
  1. if @before_battle
  2.       for i in 1..40
  3.         for sprite in @enemy_sprites + @actor_sprites
  4.           # 向左向上为减
  5.           sprite.offset_x -= 1
  6.           sprite.offset_y -= 1
  7.           sprite.update
  8.         end
  9.         Graphics.update
  10.       end
  11.     else
  12.       for sprite in @enemy_sprites + @actor_sprites
  13.         sprite.update
  14.       end
  15.     end
复制代码

评分

参与人数 2星屑 +100 +2 收起 理由
guoxiaomi + 100 + 1 认可答案
alexncf125 + 1 良心工具人

查看全部评分

黑米馒头 发表于 2022-5-20 23:17:18
qq634488405 发表于 2022-5-20 13:27
Sprite_Battler里添加实例变量
attr_accessor :offset_x
attr_accessor :offset_y

大佬,按你的方法,进入战斗的时候战斗图是移动了几下,可是好像看不到移动的效果,而是直接显示移动结束的位置,如何做到能看到移动效果,就是进入战斗的时候,角色和敌人都移动几步,然后在开始战斗

改变战斗图位置.rar (187.58 KB, 下载次数: 11)
qq634488405 发表于 2022-5-20 13:27:52
本帖最后由 qq634488405 于 2022-5-20 13:35 编辑
黑米馒头 发表于 2022-5-20 12:56
不太懂脚本,大概应该怎么弄


Sprite_Battler里添加实例变量
attr_accessor :offset_x
attr_accessor :offset_y
初始化里
@offset_x,@offset_y = 0
update里
self.x = @battler.screen_x + @offset_x
self.y = @battler.screen_y + @offset_y
在Spriteset_Battle的initialize方法
  1.     # 前面略
  2.     # 生成计时器块
  3.     @timer_sprite = Sprite_Timer.new
  4.     @before_battle = true
  5.     # 刷新画面
  6.     update
  7.     @before_battle = false
复制代码

初始化的时候指定@before_battle作为正式战斗开始前的标志
在Spriteset_Battle的update方法里根据@before_battle标志动作战斗图
在初始化的时候会调用一次update,此时会移动战斗图,初始化完成后@before_battle = false
  1.     # 前面略
  2.     # 刷新战斗者的活动块
  3.     for sprite in @enemy_sprites + @actor_sprites
  4.       if @before_battle
  5.         for i in 1..40
  6.           # 向左向上为减
  7.           sprite.offset_x -= 1
  8.           sprite.offset_y -= 1
  9.           sprite.update
  10.           Graphics.update
  11.         end
  12.       else
  13.         sprite.update
  14.       end
  15.     end
  16. # 后面略
复制代码
黑米馒头 发表于 2022-5-20 12:56:01
qq634488405 发表于 2022-5-20 10:48
根据你的描述,你不应该直接去改update,而是应该在战斗前,生成Sprite_Battler的实例对象后去修改实例对象 ...

不太懂脚本,大概应该怎么弄
qq634488405 发表于 2022-5-20 10:48:18
根据你的描述,你不应该直接去改update,而是应该在战斗前,生成Sprite_Battler的实例对象后去修改实例对象的x,y,再update
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-5-17 21:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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