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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: Gunderub
打印 上一主题 下一主题

[已经解决] 用图片做值槽的脚本要怎么写

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2010-10-7
帖子
58
11
 楼主| 发表于 2011-2-19 21:19:46 | 只看该作者
回复 后知后觉 的帖子

---------------------------------------
我按照教程写成了这样
  
  def HP (actor,x,y,w)
  
      
     @hpbar.bitmap=Bitmap.new ("Graphics/Pictures/HPdi.png")
     
     @src_hpbar_rect = Rect.new(0, 0, @hpbar.bitmap.width, @hpbar.bitmap.heigth)
     
     self.contents.blt(x , 32 , @hpbar.bitmap , @src_hpbar_rect )
      
     w1 = @hp.bitmap.width * actor.hp/actor.maxhp
     
     @hp.bitmap=Bitmap.new("Graphics/Pictures/HP.png")
     @src_hp_rect= Rect.new(0, 0, w1, @hp_bitmap.heigth)
     self.contents.blt(x+1, y+1, @hp_bitmap, @src_hp_rect)
     end
   
def MP (actor,x,y,w)
  
      
     @mpbar.bitmap=Bitmap.new ("Graphics/Pictures/MPdi.png")
     
     @src_mpbar_rect = Rect.new(0, 0, @mpbar.bitmap.width, @mpbar.bitmap.heigth)
     
     self.contents.blt(x , 32 , @mpbar.bitmap , @src_mpbar_rect )
      
     w2 = @mp.bitmap.width * actor.mp/actor.maxmp
     
     @mp.bitmap=Bitmap.new("Graphics/Pictures/MP.png")
     @src_mp_rect= Rect.new(0, 0, w2, @mp_bitmap.heigth)
     self.contents.blt(x+1, y+1, @mp_bitmap, @src_mp_rect)
     end
   

然后怎么弄到地图画面去…
还要把以上内容写到一个新类再在scene_map插进@**=**。new 、 @**.dispose  、**.update 吗?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
841 小时
注册时间
2010-8-11
帖子
1135
12
发表于 2011-2-19 21:41:45 | 只看该作者
据我所知,要写一个窗口........
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2010-10-7
帖子
58
13
 楼主| 发表于 2011-2-19 21:43:16 | 只看该作者
那么新建一个窗口 然后初始化后再把内容插进去么?

点评

但是我造了个窗口。把def HP 和def MP插进窗口里边。在scene map里边生成了、dispose了、update了。还是没显示出来…  发表于 2011-2-20 13:39
而且还要在scene中把这个窗口搞出来,并且写上刷新~  发表于 2011-2-19 21:44
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6860
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

14
发表于 2011-2-20 23:03:49 | 只看该作者
写了一小段.
我没用 Window 我用的 Sprite

  1. #==============================================================================
  2. # ■ HpSp
  3. #------------------------------------------------------------------------------
  4. #  使用图片来显示Hp条Sp条的类
  5. #==============================================================================

  6. class HpSp
  7.   Switch_ID = 14    # 当这个开关为ON时才会显示
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #     index    : 队伍中的位置
  11.   #     x        : Hp条底图的x坐标
  12.   #     y        : Hp条底图的y坐标
  13.   #--------------------------------------------------------------------------
  14.   def initialize(index, x, y)
  15.     @index = index
  16.     @actor = $game_party.actors[@index]
  17.     # 生成用来显示的 精灵(Sprite)
  18.     @hpback = Sprite.new
  19.     @hpbar = Sprite.new
  20.     @spback = Sprite.new
  21.     @spbar = Sprite.new
  22.     # 为了方便管理 把精灵都集中起来
  23.     @sprites = []
  24.     @sprites.push(@hpback)
  25.     @sprites.push(@hpbar)
  26.     @sprites.push(@spback)
  27.     @sprites.push(@spbar)
  28.     # 根据队伍内该位置的角色是否存在来设置精灵是否可见
  29.     # 以及对话框是否正在显示中和开关是否打开
  30.     for sprite in @sprites
  31.       sprite.visible = ([email protected]? and
  32.                         !$game_temp.message_window_showing and
  33.                         $game_switches[Switch_ID])
  34.     end
  35.     # 设置显示高度
  36.     @hpback.z = 6000
  37.     @hpbar.z = 6500
  38.     @spback.z = 6000
  39.     @spbar.z = 6500
  40.     # 设置这几个精灵的X、Y坐标 具体数值根据使用的图片的大小和拜访样式而定
  41.     @hpback.x = x
  42.     @hpbar.x = x + 1
  43.     @spback.x = x
  44.     @spbar.x = x + 1
  45.     @hpback.y = y
  46.     @hpbar.y = y + 1
  47.     @spback.y = y + 12
  48.     @spbar.y = y + 13
  49.     # 设置位图
  50.     @hpback.bitmap = Bitmap.new("Graphics/Pictures/HpBack.png")
  51.     @hpbar.bitmap = Bitmap.new("Graphics/Pictures/HpBar.png")
  52.     @spback.bitmap = Bitmap.new("Graphics/Pictures/SpBack.png")
  53.     @spbar.bitmap = Bitmap.new("Graphics/Pictures/SpBar.png")
  54.     # 设置显示区域为整张图
  55.     @hpback.src_rect = Rect.new(0, 0, @hpback.bitmap.width, @hpback.bitmap.height)
  56.     @spback.src_rect = Rect.new(0, 0, @spback.bitmap.width, @spback.bitmap.height)
  57.     @hpbar.src_rect = Rect.new(0, 0, @hpbar.bitmap.width, @hpbar.bitmap.height)
  58.     @spbar.src_rect = Rect.new(0, 0, @spbar.bitmap.width, @spbar.bitmap.height)
  59.     # 如果角色不存在就结束初始化
  60.     return if @actor.nil?
  61.     # 设置根据HpSp变动的Hp条Sp条的显示区域
  62.     @hpbar_w = @hpbar.bitmap.width
  63.     @spbar_w = @spbar.bitmap.width
  64.     @hp_w = @hpbar_w * @actor.hp / @actor.maxhp
  65.     @sp_w = @spbar_w * @actor.sp / @actor.maxsp
  66.     @hpbar.src_rect.set(0, 0, @hp_w, @hpbar.bitmap.height)
  67.     @spbar.src_rect.set(0, 0, @sp_w, @spbar.bitmap.height)
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 释放
  71.   #--------------------------------------------------------------------------
  72.   def dispose
  73.     for sprite in @sprites
  74.       sprite.bitmap.dispose
  75.       sprite.dispose
  76.     end
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 刷新
  80.   #--------------------------------------------------------------------------
  81.   def update
  82.     # 如果记录的角色与队伍里当前位置的角色不一致
  83.     if @actor != $game_party.actors[@index]
  84.       @actor = $game_party.actors[@index]
  85.     end
  86.     for sprite in @sprites
  87.       sprite.visible = ([email protected]? and
  88.                         !$game_temp.message_window_showing and
  89.                         $game_switches[Switch_ID])
  90.     end
  91.     # 如果角色不存在就结束刷新
  92.     return if @actor.nil?
  93.     # 计算需要显示的长度
  94.     hp_w = @hpbar_w * @actor.hp / @actor.maxhp
  95.     sp_w = @spbar_w * @actor.sp / @actor.maxsp
  96.     # 如果计算出来的结果和上次记录的结果不同就重新设置显示区域
  97.     if @hp_w != hp_w
  98.       @hp_w = hp_w
  99.       @hpbar.src_rect.set(0, 0, @hp_w, @hpbar.bitmap.height)
  100.     end
  101.     if @sp_w != sp_w
  102.       @sp_w = sp_w
  103.       @spbar.src_rect.set(0, 0, @sp_w, @spbar.bitmap.height)
  104.     end
  105.   end
  106. end

复制代码
然后找到 Spriteset_Map 的 def initialize
在下面插入

  1.     @hpsp = []
  2.     4.times{|n|@hpsp[n] = HpSp.new(n, 64+n*128, 448)}

复制代码
然后在 def dispose 下面插入

  1.     @hpsp.each{|hpsp|hpsp.dispose}

复制代码
最后在 def update 下面插入

  1.     @hpsp.each{|hpsp|hpsp.update}

复制代码
头像没有做.位置也是粗略的设置.所以以上基本不能直接使用.
仅作参考.
原理是调整sprite 的 src_rect
而不是 用 bitmap 的blt











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2010-10-7
帖子
58
15
 楼主| 发表于 2011-2-21 09:56:12 | 只看该作者
回复 后知后觉 的帖子

太厉害了 - -!  里边有些我都看不懂的。
而且哪个脚本都是,对于z坐标,完全没概念。
其中  # 如果角色不存在就结束刷新   
    return if @actor.nil?

    # 如果角色不存在就结束刷新
    return if @actor.nil?
这2句一样的可是意思怎么就不同呢- -

最后就是- -。一说到图片我只想到bitmap。。至今我对于bitmap(应该是位图的意思吧)和精灵的概念还是有点模糊。。。

我还是太菜了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6860
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

16
发表于 2011-2-21 11:00:32 | 只看该作者
return 是结束其所在方法的运行
在 初始化里运行他 就是结束初始化
在 刷新里运行他就是结束刷新.
脚本从上到下的执行.运行了他.那么该方法在他下面的代码就不会被执行了.
if @actor.nil? 是一个判断嘛
return if @actor.nil? 这样写就不必写 if 判断句的那个最后的 end 了
这个语法在F1里有讲.

位图Bitmap和精灵Sprite 合起来就是显示一张图片.
Bitmap类主要处理的是对图像本身进行操作.比如在某个区域绘制某种颜色.
在某个点绘制某种颜色.描绘文字数字.等.
而精灵Sprite主要处理的就是把这个图片显示在什么地方.也就是x,y坐标.以及这张图片和别的图片的显示层次.也就是z.当2张图片重叠时.谁在上谁在下.选择显示位图的什么区域.也就是src_rect.还有显示是否拉伸旋转什么的.
简单说就是Bitmap是对位图的内容进行操作.而Sprite是处理应该如何去显示这个位图.
单独生成一个Bitmap对象
a = Bitmap.new(32, 32)
把这个位图对象填满红色
a.fill_rect(0,0,32,32,Color.new(255,0,0,255))
这个时候屏幕上是看不到他的.想要看到他就要一个 Sprite
b = Sprite.new
b.bitmap = a
这个时候就能看见屏幕的左上方有一块红色方块了.
Sprite对象的x和y坐标默认是0,0
要把这个红色方块移动到屏幕中间来.就调整sprite的坐标
b.x = 320
b.y = 240











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2010-10-7
帖子
58
17
 楼主| 发表于 2011-2-21 11:13:06 | 只看该作者
回复 后知后觉 的帖子

额、明白了。z坐标在哪用都是这样的原理吗?
我弄好了值槽显示界面,然后学横板战斗界面的,战斗界面中的z跟这个一样吗?
我改了z,发现他们好像分布的近了跟远了而已…
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-28 22:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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