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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
7827
在线时间
1346 小时
注册时间
2015-8-15
帖子
753
跳转到指定楼层
1
发表于 2023-11-1 13:10:26 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
HPBarFileName = "HPBar"
@hp_sprite = Sprite.new(args[0])
@hp_sprite.bitmap = RPG::Cache.picture(HPBarFileName)
sprite.x =123+游戏屏幕.x+87
sprite.y =游戏屏幕.y

Lv5.捕梦者

梦石
0
星屑
36442
在线时间
10799 小时
注册时间
2009-3-15
帖子
4814
12
发表于 2023-11-10 18:15:39 | 只看该作者
金芒芒 发表于 2023-11-10 11:00
你说sprite.x = x会不会跟格子包裹一样排列呢
我就差最后一步了
sprite.x= 115+i%10 *86[/pre] ...

看不懂你说什么
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7827
在线时间
1346 小时
注册时间
2015-8-15
帖子
753
11
 楼主| 发表于 2023-11-10 11:00:25 | 只看该作者
本帖最后由 金芒芒 于 2023-11-10 12:19 编辑
soulsaga 发表于 2023-11-9 14:55
你的sprite不是数组类型变量自然会报错


你说sprite.x = x会不会跟格子包裹一样排列呢
我就差最后一步了
RUBY 代码复制
  1. sprite[i].x= 115+i%10 *86

RUBY 代码复制
  1. if i == 10  # 如果 i == 10
  2.       adj_y = 86  # 调整_x=0
  3.       adj_x = -10 # 调整_y=0
  4.     end
  5.         #@选项背景[i].x = 原点_x + 56+43*(i+调整_x)
  6.         @cur_back[i].x = origin_x + 56+43*(i+adj_x)
  7.         #@选项背景[i].y = 原点_y + 141 + 调整_y
  8.         @cur_back[i].y = origin_y + 141 + adj_y
  9.         #@图标[i].x = 原点_x + 56+43*(i+调整_x)
  10.         @icons[i].x = origin_x + 56+43*(i+adj_x)
  11.         #@图标[i].y = 原点_y + 141 +    调整_y
  12.         @icons[i].y = origin_y + 141 + adj_y
  13.       end

最终战斗图.png (561.87 KB, 下载次数: 23)

最终战斗图.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7827
在线时间
1346 小时
注册时间
2015-8-15
帖子
753
10
 楼主| 发表于 2023-11-9 15:17:56 | 只看该作者
本帖最后由 金芒芒 于 2023-11-10 12:33 编辑
soulsaga 发表于 2023-11-9 14:55
你的sprite不是数组类型变量自然会报错

你说sprite.x = x会不会跟格子包裹一样排列呢
我就差最后一步了
RUBY 代码复制
  1. sprite[i].x= 115+i%10 *86

RUBY 代码复制
  1. if i == 10  # 如果 i == 10
  2.       adj_y = 86  # 调整_x=0
  3.       adj_x = -10 # 调整_y=0
  4.     end
  5.         #@选项背景[i].x = 原点_x + 56+43*(i+调整_x)
  6.         @cur_back[i].x = origin_x + 56+43*(i+adj_x)
  7.         #@选项背景[i].y = 原点_y + 141 + 调整_y
  8.         @cur_back[i].y = origin_y + 141 + adj_y
  9.         #@图标[i].x = 原点_x + 56+43*(i+调整_x)
  10.         @icons[i].x = origin_x + 56+43*(i+adj_x)
  11.         #@图标[i].y = 原点_y + 141 +    调整_y
  12.         @icons[i].y = origin_y + 141 + adj_y
  13.       end

RUBY 代码复制
  1. def x=(x)
  2.     super(x)
  3.     adj_x = 0
  4.     @button_base.x=x+origin_x
  5.     @delete_button.x=x+origin_x
  6.     @empty_button.x=x+origin_x
  7.     @finish_button.x=x+origin_x+15
  8.     for i in 0...@item_max
  9.       #@cur_back[i].x=x+origin_x
  10.       if i == 5
  11.       #adj_y = 43
  12.       adj_x = -5
  13.       end
  14.         @cur_back[i].x = origin_x + 56+43*(i+adj_x) + x
  15.         @icons[i].x = origin_x + 56+87*(i+adj_x) + x + 5
  16.         #
  17.     end

原来脚本
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 事件头上显血条 RMXP
  3.   #--------------------------------------------------------------------------
  4.   #  作者:后知后觉
  5.   #  日期:2012-6-26
  6.   #  版本:1.0
  7.   #  申明:刺夜之枪定制 正太君改
  8.   #        [url]http://bbs.66rpg.com/thread-237126-1-1.html[/url]  
  9. #==============================================================================
  10. #==============================================================================
  11. # ■ Sprite_Character
  12. #==============================================================================
  13.  
  14. class Sprite_Character < RPG::Sprite
  15.   #--------------------------------------------------------------------------
  16.   # ● 参数设置 正太君改
  17.   #--------------------------------------------------------------------------
  18.   # 设置图片文件名.不想要底图就让底图完全透明或设置为 ""
  19.   # 图片放在 Graphics/Pictures/ 文件夹下
  20.   HPBarFileName = "HPBar"
  21.   HPBarBackFileName = "HPBarBack"
  22.   MPBarFileName = "MPBar"
  23.   MPBarBackFileName = "MPBarBack"
  24.   # 设置显示友军血条的开关号
  25.   #TeamHPBarSwitchID = 5
  26.   # 设置显示敌军血条的开关号
  27.   #EnemyHPBarSwitchID = 6
  28.  
  29.   # 设置显示血条的开关号
  30.   HPBarSwitchID = 5
  31.  
  32.   #禁止显示血条 开关
  33.   HPBarDOESNOTSwitchID = 6
  34.  
  35.  
  36.   # 被攻击后血条显示多久
  37.   HPbarTimeDisplay = 60
  38.  
  39.  
  40.   #--------------------------------------------------------------------------
  41.   # ● 初始化对像
  42.   #--------------------------------------------------------------------------
  43. #别名hzhj旧初始化使事件参数栏初始化
  44.   alias hzhj_old_init_make_event_param_bar initialize
  45.   def initialize(*args)#定义初始化(*参数)
  46.     @hp_sprite = Sprite.new(args[0])#@hp精灵=精灵.新(参数[0])
  47.     @hp_back_sprite = Sprite.new(args[0])#@hp后台精灵 = 精灵.新(参数[0])
  48.     @mp_sprite = Sprite.new(args[0])
  49.     @mp_back_sprite = Sprite.new(args[0])
  50.     @param_sprites = []#@参数精灵=[]
  51.     @param_sprites << @hp_sprite# @参数精灵 << @hp精灵
  52.     @param_sprites << @hp_back_sprite# @参数精灵=@hp后台精灵
  53.     @param_sprites << @mp_sprite
  54.     @param_sprites << @mp_back_sprite
  55.     #@hp精灵。位图 = RPG::Cache.picture(HPBarFileName)绿色
  56.     @hp_sprite.bitmap = RPG::Cache.picture(HPBarFileName)
  57.     #@hp后台精灵.位图= RPG::Cache.picture(HPBarBackFileName)#黑色
  58.     @hp_back_sprite.bitmap = RPG::Cache.picture(HPBarBackFileName)#黑色
  59.     @mp_sprite.bitmap = RPG::Cache.picture(MPBarFileName)
  60.     @mp_back_sprite.bitmap = RPG::Cache.picture(MPBarBackFileName)
  61.     #别名hzhj旧初始化使事件参数栏(*参数)
  62.     hzhj_old_init_make_event_param_bar(*args)
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 释放
  66.   #--------------------------------------------------------------------------
  67.   #别名hzhj旧的布置使事件参数栏布置除非$@
  68.   alias hzhj_old_dispose_make_event_param_bar dispose unless $@
  69.   def dispose#定义可用
  70.     #@参数精灵。每个{|精灵|精灵.释放}
  71.     @param_sprites.each{|sprite|sprite.dispose}
  72.     #hzhj旧的布置生成事件参数栏
  73.     hzhj_old_dispose_make_event_param_bar
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 获取事件 HP # 正太君改
  77.   #--------------------------------------------------------------------------
  78.   def event_hp#定义事件hp
  79.      return 0 if @character.nil?#如果@角色,则返回0。无
  80.      return @character.hp#返回角色HP
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 获取事件 MHP # 正太君改
  84.   #--------------------------------------------------------------------------
  85.   def event_mhp#定义事件MHP
  86.     return 0 if @character.nil?#如果@角色,则返回0。无
  87.     return @character.hp_max#返回角色HP最大值
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 获取事件 MP # 正太君改
  91.   #--------------------------------------------------------------------------
  92.   def event_mp
  93.     return 0 if @character.nil?
  94.     return @character.sp if @character.is_a?(EFS_Hero)
  95.     return @character.ammo
  96.     #return @character.get_group.morale
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 获取事件 MMP # 正太君改
  100.   #--------------------------------------------------------------------------
  101.   def event_mmp
  102.     return 0 if @character.nil?
  103.     return @character.sp_max if @character.is_a?(EFS_Hero)
  104.     return @character.ammo_max
  105.     #return 100
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 判断是否显示 HP 条
  109.   #--------------------------------------------------------------------------
  110.   def show_hp_bar?#是否显示hp栏?
  111.     #return false if @character.is_a?(EFS_Hero)
  112.    # 如果$场景,则返回假的。efs故事模式
  113.     return false if $scene.efs_story_mode
  114.     #如果事件hp>0&&@角色已删除  &&表示与,意为同时都要满足。&&逻辑运算符,并且是双目运算符
  115.     if event_hp > 0 && !@character.removed
  116.       #返回$游戏开关[HPBarSwitchID]||@角色.hp计数器>0
  117.       return $game_switches[HPBarSwitchID] || @character.hp_counter > 0 #) && ! $game_switches[HPBarDOESNOTSwitchID]
  118.     else #否则
  119.       return false#返回假的
  120.     end  
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 判断是否显示 MP 条
  124.   #--------------------------------------------------------------------------
  125.   def show_mp_bar?
  126.     #return false if @character.is_a?(EFS_Hero)
  127.      return false if $scene.efs_story_mode
  128.     if event_mmp > 0 && !@character.removed
  129.       return $game_switches[HPBarSwitchID] || @character.hp_counter > 0 #) && ! $game_switches[HPBarDOESNOTSwitchID]
  130.     else
  131.       return false
  132.     end  
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 更新画面
  136.   #--------------------------------------------------------------------------
  137.   #别名hzhj旧更新使事件参数栏更新
  138.   alias hzhj_old_update_make_event_param_bar update
  139.   def update #定义更新
  140.     #hzhj旧更新生成事件参数栏
  141.     hzhj_old_update_make_event_param_bar
  142.     #如果@角色.是_a?(EFS_战斗者)
  143.     if !@character.is_a?(EFS_Battler)
  144.      # @参数精灵。每个{|精灵|精灵.可见=假的}
  145.       @param_sprites.each{|sprite|sprite.visible = false}
  146.     else
  147.  
  148.       # 刷新 HP 可见状态
  149.       if show_hp_bar? #如果显示hp栏?
  150.         #@hp精灵。可见=@hp后台精灵可见=真
  151.         @hp_sprite.visible = @hp_back_sprite.visible = true
  152.        # @hp精灵。bitmap=角色扮演::缓存图片(“HPBar-E”)如果@角色。团队!=1.
  153.         @hp_sprite.bitmap = RPG::Cache.picture("HPBar-E") if @character.team != 1 #wtf you doing
  154.  
  155.  
  156.         #减少计数
  157.        # 除非$游戏切换[HPBarSwitchID]
  158.         unless $game_switches[HPBarSwitchID]
  159.           #如果@角色。hp计数器==hp条形时间显示
  160.           if @character.hp_counter == HPbarTimeDisplay
  161.             @param_sprites.each do |sprite| #@参数精灵。每个做|精灵|
  162.               sprite.opacity = 255 #精灵不透明度=255
  163.             end
  164.             #els if@字符。hp计数器< HPbarTimeDisplay /3
  165.           elsif  @character.hp_counter < HPbarTimeDisplay/3
  166.             @param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
  167.               ##精灵不透明度-=255/(HPbarTimeDisplay/3)
  168.               sprite.opacity -= 255/(HPbarTimeDisplay/3)
  169.             end
  170.           end
  171.           #@性格。hp计数器-=1
  172.           @character.hp_counter -= 1
  173.         else#否则
  174.             @param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
  175.               sprite.opacity = 255#精灵不透明度=255
  176.             end
  177.  
  178.         end
  179.  
  180.         # 刷新坐标
  181.         @param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
  182.           sprite.ox = sprite.bitmap.width / 2#精灵ox=精灵位图宽度/2
  183.           sprite.oy = sprite.bitmap.height#精灵.oy=精灵。位图高度
  184.           #sprite.x = x
  185.           sprite.x= 115+100%10 *86
  186.           #sprite.y = y - 52
  187.  
  188.           #sprite.opacity = 255
  189.          # shif = @character.is_cal#盖印图层=@角色。是计算函数
  190.           sprite.y = 300#y - (shif ? 82 : 52)#精灵.y=y-(盖印图层?82:52)
  191.           sprite.z = z#精灵.z = z
  192.         end
  193.         @hp_sprite.z += 1#hp_精灵.z = z
  194.         @mp_sprite.z += 1
  195.         # 计算 HP 显示区域
  196.         #hp宽=(@hp 精灵.位图.宽*1.0*事件hp/事件mhp)。圆形的
  197.         hpw = (@hp_sprite.bitmap.width * 1.0 * event_hp / event_mhp).round
  198.        # hp宽=[hp宽,@hp精灵位图宽度].最小值,0].最大值
  199.         hpw = [[hpw, @hp_sprite.bitmap.width].min, 0].max
  200.         hph = @hp_sprite.bitmap.height#hp高=@hp精灵位图高度
  201.         #@hp精灵。src矩形。集合(0,0,hp宽,hp高)
  202.         @hp_sprite.src_rect.set(0, 0, hpw, hph)
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.         # 刷新 MP 可见状态
  213.  
  214.         @mp_sprite.visible = @mp_back_sprite.visible = (show_mp_bar? and event_mmp > 0) # 正太君改
  215.         if show_mp_bar?
  216.           # 修正 HP 坐标
  217.           @hp_sprite.y -= (@mp_sprite.oy + 1)
  218.           @hp_back_sprite.y = @hp_sprite.y
  219.           # 计算 MP 显示区域
  220.           if event_mmp > 0 # 正太君改
  221.             mpw = (@mp_sprite.bitmap.width * 1.0 * event_mp / event_mmp).round
  222.             mpw = [[mpw, @mp_sprite.bitmap.width].min, 0].max
  223.             mph = @mp_sprite.bitmap.height
  224.             @mp_sprite.src_rect.set(0, 0, mpw, mph)
  225.           end
  226.         end
  227.       else
  228.         @param_sprites.each{|sprite|sprite.visible = false}
  229.       end
  230.     end
  231.   end
  232. end

最终战斗图.png (561.87 KB, 下载次数: 34)

最终战斗图.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36442
在线时间
10799 小时
注册时间
2009-3-15
帖子
4814
9
发表于 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不是数组类型变量自然会报错
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7827
在线时间
1346 小时
注册时间
2015-8-15
帖子
753
8
 楼主| 发表于 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


RUBY 代码复制
  1. x=87
  2.           a=[87,174,261,348,435,609,696,783,870,957]
  3.           for i in 0...a.size
  4.           sprite[i].x = x+a[i]
  5.           end

语句错误了
脚本'事件头上显血条EFS_Hp_Mp Bar'的 187 行发生了
NoMethodError.
undefined method `[' for #<Sprite:0x94e56b8>
确定
无方法错误。

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

确定
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36442
在线时间
10799 小时
注册时间
2009-3-15
帖子
4814
7
发表于 2023-11-9 12:21:58 | 只看该作者
RUBY 代码复制
  1. a=[87,174,261,348,435,609,696,783,870,957]
  2. for i in 0...a.size
  3. sprite[i].x = x+a[i]
  4. end
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7827
在线时间
1346 小时
注册时间
2015-8-15
帖子
753
6
 楼主| 发表于 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
RUBY 代码复制
  1. x=86
  2.           sprite.x = x+(i? 87:174:261:348:435:609:696:783:870:957)
  3.  
  4.           #sprite.y = y - 52
  5.  
  6.           sprite.opacity = 255
  7.          # shif = @character.is_cal#盖印图层=@角色。是计算函数
  8.           sprite.y = 530 #y - (shif ? 82 : 52)#精灵.y=y-(盖印图层?82:52)
  9.           sprite.z = z#精灵.z = z
[quote]soulsaga 发表于 2023-11-8 15:18
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36442
在线时间
10799 小时
注册时间
2009-3-15
帖子
4814
5
发表于 2023-11-8 15:18:54 | 只看该作者
本帖最后由 soulsaga 于 2023-11-8 15:52 编辑
金芒芒 发表于 2023-11-8 11:46
战斗时可以看到我方头像下的蓝血条 敌方红血条  还有双方战斗力


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

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7827
在线时间
1346 小时
注册时间
2015-8-15
帖子
753
4
 楼主| 发表于 2023-11-8 11:46:43 | 只看该作者
soulsaga 发表于 2023-11-4 17:48
血条跟着游戏屏幕做啥呢
除非固定不动不然没有意义

战斗时可以看到我方头像下的蓝血条 敌方红血条  还有双方战斗力

weixin图片_20231108113530.png (648.04 KB, 下载次数: 37)

weixin图片_20231108113530.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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