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

Project1

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

[原创发布] 【已修正 版本1.01】仿。刺客信条2的旋转拼图

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
76 小时
注册时间
2006-7-7
帖子
194
跳转到指定楼层
1
发表于 2012-11-11 21:37:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 海的那边 于 2012-11-12 13:42 编辑

      我本来是不需要参数传递和按ESC弹出菜单的,但是为了方便朋友们,干脆一起写出来了。这个完全就是事件的脚本化,我怕事件写多了,写得乱七八糟,不好修改,干脆写成脚本了。我的水平也就这样了,这东西完全是事件的思维,不断的if,case,when,高手轻怕。我也知道,这玩意写得很繁琐,我也有好的想法写简单,但是水平有限,会出现自己都莫名其妙的问题,干脆就写成这样了。

版本1.01
1.修正了图片显示错误的问题,写糊涂了。
2.修正了返回地图时地图没有刷新的问题。
3.优化了结束拼图消失的问题。
另:我的设定是,第一盘赢后打开开关,但只要再进一次拼图开关就变关闭了,只要是不是
再胜利开关就是关闭状态,就是中途退出,开关就是关闭。不想要这设定的,删除166行的
$game_switches[$Pt_Victory] = false。


呃,还有一个问题,是我疏忽了,我这种播放SE\ME的方法不好,要是碰到一些音量控制脚本是无效的。所以,大家可以改一下,我说说就行了,不在脚本里改了。把177~193行的两个Audio.se_play("Audio/SE/002-System02", 100, 100)都改成$game_system.se_play($data_system.decision_se)。把194行左右的case @num里的所有播放音效改成$game_system.se_play($data_system.cursor_se)
接着,把329行左右的Audio.me_play("Audio/ME/001-Victory01", 100, 100),改成$game_system.me_play($game_system.battle_end_me)

--------------------------------------------------------------------华丽的分割线-----------------------------------------------------------
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_ZPT
  3. #------------------------------------------------------------------------------
  4. #  旋转拼图  1.01                     ——海的那边
  5. #==============================================================================
  6. $Pt_Victory = 5       #完成打开开关
  7. $OPA_N = 120         #未选择中的透明度
  8. $OPA_Y = 255         #选择中的透明度
  9. $SITE_X = 255        #图片的X坐标
  10. $SITE_Y = 255        #图片的Y坐标
  11. =begin
  12. 版本1.01
  13. 1.修正了图片显示错误的问题,写糊涂了。
  14. 2.修正了返回地图时地图没有刷新的问题。
  15. 3.优化了结束拼图消失的问题。
  16. 另:我的设定是,第一盘赢后打开开关,但只要再进一次拼图开关就变关闭了,只要是不是
  17. 再胜利开关就是关闭状态,就是中途退出,开关就是关闭。不想要这设定的,删除166行的
  18. $game_switches[$Pt_Victory] = false。
  19.  
  20. 呃,这个就是模仿刺客信条2的真相解密里的那个旋转拼图,这玩意是我用在我的游戏
  21. 里的,我需要的功能都有,所以大概就这个样子,或许写得不是很人性化。
  22.  
  23. 这玩意的使用方法:方向键左右选择高亮的光标;上下是逆顺时针选择。
  24. 事件里写$scene = Scene_ZPT.new("pt") ,"pt"是一个参数,
  25. 就是游戏Graphics/Pictures/目录里的拼图图片,图片写成 pt_01、pt_02到pt_05五张。
  26. 目录里还有一张pt_00,那张是完整是图片,是最后拼完后显示的。黑色的那个back的背后
  27. 的挡板,如果有朋友换背景图片,这个高亮选中的方法不至于出现奇葩的现象。
  28.  
  29. 哦,还有一个,就是刺客信条2里的这个拼图可没有这么简单,它旋转一个是时候,别的
  30. 也会跟着一起动,这个嘛,大家有需要的自己制作了,很容易旋转的when那里,别的跟着
  31. 旋转就行。
  32.  
  33. BUG嘛,五个随机数,有可能出现一进游戏就胜利的情况,虽然微乎其微,但是理论上是可能滴。
  34. 我暂时没有发现。有发现的朋友说一声,能不能修复我不知道。 - -b
  35. 冲突,我想不太可能。
  36.  
  37. 大家放进游戏的时候,自己添加背景图片吧,加个Sprite,再释放就行。
  38.  
  39. 对了,求助一下大神,为什么旋转的时候会出现图片衔接出现有一点缝隙的?旋转到这角度
  40. 有,另一个角度就没了,不知道是不是我们PS制作得不严谨?
  41. =end
  42.  
  43. class Scene_ZPT
  44.   def initialize(pic)
  45.     @pt_pic = pic
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 主处理
  49.   #--------------------------------------------------------------------------
  50.   def main
  51.     #生成圆形背景图片
  52.     @ptb = Sprite.new
  53.     @ptb.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_back.png")
  54.     @ptb.x = $SITE_X
  55.     @ptb.y = $SITE_Y
  56.     @ptb.ox = @ptb.bitmap.width / 2
  57.     @ptb.oy = @ptb.bitmap.height / 2
  58.     #生成轴图片
  59.     @pt1 = Sprite.new
  60.     @pt1.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_1.png")
  61.     @pt1.x = $SITE_X
  62.     @pt1.y = $SITE_Y
  63.     @pt1.ox = @pt1.bitmap.width / 2
  64.     @pt1.oy = @pt1.bitmap.height / 2
  65.     @pt1.opacity = $OPA_N
  66.     #生成拼图 2
  67.     @pt2 = Sprite.new
  68.     @pt2.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_2.png")   
  69.     @pt2.x = @pt1.x
  70.     @pt2.y = @pt1.y
  71.     @pt2.ox = @pt2.bitmap.width / 2
  72.     @pt2.oy = @pt2.bitmap.height / 2
  73.     @pt2.opacity = $OPA_N
  74.     #生成拼图 3
  75.     @pt3 = Sprite.new
  76.     @pt3.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_3.png")  
  77.     @pt3.x = @pt1.x
  78.     @pt3.y = @pt1.y
  79.     @pt3.ox = @pt3.bitmap.width / 2
  80.     @pt3.oy = @pt3.bitmap.height / 2
  81.     @pt3.opacity = $OPA_N
  82.     #生成拼图 4
  83.     @pt4 = Sprite.new
  84.     @pt4.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_4.png")
  85.     @pt4.x = @pt1.x
  86.     @pt4.y = @pt1.y
  87.     @pt4.ox = @pt4.bitmap.width / 2
  88.     @pt4.oy = @pt4.bitmap.height / 2
  89.     @pt4.opacity = $OPA_N
  90.     #生成拼图 5
  91.     @pt5 = Sprite.new
  92.     @pt5.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_5.png")
  93.     @pt5.x = @pt1.x
  94.     @pt5.y = @pt1.y
  95.     @pt5.ox = @pt5.bitmap.width / 2
  96.     @pt5.oy = @pt5.bitmap.height / 2
  97.     @pt5.opacity = $OPA_N
  98.     #生成完整图
  99.     @pt0 = Sprite.new
  100.     @pt0.bitmap = Bitmap.new("Graphics/Pictures/" + @pt_pic + "_0.png")
  101.     @pt0.x = $SITE_X
  102.     @pt0.y = $SITE_Y
  103.     @pt0.opacity = 0
  104.     @pt0.ox = @pt1.bitmap.width / 2
  105.     @pt0.oy = @pt1.bitmap.height / 2
  106.     @update_begin = 1
  107.     @num = 1        #开始的光标亮在哪里
  108.     game_begin
  109.  
  110. #--------------菜单--------------
  111.     # 生成命令窗口
  112.     s1 = "重新开始"
  113.     s2 = "退出"
  114.     @command_window = Window_Command.new(180,[s1,s2])
  115.     @command_window.x = 240
  116.     @command_window.y = 160
  117.     @command_window.z = 1000
  118.     @command_window.back_opacity = 180
  119.     @command_window.visible = false
  120.     @command_window.active = false
  121.     @command_window.index = 0
  122. #-------------------------------  
  123.     # 执行过渡
  124.     Graphics.transition(40)
  125.     # 主循环
  126.     loop do
  127.       # 刷新游戏画面
  128.       Graphics.update
  129.       # 刷新输入信息
  130.       Input.update
  131.       # 刷新画面情报
  132.       update
  133.       # 如果画面被切换的话就中断循环
  134.       if $scene != self
  135.         break
  136.       end
  137.     end
  138.     # 准备过渡
  139.     Graphics.freeze
  140.     #释放窗口
  141.     @command_window.dispose
  142.     # 释放拼图图形
  143.     @ptb.bitmap.dispose
  144.     @ptb.dispose
  145.     @pt1.bitmap.dispose
  146.     @pt1.dispose
  147.     @pt2.bitmap.dispose
  148.     @pt2.dispose
  149.     @pt3.bitmap.dispose
  150.     @pt3.dispose
  151.     @pt4.bitmap.dispose
  152.     @pt4.dispose
  153.     @pt5.bitmap.dispose
  154.     @pt5.dispose
  155.     @pt0.bitmap.dispose
  156.     @pt0.dispose
  157.     # 执行过度
  158.     Graphics.transition(20)
  159.     # 准备过渡
  160.     Graphics.freeze
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 刷新画面
  164.   #--------------------------------------------------------------------------
  165.   def update
  166.   $game_switches[$Pt_Victory] = false
  167.   case @update_begin
  168.   when 1
  169.     #----呼出菜单
  170.     if Input.trigger?(Input::B)
  171.       @update_begin = 2
  172.       @command_window.visible = true
  173.       @command_window.active = true
  174.       return
  175.     end
  176.    #----
  177.    #用变量判断旋转那张图片
  178.    if @num > 1  
  179.       if Input.trigger?(Input::RIGHT)
  180.         @num -= 1
  181.         Audio.se_play("Audio/SE/002-System02", 100, 100)
  182.       end
  183.     end
  184.  
  185.    if @num < 4
  186.     if Input.trigger?(Input::LEFT)
  187.       @num +=  1
  188.       Audio.se_play("Audio/SE/002-System02", 100, 100)
  189.     end
  190.   end
  191.  
  192.   case @num
  193.     when 1 #p5
  194.       return_pic               #——还原图片透明
  195.       @pt5.opacity = $OPA_Y    #选中透明度变化
  196.       # 按 上 的情况
  197.       if Input.trigger?(Input::UP)
  198.          @pt5.angle = @pt5.angle + 15
  199.          Audio.se_play("Audio/SE/001-System01", 100, 100)
  200.        return
  201.       end
  202.       #按 下 的情况
  203.       if Input.trigger?(Input::DOWN)
  204.          @pt5.angle = @pt5.angle - 15
  205.          Audio.se_play("Audio/SE/001-System01", 100, 100)
  206.        return
  207.      end
  208.  
  209.     when 2 #p4
  210.       return_pic
  211.       @pt4.opacity = $OPA_Y
  212.       # 按 上 的情况  
  213.       if Input.trigger?(Input::UP)
  214.          @pt4.angle = @pt4.angle + 15
  215.          Audio.se_play("Audio/SE/001-System01", 100, 100)
  216.        return
  217.       end
  218.      #按 下 的情况
  219.       if Input.trigger?(Input::DOWN)
  220.          @pt4.angle = @pt4.angle - 15
  221.          Audio.se_play("Audio/SE/001-System01", 100, 100)
  222.        return
  223.      end
  224.  
  225.     when 3 #p3
  226.       return_pic
  227.       @pt3.opacity = $OPA_Y
  228.       # 按 上 的情况  
  229.       if Input.trigger?(Input::UP)
  230.         @pt3.angle = @pt3.angle + 15
  231.         Audio.se_play("Audio/SE/001-System01", 100, 100)
  232.       return
  233.       end
  234.       #按 下 的情况
  235.       if Input.trigger?(Input::DOWN)
  236.         @pt3.angle = @pt3.angle - 15
  237.         Audio.se_play("Audio/SE/001-System01", 100, 100)
  238.         return
  239.       end
  240.  
  241.     when 4 #p2
  242.       return_pic
  243.       @pt2.opacity = $OPA_Y
  244.       # 按 上 的情况  
  245.       if Input.trigger?(Input::UP)
  246.         @pt2.angle = @pt2.angle + 15
  247.         Audio.se_play("Audio/SE/001-System01", 100, 100)
  248.       return
  249.      end
  250.      #按 下 的情况
  251.      if Input.trigger?(Input::DOWN)
  252.         @pt2.angle = @pt2.angle - 15
  253.         Audio.se_play("Audio/SE/001-System01", 100, 100)
  254.      return
  255.      end
  256.  
  257.    end #——end case @num
  258.  
  259.   victory_pt
  260.  
  261. when 2
  262.   update_command
  263. end #--end case @update_begin
  264.  
  265. end #——end update
  266.   #--------------------------------------------------------------------------
  267.   # ● 窗口刷新画面
  268.   #--------------------------------------------------------------------------
  269.   def update_command
  270.       @command_window.update
  271.     if Input.trigger?(Input::B)
  272.       @update_begin = 1
  273.       @command_window.visible = false
  274.       @command_window.active = false
  275.   end
  276.     # 按下 C 键的情况下
  277.     if Input.trigger?(Input::C)
  278.       # 命令窗口的光标位置分支
  279.       case @command_window.index
  280.       when 0
  281.       @update_begin = 1
  282.       @command_window.visible = false
  283.       @command_window.active = false
  284.       game_begin
  285.       when 1
  286.       $scene = Scene_Map.new
  287.       $game_map.refresh         
  288.       end
  289.   end
  290. end #---end update_command
  291.   #--------------------------------------------------------------------------
  292.   # ● 还原透明度
  293.   #--------------------------------------------------------------------------  
  294. def return_pic
  295.   #还原选择透明度
  296.   @pt2.opacity = $OPA_N
  297.   @pt3.opacity = $OPA_N
  298.   @pt4.opacity = $OPA_N
  299.   @pt5.opacity = $OPA_N
  300. end
  301.   #--------------------------------------------------------------------------
  302.   # ● 开始处理
  303.   #--------------------------------------------------------------------------
  304. def game_begin
  305.   if @pt2.angle && @pt3.angle && @pt4.angle && @pt5.angle == 0   #我也不知道这种
  306.   @pt2.angle = rand(360) * 15                                    #方法管不管用。- -
  307.   @pt3.angle = rand(360) * 15
  308.   @pt4.angle = rand(360) * 15
  309.   @pt5.angle = rand(360) * 15
  310.    else
  311.   @pt2.angle = rand(360) * 15
  312.   @pt3.angle = rand(360) * 15
  313.   @pt4.angle = rand(360) * 15
  314.   @pt5.angle = rand(360) * 15
  315.   end
  316. end
  317.   #--------------------------------------------------------------------------
  318.   # ● 结束处理
  319.   #--------------------------------------------------------------------------
  320. def victory_pt
  321.   @finish_pt2 = @pt2.angle % 360
  322.   @finish_pt3 = @pt3.angle % 360
  323.   @finish_pt4 = @pt4.angle % 360
  324.   @finish_pt5 = @pt5.angle % 360
  325.  
  326.   if @finish_pt2 ==0 && @finish_pt3 == 0 && @finish_pt4 ==0 && @finish_pt5 == 0
  327.     Audio.me_play("Audio/ME/001-Victory01", 80, 100)
  328.     for i in 0..15
  329.       @pt0.opacity+=18
  330.       Graphics.update
  331.     end   
  332.     for j in 0..200   #----等待,我只能想出这方法了,有别的方法告诉我一声! - -b
  333.      Graphics.update
  334.    end   
  335.    $game_switches[$Pt_Victory] = true
  336.    $scene = Scene_Map.new
  337.    $game_map.refresh          #刷新地图,奇怪了,以前没有用过,害我郁闷了半天。
  338.    return
  339.   end
  340.  
  341. end
  342.  
  343. end #——end class


----------------------------------------------------------------------截图----------------------------------------------------------------



-------------------------------------------------------------------可爱的分割线------------------------------------------------------------
拼图图片制作:
图像——图像大小

设置好大小后,点切片工具

在图片上右键,选划分切片,切2 * 2的切片

再选椭圆工具

选固定比例 1:1,圆形选择工具的羽化调成0

按着ALT,对着中间切片中心的点拉出正圆

按shift+ctrl+J分离出一个新层,后,再选新层

切出来的第一个完整的图,记得再备份一个,后面用来制作黑色底版

然后不断的切切切,切成像甜甜圈那样5张。

然后就是一层一层的保存出来,包括那个完整大圆。

然后选择那个备份出来的大圆图,选图像——调整——色相、饱和度,明暗调成0

最后再保存出来就ok了!
=============================分隔,分隔===============
以下范例以更新1.01
百度网盘:
点我,点我,点我下载
点下面下载:
旋转拼图(修正).rar (736.66 KB, 下载次数: 138)
我切好的图片范例:
素子.rar (201.97 KB, 下载次数: 123)
=====================================================
对了,求助大神一下,为什么游戏里会出现这种明显的缝隙?旋转到一定角度有,一定角度后没有。

点评

支持  发表于 2012-11-11 23:33

评分

参与人数 3星屑 +617 收起 理由
Vortur + 3 塞糖
feizhaodan + 600 奖赏条例
alpacanist + 14 支持一下!

查看全部评分

Lv1.梦旅人

梦石
0
星屑
49
在线时间
76 小时
注册时间
2006-7-7
帖子
194
2
 楼主| 发表于 2012-11-11 21:41:38 | 只看该作者
啊咧?怎么都乱完?算了,这个教程就这么个意思,用不用图片都一样~!
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

3
发表于 2012-11-12 00:18:51 | 只看该作者
游戏中运行的效果呢

评分

参与人数 1星屑 +8 收起 理由
折戬沉沙 + 8 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
76 小时
注册时间
2006-7-7
帖子
194
4
 楼主| 发表于 2012-11-12 11:09:45 | 只看该作者
天使喝可乐 发表于 2012-11-12 00:18
游戏中运行的效果呢

ok,没问题,昨晚忘了,等会更新,再优化下脚本和修改个BUG!

评分

参与人数 1星屑 +8 收起 理由
折戬沉沙 + 8 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
147
在线时间
151 小时
注册时间
2011-9-9
帖子
58
5
发表于 2012-12-23 19:41:09 | 只看该作者
很棒的小遊戲,我接收到我的<金庸無雙>裡面了!

评分

参与人数 1星屑 +8 收起 理由
折戬沉沙 + 8 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
76 小时
注册时间
2006-7-7
帖子
194
6
 楼主| 发表于 2012-12-24 17:15:19 | 只看该作者
bmg22132 发表于 2012-12-23 19:41
很棒的小遊戲,我接收到我的裡面了!

把脚本里的按键触发Input.trigger都改成Input.repeat吧,这样一直按着按键就行,不用重复按。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-6-1 01:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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