首先要明确“显示图片”的脚本(事件中的脚本)调用方法:
# name : 文件名
# origin : 原点
# x : X 坐标
# y : Y 坐标
# zoom_x : X 方向放大率
# zoom_y : Y 方向放大率
# opacity : 不透明度
# blend_type : 合成方式
# duration : 时间
显示图片
$game_screen.pictures[number].show(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type) 移动图片
$game_screen.pictures[number].move(duration, origin, x, y, zoom_x, zoom_y, opacity, blend_type)旋转图片:
$game_screen.pictures[number].rotate(速度)
删除图片:
$game_screen.pictures[number].erase
1、修改范围:Game_Screen类
@pictures = [nil]
for i in 1..100
@pictures.push(Game_Picture.new(i))
end
其中@pictures是容纳图片的数组,默认为100,若想扩充先需要把这里的上限扩大,这里暂时改为200
for i in 1..200
@pictures.push(Game_Picture.new(i))
end
2、修改范围:Game_Screen类
为新增加的部分添节刷新方法,找到
if $game_temp.in_battle
for i in 51..100
@pictures.update
end
else
for i in 1..50
@pictures.update
end
end
这里是对图片的刷新,其中$game_temp.in_battle表示在战斗中,全句之意,若在战斗中则刷新50-100号图片,反之刷新1-50号图片,这里改为:
if $game_temp.in_battle
for i in 51..100
@pictures.update
end
else
for i in 1..200
@pictures.update
end
end
3、修改范围:Sprite_Picture类
光有肚量还不行,必须让其显示,找到
for i in 1..50
@picture_sprites.push(Sprite_Picture.new(@viewport2,
$game_screen.pictures))
end
修改为
for i in 1..200
@picture_sprites.push(Sprite_Picture.new(@viewport2,
$game_screen.pictures))
end
4、修改范围:Spriteset_Battle类
找到:
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures))
end
可以见到战斗场景添加是51..100编号的图片,这部分修改并非必要,因为虽然事件中的“显示图片”只可以填写1..50的编号,实际上处于战斗时解释器会自动将编号增加50以对应51..100。因为事件的显示图片调用的是解释器中的command_231方法:
def command_231
# 获取图片编号
number = @parameters[0] + ($game_temp.in_battle ? 50 : 0)
而直接利用$game_screen.pictures[number].show来显示图片则不会有这种问题。
注意图片数量上限越高,刷新的消耗也越高,请自己处理好需求与效率的平衡。
1、修改范围:Game_Picture类
RM默认是利用$game_screen.pictures[number].rotate(速度)处理旋转,“速度”是个增量,若想让图片旋转指定的角度则比较麻烦。
将:
attr_reader :angle # 旋转角度
改为:
attr_accessor :angle # 旋转角度
之后可利用$game_screen.pictures[number].angle直接指定图片的角度。
2、修改范围:Game_Picture类
为旋转定义新的移动方法。:
@move_angle = 0 # 新角度
@rotate_duration = 0 # 旋转时间
然后定义为新变量赋值的新方法:
#--------------------------------------------------------------------------
# ● 旋转移动
# angle : 新角度
# duration : 时间
#--------------------------------------------------------------------------
def rotate_move(angle,duration)
@move_angle = (angle - @angle) / duration
@rotate_duration = duration
return
end
最后在update的部分添加处理旋转的刷新即可。
if @rotate_duration > 0
@angle += @move_angle
@rotate_duration -= 1
end
这样通过$game_screen.pictures[number].rotate_move(新角度,时间)的方式就可以实现指定角度的旋转移动。
1、修改范围:Game_Picture类
添加新属性
attr_accessor :mirror # 翻转
并在initialize部分初始化
@mirror = false
2、修改范围:Sprite_Picture类
在update部分添加新属性的刷新
self.mirror = @picture.mirror
以后便可利用$game_screen.pictures[number].mirror=true/false直接指定图片是否翻转
3、修改范围:Game_Picture类
定义翻转移动方法
先在initialize部分添加四个操作用变量:
@move_mirror = false # 翻转标志
@mirror_duration = 0 # 翻转时间
@mirror_duration_half = 0 # 翻转点
@mirror_zoom = 0 # 翻转缩放量
定义为新变量赋值的新方法:
#--------------------------------------------------------------------------
# ● 翻转移动
#--------------------------------------------------------------------------
def mir_move(mir,duration)
return if @mirror == mir
@mirror_duration_half = duration / 2
@mirror_duration = @mirror_duration_half * 2
@mirror_zoom = @zoom_x / @mirror_duration_half
@move_mirror = mir
return
end
最后在update的部分添加处理翻转的刷新即可。
if @mirror_duration > 0
if @move_mirror == @mirror
@zoom_x += @mirror_zoom
else
@zoom_x -= @mirror_zoom
end
@mirror_duration -= 1
if @mirror_duration == @mirror_duration_half
@mirror = @move_mirror
end
end
这样通过$game_screen.pictures[number].mir_move(是否翻转,时间)的方式就可以实现渐变翻转。
1、修改范围:Game_Picture类
添加新属性
attr_accessor :bush_depth # 繁茂度
并在initialize部分初始化
@bush_depth = 0 # 繁茂度
2、修改范围:Sprite_Picture类
在update部分添加新属性的刷新
self.bush_depth = @picture.bush_depth
以后便可利用$game_screen.pictures[number].bush_depth=数值,直接指定图片的半透明点数。
3、修改范围:Game_Picture类
定义繁茂移动方法
先在initialize部分添加操作用变量:
@move_bush = 0 # 繁茂增量
@bush_duration = 0 # 繁茂变化时间
定义为新变量赋值的新方法:
#--------------------------------------------------------------------------
# ● 繁茂移动
#--------------------------------------------------------------------------
def bush_move(depth,duration)
return if duration == 0
@move_bush = (depth - @bush_depth).to_f / duration
@bush_duration = duration
return
end
最后在update的部分添加处理繁茂变化的刷新即可。
if @bush_duration > 0
@bush_depth += @move_bush
@bush_duration -= 1
end
这样通过$game_screen.pictures[number].bush_move(深度,时间)的方式就可以实现渐变繁茂变化。
修改范围:Sprite_Picture类
查找到:
# 设置传送原点
if @picture.origin == 0
self.ox = 0
self.oy = 0
else
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height / 2
end
可以见到,当原点==0时,原点为(0,0)即左上角;
除此以外原点为(self.bitmap.width / 2,self.bitmap.height / 2)即中心,我们将其改为case的形式,方便添加新的原点,例如==2时为右下角,==3时为底边中点,你可以随自己想法任意添加,而==11时根据101与102号变量(宽、高百分比)设定原点,当==12根据101与102号变量直接执行原点数值。
case @picture.origin
when 0
self.ox = 0
self.oy = 0
when 1
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height / 2
when 2
self.ox = self.bitmap.width
self.oy = self.bitmap.height
when 3
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height
when 11
self.ox = $game_variables[101].to_f / 100 * self.bitmap.width
self.oy = $game_variables[102].to_f / 100 * self.bitmap.height
when 12
self.ox = $game_variables[101]
self.oy = $game_variables[102]
end
修改范围:Game_Picture类
将所有的attr_reader改为attr_accessor,即:
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :number # 图片编号
attr_reader :name # 文件名
attr_reader :origin # 原点
attr_reader :x # X 坐标
attr_reader :y # Y 坐标
attr_reader :zoom_x # X 方向放大率
attr_reader :zoom_y # Y 方向放大率
attr_reader :opacity # 不透明度
attr_reader :blend_type # 合成方式
attr_reader :tone # 色调
改为:
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :number # 图片编号
attr_accessor :name # 文件名
attr_accessor :origin # 原点
attr_accessor :x # X 坐标
attr_accessor :y # Y 坐标
attr_accessor :zoom_x # X 方向放大率
attr_accessor :zoom_y # Y 方向放大率
attr_accessor :opacity # 不透明度
attr_accessor :blend_type # 合成方式
attr_accessor :tone # 色调
如此,图片的每个属性都可单独设置,例如通过$game_screen.pictures[number].opacity=数值,直接更改图片的透明度,这一小步的修改实际的意义是非常重大的,例如当图片处于移动中时,若想更换图片,默认情况下只能通过.show的方式,但如此移动会被中断,但通过$game_screen.pictures[number].name=新图片名,的方法就可以保持原有编号图片的移动状态,整个图片强化的核心就是该步,只要对事件操作具体一定能力,可以延伸出许多正常情况难以达成的效果,具体应用,自己慢慢体会。
首先要明确“显示图片”的脚本(事件中的脚本)调用方法:
# name : 文件名
# origin : 原点
# x : X 坐标
# y : Y 坐标
# zoom_x : X 方向放大率
# zoom_y : Y 方向放大率
# opacity : 不透明度
# blend_type : 合成方式
# duration : 时间
显示图片
$game_screen.pictures[number].show(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type) 移动图片
$game_screen.pictures[number].move(duration, origin, x, y, zoom_x, zoom_y, opacity, blend_type)旋转图片:
$game_screen.pictures[number].rotate(速度)
删除图片:
$game_screen.pictures[number].erase
1、修改范围:Game_Screen类
@pictures = [nil]
for i in 1..100
@pictures.push(Game_Picture.new(i))
end
其中@pictures是容纳图片的数组,默认为100,若想扩充先需要把这里的上限扩大,这里暂时改为200
for i in 1..200
@pictures.push(Game_Picture.new(i))
end
2、修改范围:Game_Screen类
为新增加的部分添节刷新方法,找到
if $game_temp.in_battle
for i in 51..100
@pictures.update
end
else
for i in 1..50
@pictures.update
end
end
这里是对图片的刷新,其中$game_temp.in_battle表示在战斗中,全句之意,若在战斗中则刷新50-100号图片,反之刷新1-50号图片,这里改为:
if $game_temp.in_battle
for i in 51..100
@pictures.update
end
else
for i in 1..200
@pictures.update
end
end
3、修改范围:Sprite_Picture类
光有肚量还不行,必须让其显示,找到
for i in 1..50
@picture_sprites.push(Sprite_Picture.new(@viewport2,
$game_screen.pictures))
end
修改为
for i in 1..200
@picture_sprites.push(Sprite_Picture.new(@viewport2,
$game_screen.pictures))
end
4、修改范围:Spriteset_Battle类
找到:
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures))
end
可以见到战斗场景添加是51..100编号的图片,这部分修改并非必要,因为虽然事件中的“显示图片”只可以填写1..50的编号,实际上处于战斗时解释器会自动将编号增加50以对应51..100。因为事件的显示图片调用的是解释器中的command_231方法:
def command_231
# 获取图片编号
number = @parameters[0] + ($game_temp.in_battle ? 50 : 0)
而直接利用$game_screen.pictures[number].show来显示图片则不会有这种问题。
注意图片数量上限越高,刷新的消耗也越高,请自己处理好需求与效率的平衡。
1、修改范围:Game_Picture类
RM默认是利用$game_screen.pictures[number].rotate(速度)处理旋转,“速度”是个增量,若想让图片旋转指定的角度则比较麻烦。
将:
attr_reader :angle # 旋转角度
改为:
attr_accessor :angle # 旋转角度
之后可利用$game_screen.pictures[number].angle直接指定图片的角度。
2、修改范围:Game_Picture类
为旋转定义新的移动方法。:
@move_angle = 0 # 新角度
@rotate_duration = 0 # 旋转时间
然后定义为新变量赋值的新方法:
#--------------------------------------------------------------------------
# ● 旋转移动
# angle : 新角度
# duration : 时间
#--------------------------------------------------------------------------
def rotate_move(angle,duration)
@move_angle = (angle - @angle) / duration
@rotate_duration = duration
return
end
最后在update的部分添加处理旋转的刷新即可。
if @rotate_duration > 0
@angle += @move_angle
@rotate_duration -= 1
end
这样通过$game_screen.pictures[number].rotate_move(新角度,时间)的方式就可以实现指定角度的旋转移动。
1、修改范围:Game_Picture类
添加新属性
attr_accessor :mirror # 翻转
并在initialize部分初始化
@mirror = false
2、修改范围:Sprite_Picture类
在update部分添加新属性的刷新
self.mirror = @picture.mirror
以后便可利用$game_screen.pictures[number].mirror=true/false直接指定图片是否翻转
3、修改范围:Game_Picture类
定义翻转移动方法
先在initialize部分添加四个操作用变量:
@move_mirror = false # 翻转标志
@mirror_duration = 0 # 翻转时间
@mirror_duration_half = 0 # 翻转点
@mirror_zoom = 0 # 翻转缩放量
定义为新变量赋值的新方法:
#--------------------------------------------------------------------------
# ● 翻转移动
#--------------------------------------------------------------------------
def mir_move(mir,duration)
return if @mirror == mir
@mirror_duration_half = duration / 2
@mirror_duration = @mirror_duration_half * 2
@mirror_zoom = @zoom_x / @mirror_duration_half
@move_mirror = mir
return
end
最后在update的部分添加处理翻转的刷新即可。
if @mirror_duration > 0
if @move_mirror == @mirror
@zoom_x += @mirror_zoom
else
@zoom_x -= @mirror_zoom
end
@mirror_duration -= 1
if @mirror_duration == @mirror_duration_half
@mirror = @move_mirror
end
end
这样通过$game_screen.pictures[number].mir_move(是否翻转,时间)的方式就可以实现渐变翻转。
1、修改范围:Game_Picture类
添加新属性
attr_accessor :bush_depth # 繁茂度
并在initialize部分初始化
@bush_depth = 0 # 繁茂度
2、修改范围:Sprite_Picture类
在update部分添加新属性的刷新
self.bush_depth = @picture.bush_depth
以后便可利用$game_screen.pictures[number].bush_depth=数值,直接指定图片的半透明点数。
3、修改范围:Game_Picture类
定义繁茂移动方法
先在initialize部分添加操作用变量:
@move_bush = 0 # 繁茂增量
@bush_duration = 0 # 繁茂变化时间
定义为新变量赋值的新方法:
#--------------------------------------------------------------------------
# ● 繁茂移动
#--------------------------------------------------------------------------
def bush_move(depth,duration)
return if duration == 0
@move_bush = (depth - @bush_depth).to_f / duration
@bush_duration = duration
return
end
最后在update的部分添加处理繁茂变化的刷新即可。
if @bush_duration > 0
@bush_depth += @move_bush
@bush_duration -= 1
end
这样通过$game_screen.pictures[number].bush_move(深度,时间)的方式就可以实现渐变繁茂变化。
修改范围:Sprite_Picture类
查找到:
# 设置传送原点
if @picture.origin == 0
self.ox = 0
self.oy = 0
else
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height / 2
end
可以见到,当原点==0时,原点为(0,0)即左上角;
除此以外原点为(self.bitmap.width / 2,self.bitmap.height / 2)即中心,我们将其改为case的形式,方便添加新的原点,例如==2时为右下角,==3时为底边中点,你可以随自己想法任意添加,而==11时根据101与102号变量(宽、高百分比)设定原点,当==12根据101与102号变量直接执行原点数值。
case @picture.origin
when 0
self.ox = 0
self.oy = 0
when 1
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height / 2
when 2
self.ox = self.bitmap.width
self.oy = self.bitmap.height
when 3
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height
when 11
self.ox = $game_variables[101].to_f / 100 * self.bitmap.width
self.oy = $game_variables[102].to_f / 100 * self.bitmap.height
when 12
self.ox = $game_variables[101]
self.oy = $game_variables[102]
end
修改范围:Game_Picture类
将所有的attr_reader改为attr_accessor,即:
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :number # 图片编号
attr_reader :name # 文件名
attr_reader :origin # 原点
attr_reader :x # X 坐标
attr_reader :y # Y 坐标
attr_reader :zoom_x # X 方向放大率
attr_reader :zoom_y # Y 方向放大率
attr_reader :opacity # 不透明度
attr_reader :blend_type # 合成方式
attr_reader :tone # 色调
改为:
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :number # 图片编号
attr_accessor :name # 文件名
attr_accessor :origin # 原点
attr_accessor :x # X 坐标
attr_accessor :y # Y 坐标
attr_accessor :zoom_x # X 方向放大率
attr_accessor :zoom_y # Y 方向放大率
attr_accessor :opacity # 不透明度
attr_accessor :blend_type # 合成方式
attr_accessor :tone # 色调
如此,图片的每个属性都可单独设置,例如通过$game_screen.pictures[number].opacity=数值,直接更改图片的透明度,这一小步的修改实际的意义是非常重大的,例如当图片处于移动中时,若想更换图片,默认情况下只能通过.show的方式,但如此移动会被中断,但通过$game_screen.pictures[number].name=新图片名,的方法就可以保持原有编号图片的移动状态,整个图片强化的核心就是该步,只要对事件操作具体一定能力,可以延伸出许多正常情况难以达成的效果,具体应用,自己慢慢体会。
以下引用尤莉斯于2007-5-6 20:47:54的发言:
。。刚在blog上看到。。。。
以下引用美兽于2007-5-6 20:51:19的发言:
以下引用尤莉斯于2007-5-6 20:47:54的发言:
。。刚在blog上看到。。。。
大姐姐,上次那个问题偶望眼欲穿等消息呢……
以下引用尤莉斯于2007-5-6 23:34:44的发言:
以下引用美兽于2007-5-6 20:51:19的发言:
以下引用尤莉斯于2007-5-6 20:47:54的发言:
。。刚在blog上看到。。。。
大姐姐,上次那个问题偶望眼欲穿等消息呢……
哪个。。。。。==bbbbbbbbbbbbbbbbbbbb
某人最近JAVA中。。。。。。。==b。。这里估计不怎么会来了。。。。。。。。。。
PS:不好意思啊。。其实这本来就是偶的号。。。==b
[本贴由作者于 2007-5-6 23:39:19 最后编辑]
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |