Project1
标题:
用图片做值槽的脚本要怎么写
[打印本页]
作者:
Gunderub
时间:
2011-2-19 00:21
标题:
用图片做值槽的脚本要怎么写
本帖最后由 Gunderub 于 2011-2-19 11:10 编辑
rt。而且要在平时地图画面也能显示。
(有点像arpg那样把HP MP EXP 头像都显示在画面的一角)
比如说hp。
有1张满血时候的血槽图片。
和一张底槽图片。
然后要怎么写呢、
我新手。
作者:
后知后觉
时间:
2011-2-19 09:55
论坛搜索 值槽绘制
这是一个录像教程.作者是 七夕小雨
至于显示在地图上.有这类的现成脚本.
或许就带有用图片来显示的功能.
可以搜索比如:
在地图上显示血条
在地图上显示hp
……
作者:
Gunderub
时间:
2011-2-19 11:03
我就是下不了内个教程。。
作者:
后知后觉
时间:
2011-2-19 11:51
http://hzhj1985.qupan.cc/4177177.html
作者:
Gunderub
时间:
2011-2-19 14:04
本帖最后由 Gunderub 于 2011-2-19 14:06 编辑
回复
后知后觉
的帖子
他说我不是vip不给我下…
由于该文件大于10M且连续90天没有被人下载使用,现在只有VIP高级会员才可以下载此文件!
作者:
Gunderub
时间:
2011-2-19 17:37
我找到了个脚本,图片值槽的。
self.contents.blt(x - 15, y - ch -5 , back, src_rect)这句是什么意思
作者:
后知后觉
时间:
2011-2-19 17:44
http://u.115.com/file/f37ca08477#
值槽绘制.rar.rar
作者:
Gunderub
时间:
2011-2-19 18:26
本帖最后由 Gunderub 于 2011-2-19 18:32 编辑
谢谢楼上的。我下了。看了。有几个地方搞不懂。。
...内教程作者直接在内个Window_BattleStatus的上边定义描绘方法。不用在描绘方法前先定义一个类吗?
还有就是self.contents.blt(x - 15, y - ch -5 , back, src_rect)这句是什么意思 对于F1里边blt的内个方法的解释我看不懂
作者:
后知后觉
时间:
2011-2-19 19:01
他那样定义应该算是一个全局的函数.
属于 Object 类.Object 类算是一个总类.
别的类都是他的子类.
更详细的说明和解读可以去看看 发布区置顶帖里秀秀的走火入魔教程.
bitmapA = Bitmap.new(640, 480)
bitmapB = Bitmap.new(480, 320)
rect = Rect.new(5, 6, 160, 32)
bitmapA.blt(16, 16, bitmapB, rect)
意思是把 bitmapB的 rect 区域 绘制到 bitmapA的以16,16 为左上点的矩形区域内.
self.contents 就是一个 Bitmap 类的实例
作者:
Gunderub
时间:
2011-2-19 19:25
后知后觉 发表于 2011-2-19 19:01
他那样定义应该算是一个全局的函数.
属于 Object 类.Object 类算是一个总类.
别的类都是他的子类.
意思是把 bitmapB的 rect 区域 绘制到 bitmapA的以16,16 为左上点的矩形区域内.
self.contents 就是一个 Bitmap 类的实例
我好好理解下…谢谢你
作者:
Gunderub
时间:
2011-2-19 21:19
回复
后知后觉
的帖子
---------------------------------------
我按照教程写成了这样
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 吗?
作者:
945127391
时间:
2011-2-19 21:41
据我所知,要写一个窗口........
作者:
Gunderub
时间:
2011-2-19 21:43
那么新建一个窗口 然后初始化后再把内容插进去么?
作者:
后知后觉
时间:
2011-2-20 23:03
写了一小段.
我没用 Window 我用的 Sprite
#==============================================================================
# ■ HpSp
#------------------------------------------------------------------------------
# 使用图片来显示Hp条Sp条的类
#==============================================================================
class HpSp
Switch_ID = 14 # 当这个开关为ON时才会显示
#--------------------------------------------------------------------------
# ● 初始化对像
# index : 队伍中的位置
# x : Hp条底图的x坐标
# y : Hp条底图的y坐标
#--------------------------------------------------------------------------
def initialize(index, x, y)
@index = index
@actor = $game_party.actors[@index]
# 生成用来显示的 精灵(Sprite)
@hpback = Sprite.new
@hpbar = Sprite.new
@spback = Sprite.new
@spbar = Sprite.new
# 为了方便管理 把精灵都集中起来
@sprites = []
@sprites.push(@hpback)
@sprites.push(@hpbar)
@sprites.push(@spback)
@sprites.push(@spbar)
# 根据队伍内该位置的角色是否存在来设置精灵是否可见
# 以及对话框是否正在显示中和开关是否打开
for sprite in @sprites
sprite.visible = (
[email protected]
? and
!$game_temp.message_window_showing and
$game_switches[Switch_ID])
end
# 设置显示高度
@hpback.z = 6000
@hpbar.z = 6500
@spback.z = 6000
@spbar.z = 6500
# 设置这几个精灵的X、Y坐标 具体数值根据使用的图片的大小和拜访样式而定
@hpback.x = x
@hpbar.x = x + 1
@spback.x = x
@spbar.x = x + 1
@hpback.y = y
@hpbar.y = y + 1
@spback.y = y + 12
@spbar.y = y + 13
# 设置位图
@hpback.bitmap = Bitmap.new("Graphics/Pictures/HpBack.png")
@hpbar.bitmap = Bitmap.new("Graphics/Pictures/HpBar.png")
@spback.bitmap = Bitmap.new("Graphics/Pictures/SpBack.png")
@spbar.bitmap = Bitmap.new("Graphics/Pictures/SpBar.png")
# 设置显示区域为整张图
@hpback.src_rect = Rect.new(0, 0, @hpback.bitmap.width, @hpback.bitmap.height)
@spback.src_rect = Rect.new(0, 0, @spback.bitmap.width, @spback.bitmap.height)
@hpbar.src_rect = Rect.new(0, 0, @hpbar.bitmap.width, @hpbar.bitmap.height)
@spbar.src_rect = Rect.new(0, 0, @spbar.bitmap.width, @spbar.bitmap.height)
# 如果角色不存在就结束初始化
return if @actor.nil?
# 设置根据HpSp变动的Hp条Sp条的显示区域
@hpbar_w = @hpbar.bitmap.width
@spbar_w = @spbar.bitmap.width
@hp_w = @hpbar_w * @actor.hp / @actor.maxhp
@sp_w = @spbar_w * @actor.sp / @actor.maxsp
@hpbar.src_rect.set(0, 0, @hp_w, @hpbar.bitmap.height)
@spbar.src_rect.set(0, 0, @sp_w, @spbar.bitmap.height)
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
def dispose
for sprite in @sprites
sprite.bitmap.dispose
sprite.dispose
end
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def update
# 如果记录的角色与队伍里当前位置的角色不一致
if @actor != $game_party.actors[@index]
@actor = $game_party.actors[@index]
end
for sprite in @sprites
sprite.visible = (
[email protected]
? and
!$game_temp.message_window_showing and
$game_switches[Switch_ID])
end
# 如果角色不存在就结束刷新
return if @actor.nil?
# 计算需要显示的长度
hp_w = @hpbar_w * @actor.hp / @actor.maxhp
sp_w = @spbar_w * @actor.sp / @actor.maxsp
# 如果计算出来的结果和上次记录的结果不同就重新设置显示区域
if @hp_w != hp_w
@hp_w = hp_w
@hpbar.src_rect.set(0, 0, @hp_w, @hpbar.bitmap.height)
end
if @sp_w != sp_w
@sp_w = sp_w
@spbar.src_rect.set(0, 0, @sp_w, @spbar.bitmap.height)
end
end
end
复制代码
然后找到 Spriteset_Map 的 def initialize
在下面插入
@hpsp = []
4.times{|n|@hpsp[n] = HpSp.new(n, 64+n*128, 448)}
复制代码
然后在 def dispose 下面插入
@hpsp.each{|hpsp|hpsp.dispose}
复制代码
最后在 def update 下面插入
@hpsp.each{|hpsp|hpsp.update}
复制代码
头像没有做.位置也是粗略的设置.所以以上基本不能直接使用.
仅作参考.
原理是调整sprite 的 src_rect
而不是 用 bitmap 的blt
作者:
Gunderub
时间:
2011-2-21 09:56
回复
后知后觉
的帖子
太厉害了 - -! 里边有些我都看不懂的。
而且哪个脚本都是,对于z坐标,完全没概念。
其中 # 如果角色不存在就结束刷新
return if @actor.nil?
# 如果角色不存在就结束刷新
return if @actor.nil?
这2句一样的可是意思怎么就不同呢- -
最后就是- -。一说到图片我只想到bitmap。。至今我对于bitmap(应该是位图的意思吧)和精灵的概念还是有点模糊。。。
我还是太菜了
作者:
后知后觉
时间:
2011-2-21 11:00
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
作者:
Gunderub
时间:
2011-2-21 11:13
回复
后知后觉
的帖子
额、明白了。z坐标在哪用都是这样的原理吗?
我弄好了值槽显示界面,然后学横板战斗界面的,战斗界面中的z跟这个一样吗?
我改了z,发现他们好像分布的近了跟远了而已…
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1