#==============================================================================
# ■ Scene_ZPT
#------------------------------------------------------------------------------
# 旋转拼图 1.01 ——海的那边
#==============================================================================
$Pt_Victory = 5 #完成打开开关
$OPA_N = 120 #未选择中的透明度
$OPA_Y = 255 #选择中的透明度
$SITE_X = 255 #图片的X坐标
$SITE_Y = 255 #图片的Y坐标
=begin
版本1.01
1.修正了图片显示错误的问题,写糊涂了。
2.修正了返回地图时地图没有刷新的问题。
3.优化了结束拼图消失的问题。
另:我的设定是,第一盘赢后打开开关,但只要再进一次拼图开关就变关闭了,只要是不是
再胜利开关就是关闭状态,就是中途退出,开关就是关闭。不想要这设定的,删除166行的
$game_switches[$Pt_Victory] = false。
呃,这个就是模仿刺客信条2的真相解密里的那个旋转拼图,这玩意是我用在我的游戏
里的,我需要的功能都有,所以大概就这个样子,或许写得不是很人性化。
这玩意的使用方法:方向键左右选择高亮的光标;上下是逆顺时针选择。
事件里写$scene = Scene_ZPT.new("pt") ,"pt"是一个参数,
就是游戏Graphics/Pictures/目录里的拼图图片,图片写成 pt_01、pt_02到pt_05五张。
目录里还有一张pt_00,那张是完整是图片,是最后拼完后显示的。黑色的那个back的背后
的挡板,如果有朋友换背景图片,这个高亮选中的方法不至于出现奇葩的现象。
哦,还有一个,就是刺客信条2里的这个拼图可没有这么简单,它旋转一个是时候,别的
也会跟着一起动,这个嘛,大家有需要的自己制作了,很容易旋转的when那里,别的跟着
旋转就行。
BUG嘛,五个随机数,有可能出现一进游戏就胜利的情况,虽然微乎其微,但是理论上是可能滴。
我暂时没有发现。有发现的朋友说一声,能不能修复我不知道。 - -b
冲突,我想不太可能。
大家放进游戏的时候,自己添加背景图片吧,加个Sprite,再释放就行。
对了,求助一下大神,为什么旋转的时候会出现图片衔接出现有一点缝隙的?旋转到这角度
有,另一个角度就没了,不知道是不是我们PS制作得不严谨?
=end
class Scene_ZPT
def initialize(pic)
@pt_pic = pic
end
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
#生成圆形背景图片
@ptb = Sprite.new
@ptb.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_back.png")
@ptb.x = $SITE_X
@ptb.y = $SITE_Y
@ptb.ox = @ptb.bitmap.width / 2
@ptb.oy = @ptb.bitmap.height / 2
#生成轴图片
@pt1 = Sprite.new
@pt1.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_1.png")
@pt1.x = $SITE_X
@pt1.y = $SITE_Y
@pt1.ox = @pt1.bitmap.width / 2
@pt1.oy = @pt1.bitmap.height / 2
@pt1.opacity = $OPA_N
#生成拼图 2
@pt2 = Sprite.new
@pt2.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_2.png")
@pt2.x = @pt1.x
@pt2.y = @pt1.y
@pt2.ox = @pt2.bitmap.width / 2
@pt2.oy = @pt2.bitmap.height / 2
@pt2.opacity = $OPA_N
#生成拼图 3
@pt3 = Sprite.new
@pt3.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_3.png")
@pt3.x = @pt1.x
@pt3.y = @pt1.y
@pt3.ox = @pt3.bitmap.width / 2
@pt3.oy = @pt3.bitmap.height / 2
@pt3.opacity = $OPA_N
#生成拼图 4
@pt4 = Sprite.new
@pt4.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_4.png")
@pt4.x = @pt1.x
@pt4.y = @pt1.y
@pt4.ox = @pt4.bitmap.width / 2
@pt4.oy = @pt4.bitmap.height / 2
@pt4.opacity = $OPA_N
#生成拼图 5
@pt5 = Sprite.new
@pt5.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_5.png")
@pt5.x = @pt1.x
@pt5.y = @pt1.y
@pt5.ox = @pt5.bitmap.width / 2
@pt5.oy = @pt5.bitmap.height / 2
@pt5.opacity = $OPA_N
#生成完整图
@pt0 = Sprite.new
@pt0.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_0.png")
@pt0.x = $SITE_X
@pt0.y = $SITE_Y
@pt0.opacity = 0
@pt0.ox = @pt1.bitmap.width / 2
@pt0.oy = @pt1.bitmap.height / 2
@update_begin = 1
@num = 1 #开始的光标亮在哪里
game_begin
#--------------菜单--------------
# 生成命令窗口
s1 = "重新开始"
s2 = "退出"
@command_window = Window_Command.new(180,[s1,s2])
@command_window.x = 240
@command_window.y = 160
@command_window.z = 1000
@command_window.back_opacity = 180
@command_window.visible = false
@command_window.active = false
@command_window.index = 0
#-------------------------------
# 执行过渡
Graphics.transition(40)
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面情报
update
# 如果画面被切换的话就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
#释放窗口
@command_window.dispose
# 释放拼图图形
@ptb.bitmap.dispose
@ptb.dispose
@pt1.bitmap.dispose
@pt1.dispose
@pt2.bitmap.dispose
@pt2.dispose
@pt3.bitmap.dispose
@pt3.dispose
@pt4.bitmap.dispose
@pt4.dispose
@pt5.bitmap.dispose
@pt5.dispose
@pt0.bitmap.dispose
@pt0.dispose
# 执行过度
Graphics.transition(20)
# 准备过渡
Graphics.freeze
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
$game_switches[$Pt_Victory] = false
case @update_begin
when 1
#----呼出菜单
if Input.trigger?(Input::B)
@update_begin = 2
@command_window.visible = true
@command_window.active = true
return
end
#----
#用变量判断旋转那张图片
if @num > 1
if Input.trigger?(Input::RIGHT)
@num -= 1
Audio.se_play("Audio/SE/002-System02", 100, 100)
end
end
if @num < 4
if Input.trigger?(Input::LEFT)
@num += 1
Audio.se_play("Audio/SE/002-System02", 100, 100)
end
end
case @num
when 1 #p5
return_pic #——还原图片透明
@pt5.opacity = $OPA_Y #选中透明度变化
# 按 上 的情况
if Input.trigger?(Input::UP)
@pt5.angle = @pt5.angle + 15
Audio.se_play("Audio/SE/001-System01", 100, 100)
return
end
#按 下 的情况
if Input.trigger?(Input::DOWN)
@pt5.angle = @pt5.angle - 15
Audio.se_play("Audio/SE/001-System01", 100, 100)
return
end
when 2 #p4
return_pic
@pt4.opacity = $OPA_Y
# 按 上 的情况
if Input.trigger?(Input::UP)
@pt4.angle = @pt4.angle + 15
Audio.se_play("Audio/SE/001-System01", 100, 100)
return
end
#按 下 的情况
if Input.trigger?(Input::DOWN)
@pt4.angle = @pt4.angle - 15
Audio.se_play("Audio/SE/001-System01", 100, 100)
return
end
when 3 #p3
return_pic
@pt3.opacity = $OPA_Y
# 按 上 的情况
if Input.trigger?(Input::UP)
@pt3.angle = @pt3.angle + 15
Audio.se_play("Audio/SE/001-System01", 100, 100)
return
end
#按 下 的情况
if Input.trigger?(Input::DOWN)
@pt3.angle = @pt3.angle - 15
Audio.se_play("Audio/SE/001-System01", 100, 100)
return
end
when 4 #p2
return_pic
@pt2.opacity = $OPA_Y
# 按 上 的情况
if Input.trigger?(Input::UP)
@pt2.angle = @pt2.angle + 15
Audio.se_play("Audio/SE/001-System01", 100, 100)
return
end
#按 下 的情况
if Input.trigger?(Input::DOWN)
@pt2.angle = @pt2.angle - 15
Audio.se_play("Audio/SE/001-System01", 100, 100)
return
end
end #——end case @num
victory_pt
when 2
update_command
end #--end case @update_begin
end #——end update
#--------------------------------------------------------------------------
# ● 窗口刷新画面
#--------------------------------------------------------------------------
def update_command
@command_window.update
if Input.trigger?(Input::B)
@update_begin = 1
@command_window.visible = false
@command_window.active = false
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 命令窗口的光标位置分支
case @command_window.index
when 0
@update_begin = 1
@command_window.visible = false
@command_window.active = false
game_begin
when 1
$scene = Scene_Map.new
$game_map.refresh
end
end
end #---end update_command
#--------------------------------------------------------------------------
# ● 还原透明度
#--------------------------------------------------------------------------
def return_pic
#还原选择透明度
@pt2.opacity = $OPA_N
@pt3.opacity = $OPA_N
@pt4.opacity = $OPA_N
@pt5.opacity = $OPA_N
end
#--------------------------------------------------------------------------
# ● 开始处理
#--------------------------------------------------------------------------
def game_begin
if @pt2.angle && @pt3.angle && @pt4.angle && @pt5.angle == 0 #我也不知道这种
@pt2.angle = rand(360) * 15 #方法管不管用。- -
@pt3.angle = rand(360) * 15
@pt4.angle = rand(360) * 15
@pt5.angle = rand(360) * 15
else
@pt2.angle = rand(360) * 15
@pt3.angle = rand(360) * 15
@pt4.angle = rand(360) * 15
@pt5.angle = rand(360) * 15
end
end
#--------------------------------------------------------------------------
# ● 结束处理
#--------------------------------------------------------------------------
def victory_pt
@finish_pt2 = @pt2.angle % 360
@finish_pt3 = @pt3.angle % 360
@finish_pt4 = @pt4.angle % 360
@finish_pt5 = @pt5.angle % 360
if @finish_pt2 ==0 && @finish_pt3 == 0 && @finish_pt4 ==0 && @finish_pt5 == 0
Audio.me_play("Audio/ME/001-Victory01", 80, 100)
for i in 0..15
@pt0.opacity+=18
Graphics.update
end
for j in 0..200 #----等待,我只能想出这方法了,有别的方法告诉我一声! - -b
Graphics.update
end
$game_switches[$Pt_Victory] = true
$scene = Scene_Map.new
$game_map.refresh #刷新地图,奇怪了,以前没有用过,害我郁闷了半天。
return
end
end
end #——end class