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

Project1

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

[已经解决] 变化窗口皮肤

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3181
在线时间
1863 小时
注册时间
2010-6-19
帖子
1205
跳转到指定楼层
1
发表于 2022-6-17 22:12:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 黑米馒头 于 2022-6-17 22:15 编辑

self.windowskin = RPG::Cache.windowskin('皮肤窗口')
这样可以改窗口皮肤,可是战斗场景的皮肤窗口怎么换皮肤?

想把这个选人的光标箭头换了


攻击的时候显示一种

法术的时候又换一种

捕捉的时候又换一种~


这里是生成箭头的窗口,
@actor_arrow.windowskin = RPG::Cache.windowskin('箭头')这应该竟然不行~


Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

2
发表于 2022-6-18 01:00:10 | 只看该作者
本帖最后由 guoxiaomi 于 2022-6-18 01:02 编辑

实际上要修改的是 @actor_arrow 的 bitmap,参见 Arrow_Base 类的 initialize 方法。
如果想修改,还需要加上
  1. attr_accessor :bitmap
复制代码
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3181
在线时间
1863 小时
注册时间
2010-6-19
帖子
1205
3
 楼主| 发表于 2022-6-18 10:27:07 | 只看该作者
guoxiaomi 发表于 2022-6-18 01:00
实际上要修改的是 @actor_arrow 的 bitmap,参见 Arrow_Base 类的 initialize 方法。
如果想修改,还需要加 ...

我试着这么改好像不行,完全就不显示箭头了。。。

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Arrow_Base
  3. #------------------------------------------------------------------------------
  4. #  在战斗画面使用的箭头光标的活动块。本类作为
  5. # Arrow_Enemy 类与 Arrow_Actor 类的超级类使用。
  6. #==============================================================================
  7.  
  8. class Arrow_Base < Sprite
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_reader   :index                    # 光标位置
  13.   attr_reader   :help_window              # 帮助窗口
  14.  
  15.   attr_accessor :bitmap                   # 位图
  16.  
  17.   #--------------------------------------------------------------------------
  18.   # ● 初始化对像
  19.   #     viewport : 显示端口
  20.   #--------------------------------------------------------------------------
  21.   def initialize(viewport)
  22.     super(viewport)
  23.     self.bitmap = RPG::Cache.windowskin($game_system.windowskin_name)
  24.     self.ox = 16
  25.     self.oy = 64
  26.     self.z = 2500
  27.     @blink_count = 0
  28.     @index = 0
  29.     @help_window = nil
  30.  
  31.     @bitmap = nil
  32.  
  33.     update
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 设置光标位置
  37.   #     index : 新的光标位置
  38.   #--------------------------------------------------------------------------
  39.   def index=(index)
  40.     @index = index
  41.     update
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 设置帮助窗口
  45.   #     help_window : 新的帮助窗口
  46.   #--------------------------------------------------------------------------
  47.   def help_window=(help_window)
  48.     @help_window = help_window
  49.     # 刷新帮助文本 (update_help 定义了继承目标)
  50.     if @help_window != nil
  51.       update_help
  52.     end
  53.   end
  54.  
  55.   #--------------------------------------------------------------------------
  56.   # ● 设置皮肤位图
  57.   #     bitmap : 新的皮肤位图
  58.   #--------------------------------------------------------------------------
  59.   def bitmap(bitmap)
  60.     @bitmap = bitmap
  61.     # 刷新帮助文本 (update_bitmap 定义了继承目标)
  62.     if @bitmap != nil
  63.       update_bitmap
  64.     end
  65.   end  
  66.  
  67.   #--------------------------------------------------------------------------
  68.   # ● 刷新画面
  69.   #--------------------------------------------------------------------------
  70.   def update
  71.     # 刷新闪烁记数
  72.     @blink_count = (@blink_count + 1) % 8
  73.     # 设置传送源矩形
  74.     if @blink_count < 4
  75.       self.src_rect.set(128, 96, 32, 32)
  76.     else
  77.       self.src_rect.set(160, 96, 32, 32)
  78.     end
  79.     # 刷新帮助文本 (update_help 定义了继承目标)
  80.     if @help_window != nil
  81.       update_help
  82.     end
  83.   end
  84. end


点评

63行是你自己写的啊……改成update就行  发表于 2022-6-18 21:47
不行改了之后,一点攻击就弹出 update_bitmap这句错误,然后还是不显示光标  发表于 2022-6-18 20:40
59行应该写def bitmap=  发表于 2022-6-18 14:56
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3181
在线时间
1863 小时
注册时间
2010-6-19
帖子
1205
4
 楼主| 发表于 2022-6-18 22:55:46 | 只看该作者
guoxiaomi 发表于 2022-6-18 01:00
实际上要修改的是 @actor_arrow 的 bitmap,参见 Arrow_Base 类的 initialize 方法。
如果想修改,还需要加 ...

变化窗口皮肤.rar (192.73 KB, 下载次数: 7)   不知道哪里错了。。反正就是跳出脚本错误~~~
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

5
发表于 2022-6-19 00:44:18 | 只看该作者
本帖最后由 guoxiaomi 于 2022-6-19 00:47 编辑

都是些写法上的小问题,你具体想做什么?把你写的这个 bitmap 函数直接删了不就不报错了。你只修改了 Arrow_Actor 的位图,并且默认 Bitmap = nil,当然就不显示敌人的箭头了。

而且直接操作继承自 Sprite 的 @bitmap 对象可能会有问题,建议跟上面保持一致,使用 self.bitmap 操作
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3181
在线时间
1863 小时
注册时间
2010-6-19
帖子
1205
6
 楼主| 发表于 2022-6-19 11:37:02 | 只看该作者
guoxiaomi 发表于 2022-6-19 00:44
都是些写法上的小问题,你具体想做什么?把你写的这个 bitmap 函数直接删了不就不报错了。你只修改了 Arrow ...

可能我表达不清楚。。。

问题是这样的,就是修改选择敌人时的箭头,比如,攻击的时候显示1种,法术的时候1种,捕捉的时候又换1种,

然后其实啥都不用改,只需要在



这里加上下面这句改变图片就行,

可是又出现1个BUG了,就是当选择敌人的时候,

箭头皮肤改变的一刹那,会出现显示出整个窗口皮肤的情况(有时候会卡皮肤窗口,有时候又不会卡),

如图:



然后大概1秒左右,恢复正常



不知道啥情况~
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

7
发表于 2022-6-19 17:28:57 | 只看该作者
本帖最后由 guoxiaomi 于 2022-6-19 17:45 编辑
黑米馒头 发表于 2022-6-19 11:37
可能我表达不清楚。。。

问题是这样的,就是修改选择敌人时的箭头,比如,攻击的时候显示1种,法术的时 ...


试一下不要重定义 bitmap= 方法,改成定义 set_bitmap 然后调用。因为 Arrow_Enemy < Arrow_Base < Sprite 继承链的存在,Sprite 里定义的 bitmap= 方法被继承下来了,就可能导致一些问题。对于内置的可绘制类,重定义属性名称相关的方法(bitmap 和 bitmap=),以及访问或操作相关的属性(@bitmap)在 RGSS 中属于未定义行为(UB)。RGSS 的默认脚本里也没有任何这样的写法,除非你很了解 RGSS 内置类是如何实现的,否则不要尝试去操作。
  1.   #--------------------------------------------------------------------------
  2.   # ● 设置皮肤位图
  3.   #     bitmap : 新的皮肤位图
  4.   #--------------------------------------------------------------------------
  5.   def set_bitmap(bitmap)
  6.     # 用 self.bitmap 设置 bitamap,不要用 @bitmap
  7.     self.bitmap = bitmap
  8.     # 如果 bitmap 不为 nil,则刷新 src_rect
  9.     update if bitmap
  10.   end
复制代码

调用时写:
  1. @enemy_arrow.set_bitmap(RPG::Cache.windowskin('皮肤窗口'))
复制代码


另,如果想写的比较花,可以把方法名写为 windowskin=:
  1. class Arrow_Base
  2.   def windowskin=(w)
  3.     self.bitmap = w
  4.     update if w
  5.   end
  6. end
复制代码

然后你就可以写:
  1. @enemy_arrow.windowskin = RPG::Cache.windowskin('皮肤窗口')
复制代码

点评

完美解决!  发表于 2022-6-19 21:19
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 03:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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