查看: 2459|回复: 11

[有事请教] 如何让精灵位图的x,y= $game_screen(x,y)

[复制链接]
梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
发表于 2023-11-1 13:10:26 | 显示全部楼层 |阅读模式

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

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

×
HPBarFileName = "HPBar"
@hp_sprite = Sprite.new(args[0])
@hp_sprite.bitmap = RPG::Cache.picture(HPBarFileName)
sprite.x =123+游戏屏幕.x+87
sprite.y =游戏屏幕.y
梦石
0
星屑
6295
在线时间
799 小时
注册时间
2019-1-20
回帖
223
发表于 2023-11-3 23:05:46 | 显示全部楼层
你说的 游戏屏幕 的x,y到底指什么?

提高解决问题的方法:
查看对应版本的帮助文件或者默认脚本中可能相似的部分 看有没有思路能照搬(不是)
改变问题为更有可能的,常见的,系统性的 如:天气自动变化成下雨→天气系统 要多想几种可能
使用论坛的搜索功能查找相关问题 咦?这跟我想的不一样啊!讨厌啦~\(≧□≦)/~啦啦啦
清楚说明实际上你想解决的问题  想看坛友的女装,想看!  
脚本自己有改过的地方要尽量标明  提高除BUG效率 ... ...
脚本有问题但不是默认脚本的要全部贴出来 大胆点,尽情发,我说的是女装照!
三包原则:包有BUG,包甩锅,包咕咕 长期下线,急事换人!难事换人!啥事都换人!换人换人换人!!!
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2023-11-4 17:48:56 | 显示全部楼层
血条跟着游戏屏幕做啥呢
除非固定不动不然没有意义
回复

使用道具 举报

梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
 楼主| 发表于 2023-11-8 11:46:43 | 显示全部楼层
soulsaga 发表于 2023-11-4 17:48
血条跟着游戏屏幕做啥呢
除非固定不动不然没有意义

战斗时可以看到我方头像下的蓝血条 敌方红血条  还有双方战斗力
weixin图片_20231108113530.png
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2023-11-8 15:18:54 | 显示全部楼层
本帖最后由 soulsaga 于 2023-11-8 15:52 编辑
金芒芒 发表于 2023-11-8 11:46
战斗时可以看到我方头像下的蓝血条 敌方红血条  还有双方战斗力


那你主楼写的脚本不行吗?
sprite.x就是游戏屏幕了吧?
回复

使用道具 举报

梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
 楼主| 发表于 2023-11-9 08:39:40 | 显示全部楼层
本帖最后由 金芒芒 于 2023-11-9 09:42 编辑

那你主楼写的脚本不行吗?
sprite.x就是游戏屏幕了吧?[/quote]

sprite.x 如何排列开来啊多是一个点上了 比如x=115  for i in 10  sprite.x=x   x+= 87
          sprite[0].x = x+87#(i? 87:174:261:348:435:609:696:783:870:957)
          sprite[1].x = x+174
          sprite[2].x = x+261
          sprite[3].x = x+384
          sprite[4].x = x+435
          sprite[5].x = x+609
          sprite[6].x = x+696
          sprite[7].x = x+783
          sprite[8].x = x+870
          sprite[9].x = x+957

我想血条x分别=87:174:261:348:435:609:696:783:870:957
[pre lang="ruby"]          x=86
          sprite.x = x+(i? 87:174:261:348:435:609:696:783:870:957)
         
          #sprite.y = y - 52
         
          sprite.opacity = 255
         # shif = @character.is_cal#盖印图层=@角色。是计算函数
          sprite.y = 530 #y - (shif ? 82 : 52)#精灵.y=y-(盖印图层?82:52)
          sprite.z = z#精灵.z = z[/pre][quote]soulsaga 发表于 2023-11-8 15:18
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2023-11-9 12:21:58 | 显示全部楼层
[pre lang="ruby"]
a=[87,174,261,348,435,609,696,783,870,957]
for i in 0...a.size
sprite.x = x+a
end
[/pre]
回复

使用道具 举报

梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
 楼主| 发表于 2023-11-9 13:43:13 | 显示全部楼层
本帖最后由 金芒芒 于 2023-11-9 13:48 编辑
soulsaga 发表于 2023-11-9 12:21
a=[87,174,261,348,435,609,696,783,870,957]
for i in 0...a.size
sprite.x = x+a


[pre lang="ruby"]          x=87
          a=[87,174,261,348,435,609,696,783,870,957]
          for i in 0...a.size
          sprite.x = x+a
          end[/pre]
语句错误了
脚本'事件头上显血条EFS_Hp_Mp Bar'的 187 行发生了
NoMethodError.
undefined method `[' for #<Sprite:0x94e56b8>
确定
无方法错误。

#<Sprite:0x94e56b8>的未定义方法“[”

确定
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2023-11-9 14:55:28 | 显示全部楼层
金芒芒 发表于 2023-11-9 13:43
x=87
          a=[87,174,261,348,435,609,696,783,870,957]
          for i in 0...a.size

你的sprite不是数组类型变量自然会报错
回复

使用道具 举报

梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
 楼主| 发表于 2023-11-9 15:17:56 | 显示全部楼层
本帖最后由 金芒芒 于 2023-11-10 12:33 编辑
soulsaga 发表于 2023-11-9 14:55
你的sprite不是数组类型变量自然会报错

你说sprite.x = x会不会跟格子包裹一样排列呢
我就差最后一步了
[pre lang="ruby"]sprite.x= 115+i%10 *86[/pre]
[pre lang="ruby"]  
    if i == 10  # 如果 i == 10
      adj_y = 86  # 调整_x=0
      adj_x = -10 # 调整_y=0
    end
        #@选项背景.x = 原点_x + 56+43*(i+调整_x)
        @cur_back.x = origin_x + 56+43*(i+adj_x)
        #@选项背景.y = 原点_y + 141 + 调整_y
        @cur_back.y = origin_y + 141 + adj_y
        #@图标.x = 原点_x + 56+43*(i+调整_x)
        @icons.x = origin_x + 56+43*(i+adj_x)
        #@图标.y = 原点_y + 141 +    调整_y
        @icons.y = origin_y + 141 + adj_y
      end [/pre]
[pre lang="ruby"]  def x=(x)
    super(x)
    adj_x = 0
    @button_base.x=x+origin_x
    @delete_button.x=x+origin_x
    @empty_button.x=x+origin_x
    @finish_button.x=x+origin_x+15
    for i in 0...@item_max
      #@cur_back.x=x+origin_x
      if i == 5
      #adj_y = 43
      adj_x = -5
      end
        @cur_back.x = origin_x + 56+43*(i+adj_x) + x
        @icons.x = origin_x + 56+87*(i+adj_x) + x + 5
        #
    end[/pre]
原来脚本
[pre lang="ruby"]#==============================================================================
# ■ 事件头上显血条 RMXP
  #--------------------------------------------------------------------------
  #  作者:后知后觉
  #  日期:2012-6-26
  #  版本:1.0
  #  申明:刺夜之枪定制 正太君改
  #        http://bbs.66rpg.com/thread-237126-1-1.html  
#==============================================================================
#==============================================================================
# ■ Sprite_Character
#==============================================================================

class Sprite_Character < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● 参数设置 正太君改
  #--------------------------------------------------------------------------
  # 设置图片文件名.不想要底图就让底图完全透明或设置为 ""
  # 图片放在 Graphics/Pictures/ 文件夹下
  HPBarFileName = "HPBar"
  HPBarBackFileName = "HPBarBack"
  MPBarFileName = "MPBar"
  MPBarBackFileName = "MPBarBack"
  # 设置显示友军血条的开关号
  #TeamHPBarSwitchID = 5
  # 设置显示敌军血条的开关号
  #EnemyHPBarSwitchID = 6
  
  # 设置显示血条的开关号
  HPBarSwitchID = 5
  
  #禁止显示血条 开关
  HPBarDOESNOTSwitchID = 6
  
  
  # 被攻击后血条显示多久
  HPbarTimeDisplay = 60
  
  
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
#别名hzhj旧初始化使事件参数栏初始化
  alias hzhj_old_init_make_event_param_bar initialize
  def initialize(*args)#定义初始化(*参数)
    @hp_sprite = Sprite.new(args[0])#@hp精灵=精灵.新(参数[0])
    @hp_back_sprite = Sprite.new(args[0])#@hp后台精灵 = 精灵.新(参数[0])
    @mp_sprite = Sprite.new(args[0])
    @mp_back_sprite = Sprite.new(args[0])
    @param_sprites = []#@参数精灵=[]
    @param_sprites << @hp_sprite# @参数精灵 << @hp精灵
    @param_sprites << @hp_back_sprite# @参数精灵=@hp后台精灵
    @param_sprites << @mp_sprite
    @param_sprites << @mp_back_sprite
    #@hp精灵。位图 = RPG::Cache.picture(HPBarFileName)绿色
    @hp_sprite.bitmap = RPG::Cache.picture(HPBarFileName)
    #@hp后台精灵.位图= RPG::Cache.picture(HPBarBackFileName)#黑色
    @hp_back_sprite.bitmap = RPG::Cache.picture(HPBarBackFileName)#黑色
    @mp_sprite.bitmap = RPG::Cache.picture(MPBarFileName)
    @mp_back_sprite.bitmap = RPG::Cache.picture(MPBarBackFileName)
    #别名hzhj旧初始化使事件参数栏(*参数)
    hzhj_old_init_make_event_param_bar(*args)
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  #别名hzhj旧的布置使事件参数栏布置除非$@
  alias hzhj_old_dispose_make_event_param_bar dispose unless $@
  def dispose#定义可用
    #@参数精灵。每个{|精灵|精灵.释放}
    @param_sprites.each{|sprite|sprite.dispose}
    #hzhj旧的布置生成事件参数栏
    hzhj_old_dispose_make_event_param_bar
  end
  #--------------------------------------------------------------------------
  # ● 获取事件 HP # 正太君改
  #--------------------------------------------------------------------------
  def event_hp#定义事件hp
     return 0 if @character.nil?#如果@角色,则返回0。无
     return @character.hp#返回角色HP
  end
  #--------------------------------------------------------------------------
  # ● 获取事件 MHP # 正太君改
  #--------------------------------------------------------------------------
  def event_mhp#定义事件MHP
    return 0 if @character.nil?#如果@角色,则返回0。无
    return @character.hp_max#返回角色HP最大值
  end
  #--------------------------------------------------------------------------
  # ● 获取事件 MP # 正太君改
  #--------------------------------------------------------------------------
  def event_mp
    return 0 if @character.nil?
    return @character.sp if @character.is_a?(EFS_Hero)
    return @character.ammo
    #return @character.get_group.morale
  end
  #--------------------------------------------------------------------------
  # ● 获取事件 MMP # 正太君改
  #--------------------------------------------------------------------------
  def event_mmp
    return 0 if @character.nil?
    return @character.sp_max if @character.is_a?(EFS_Hero)
    return @character.ammo_max
    #return 100
  end
  #--------------------------------------------------------------------------
  # ● 判断是否显示 HP 条
  #--------------------------------------------------------------------------
  def show_hp_bar?#是否显示hp栏?
    #return false if @character.is_a?(EFS_Hero)
   # 如果$场景,则返回假的。efs故事模式
    return false if $scene.efs_story_mode
    #如果事件hp>0&&@角色已删除  &&表示与,意为同时都要满足。&&逻辑运算符,并且是双目运算符
    if event_hp > 0 && !@character.removed
      #返回$游戏开关[HPBarSwitchID]||@角色.hp计数器>0
      return $game_switches[HPBarSwitchID] || @character.hp_counter > 0 #) && ! $game_switches[HPBarDOESNOTSwitchID]
    else #否则
      return false#返回假的
    end  
  end
  #--------------------------------------------------------------------------
  # ● 判断是否显示 MP 条
  #--------------------------------------------------------------------------
  def show_mp_bar?
    #return false if @character.is_a?(EFS_Hero)
     return false if $scene.efs_story_mode
    if event_mmp > 0 && !@character.removed
      return $game_switches[HPBarSwitchID] || @character.hp_counter > 0 #) && ! $game_switches[HPBarDOESNOTSwitchID]
    else
      return false
    end  
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  #别名hzhj旧更新使事件参数栏更新
  alias hzhj_old_update_make_event_param_bar update
  def update #定义更新
    #hzhj旧更新生成事件参数栏
    hzhj_old_update_make_event_param_bar
    #如果@角色.是_a?(EFS_战斗者)
    if !@character.is_a?(EFS_Battler)
     # @参数精灵。每个{|精灵|精灵.可见=假的}
      @param_sprites.each{|sprite|sprite.visible = false}
    else
      
      # 刷新 HP 可见状态
      if show_hp_bar? #如果显示hp栏?
        #@hp精灵。可见=@hp后台精灵可见=真
        @hp_sprite.visible = @hp_back_sprite.visible = true
       # @hp精灵。bitmap=角色扮演::缓存图片(“HPBar-E”)如果@角色。团队!=1.
        @hp_sprite.bitmap = RPG::Cache.picture("HPBar-E") if @character.team != 1 #wtf you doing
        
        
        #减少计数
       # 除非$游戏切换[HPBarSwitchID]
        unless $game_switches[HPBarSwitchID]
          #如果@角色。hp计数器==hp条形时间显示
          if @character.hp_counter == HPbarTimeDisplay
            @param_sprites.each do |sprite| #@参数精灵。每个做|精灵|
              sprite.opacity = 255 #精灵不透明度=255
            end
            #els if@字符。hp计数器< HPbarTimeDisplay /3
          elsif  @character.hp_counter < HPbarTimeDisplay/3
            @param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
              ##精灵不透明度-=255/(HPbarTimeDisplay/3)
              sprite.opacity -= 255/(HPbarTimeDisplay/3)
            end
          end
          #@性格。hp计数器-=1
          @character.hp_counter -= 1
        else#否则
            @param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
              sprite.opacity = 255#精灵不透明度=255
            end
         
        end
        
        # 刷新坐标
        @param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
          sprite.ox = sprite.bitmap.width / 2#精灵ox=精灵位图宽度/2
          sprite.oy = sprite.bitmap.height#精灵.oy=精灵。位图高度
          #sprite.x = x
          sprite.x= 115+100%10 *86
          #sprite.y = y - 52
         
          #sprite.opacity = 255
         # shif = @character.is_cal#盖印图层=@角色。是计算函数
          sprite.y = 300#y - (shif ? 82 : 52)#精灵.y=y-(盖印图层?82:52)
          sprite.z = z#精灵.z = z
        end
        @hp_sprite.z += 1#hp_精灵.z = z
        @mp_sprite.z += 1
        # 计算 HP 显示区域
        #hp宽=(@hp 精灵.位图.宽*1.0*事件hp/事件mhp)。圆形的
        hpw = (@hp_sprite.bitmap.width * 1.0 * event_hp / event_mhp).round
       # hp宽=[hp宽,@hp精灵位图宽度].最小值,0].最大值
        hpw = [[hpw, @hp_sprite.bitmap.width].min, 0].max
        hph = @hp_sprite.bitmap.height#hp高=@hp精灵位图高度
        #@hp精灵。src矩形。集合(0,0,hp宽,hp高)
        @hp_sprite.src_rect.set(0, 0, hpw, hph)
        
        

        
        
        
        
        
        
        # 刷新 MP 可见状态
      
        @mp_sprite.visible = @mp_back_sprite.visible = (show_mp_bar? and event_mmp > 0) # 正太君改
        if show_mp_bar?
          # 修正 HP 坐标
          @hp_sprite.y -= (@mp_sprite.oy + 1)
          @hp_back_sprite.y = @hp_sprite.y
          # 计算 MP 显示区域
          if event_mmp > 0 # 正太君改
            mpw = (@mp_sprite.bitmap.width * 1.0 * event_mp / event_mmp).round
            mpw = [[mpw, @mp_sprite.bitmap.width].min, 0].max
            mph = @mp_sprite.bitmap.height
            @mp_sprite.src_rect.set(0, 0, mpw, mph)
          end
        end
      else
        @param_sprites.each{|sprite|sprite.visible = false}
      end
    end
  end
end[/pre]
最终战斗图.png
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部