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

Project1

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

[原创发布] 教你如何制作马里奥【范例:Super Box】

[复制链接]

Lv1.梦旅人

草莓君

梦石
0
星屑
79
在线时间
418 小时
注册时间
2008-6-12
帖子
1902
跳转到指定楼层
1
发表于 2010-8-19 13:45:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 kxx1997 于 2010-8-31 15:31 编辑

最近看到6R某些伸手党都问着如何制作超级马里奥这种类型的游戏
我搜了搜,发现6R也没有特别详细地教程
既然没有,草莓君就来做一个教程吧~喵~

1、请先下载附件: 范例.rar (164.22 KB, 下载次数: 3627)
#注释:里面已经删掉了数据库中一些无用的内容,包括跟战斗有关等,总之都是与我们要做内容无关,里面也添加了一些脚本,包括三个:①重力脚本②显示生命③显示金钱  其实这些脚本都可以在6R站内轻松找到

2、熟悉工程
#注释:里面虽然没什么东西,但是请看地图“过渡用的”,可以发现左上角有一个事件,内容为
重力开关为NO是为了打开公共事件,使重力脚本运行,实现跳跃效果,按A可以跳(键盘上的Z)
场所移动就不用解释了,更改菜单禁止这个也好说,如果在玩超级马里奥时,按一下X键,突然冒出一个RPG式菜单,肯定会很诡异

3、打开脚本编辑器,看到“命”的第48行,发现写着  “ if @var_value_old==$game_variables[1] then  ”
意思就是显示1号变量,所以我们应该新建一个变量(1号变量),如图所示,插入刚才所说的事件中
我在这里是定义人物有3条生命值,你们可以随便调用自己想要的数值
现在分别看着脚本“命”、“分”的39行,这个指的是载入想要显示的图片,这里推荐是尺寸大小为24*24的图标
这是我自己决定要用的两个图标,一个代表生命 ,一个代表金币
可是在测试工程的时候为什么没有显示这两个变量呢?别急,看下一步

4、把记事本(下面)内的脚本覆盖到Scene_Map(要删除原来的Scene_Map),为什么要替换?记事本中的Scene_Map与默认脚本最明显的差别就是16~18行脚本多了个 ,注释中也写了,这是为了生成显示变量的窗口
好,现在再来测试一下工程(测试前先乱画一个地图)
测试效果(地图是临时乱画的):
现在终于实现了显示生命和金币的功能,不过还十分简陋,需要进一步美化

5、现在来做一个顶砖块的事件,在此之前,先新建几个变量
如图所示设置砖块:
有人很好奇,为什么要在最后将事件Y坐标-1呢?
仍然别急,接着设置条件分歧
事件页就应该是这样的:
然后再添加一个
有人会问,为什么要添加一个跳跃+0,+0呢?
因为这样可以模仿出砖块抖动的样子,显得更加真实
将事件设置成这样:
然后撇开砖块设置,我们先来想想马里奥当中的顶砖块是怎么样设置的
马里奥在小时候是顶不了砖块的,而吃了蘑菇后长大就能顶砖块了
当然,我们也可以模仿其中的蘑菇,我打算苹果用来代替蘑菇(这个苹果是默认素材)
先将苹果做成一个行走图
再放入游戏中的Characters文件夹
由于这部分比较麻烦,我先发工程(金币的做法也在工程里面)
范例2.rar (190.61 KB, 下载次数: 943) ←测试版范例
Super Box.rar (1.12 MB, 下载次数: 2545) ←正式版范例



范例已放出
如果还有什么想问的,请回复问问题

某记事本内容
  1. #==============================================================================
  2. # ■ Scene_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图画面的类。
  5. #==============================================================================

  6. class Scene_Map
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 生成活动块
  12.     @spriteset = Spriteset_Map.new
  13.     # 生成信息窗口
  14.     @message_window = Window_Message.new
  15.     # 生成显示变量窗口
  16.     @var_window = Window_MapVar.new
  17.     @var2_window = Window_MapVar2.new
  18.     # 执行过渡
  19.     Graphics.transition
  20.     # 主循环
  21.     loop do
  22.       # 刷新游戏画面
  23.       Graphics.update
  24.       # 刷新输入信息
  25.       Input.update
  26.       # 刷新画面
  27.       update
  28.       # 如果画面切换的话就中断循环
  29.       if $scene != self
  30.         break
  31.       end
  32.     end
  33.     # 准备过渡
  34.     Graphics.freeze
  35.     # 释放活动块
  36.     @spriteset.dispose
  37.     # 释放信息窗口
  38.     @message_window.dispose
  39.     # 释放显示变量窗口
  40.     @var_window.dispose
  41.     @var2_window.dispose
  42.     # 标题画面切换中的情况下
  43.     if $scene.is_a?(Scene_Title)
  44.       # 淡入淡出画面
  45.       Graphics.transition
  46.       Graphics.freeze
  47.     end
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 刷新画面
  51.   #--------------------------------------------------------------------------
  52.   def update
  53.     # 循环
  54.     loop do
  55.       # 按照地图、实例、主角的顺序刷新
  56.       # (本更新顺序不会在的满足事件的执行条件下成为给予角色瞬间移动
  57.       #  的机会的重要因素)
  58.       $game_map.update
  59.       $game_system.map_interpreter.update
  60.       $game_player.update
  61.       # 系统 (计时器)、画面刷新
  62.       $game_system.update
  63.       $game_screen.update
  64.       # 如果主角在场所移动中就中断循环
  65.       unless $game_temp.player_transferring
  66.         break
  67.       end
  68.       # 执行场所移动
  69.       transfer_player
  70.       # 处理过渡中的情况下、中断循环
  71.       if $game_temp.transition_processing
  72.         break
  73.       end
  74.     end
  75.     # 刷新活动块
  76.     @spriteset.update
  77.     # 刷新信息窗口
  78.     @message_window.update
  79.     # 刷新显示变量窗口
  80.     @var_window.refresh
  81.     @var2_window.refresh
  82.     # 游戏结束的情况下
  83.     if $game_temp.gameover
  84.       # 切换的游戏结束画面
  85.       $scene = Scene_Gameover.new
  86.       return
  87.     end
  88.     # 返回标题画面的情况下
  89.     if $game_temp.to_title
  90.       # 切换到标题画面
  91.       $scene = Scene_Title.new
  92.       return
  93.     end
  94.     # 处理过渡中的情况下
  95.     if $game_temp.transition_processing
  96.       # 清除过渡处理中标志
  97.       $game_temp.transition_processing = false
  98.       # 执行过渡
  99.       if $game_temp.transition_name == ""
  100.         Graphics.transition(20)
  101.       else
  102.         Graphics.transition(40, "Graphics/Transitions/" +
  103.           $game_temp.transition_name)
  104.       end
  105.     end
  106.     # 显示信息窗口中的情况下
  107.     if $game_temp.message_window_showing
  108.       return
  109.     end
  110.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  111.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  112.       # 不是在事件执行中或者禁止遇敌中
  113.       unless $game_system.map_interpreter.running? or
  114.              $game_system.encounter_disabled
  115.         # 确定队伍
  116.         n = rand($game_map.encounter_list.size)
  117.         troop_id = $game_map.encounter_list[n]
  118.         # 队伍有效的话
  119.         if $data_troops[troop_id] != nil
  120.           # 设置调用战斗标志
  121.           $game_temp.battle_calling = true
  122.           $game_temp.battle_troop_id = troop_id
  123.           $game_temp.battle_can_escape = true
  124.           $game_temp.battle_can_lose = false
  125.           $game_temp.battle_proc = nil
  126.         end
  127.       end
  128.     end
  129.     # 按下 B 键的情况下
  130.     if Input.trigger?(Input::B)
  131.       # 不是在事件执行中或菜单禁止中
  132.       unless $game_system.map_interpreter.running? or
  133.              $game_system.menu_disabled
  134.         # 设置菜单调用标志以及 SE 演奏
  135.         $game_temp.menu_calling = true
  136.         $game_temp.menu_beep = true
  137.       end
  138.     end
  139.     # 调试模式为 ON 并且按下 F9 键的情况下
  140.     if $DEBUG and Input.press?(Input::F9)
  141.       # 设置调用调试标志
  142.       $game_temp.debug_calling = true
  143.     end
  144.     # 不在主角移动中的情况下
  145.     unless $game_player.moving?
  146.       # 执行各种画面的调用
  147.       if $game_temp.battle_calling
  148.         call_battle
  149.       elsif $game_temp.shop_calling
  150.         call_shop
  151.       elsif $game_temp.name_calling
  152.         call_name
  153.       elsif $game_temp.menu_calling
  154.         call_menu
  155.       elsif $game_temp.save_calling
  156.         call_save
  157.       elsif $game_temp.debug_calling
  158.         call_debug
  159.       end
  160.     end
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 调用战斗
  164.   #--------------------------------------------------------------------------
  165.   def call_battle
  166.     # 清除战斗调用标志
  167.     $game_temp.battle_calling = false
  168.     # 清除菜单调用标志
  169.     $game_temp.menu_calling = false
  170.     $game_temp.menu_beep = false
  171.     # 生成遇敌计数
  172.     $game_player.make_encounter_count
  173.     # 记忆地图 BGM 、停止 BGM
  174.     $game_temp.map_bgm = $game_system.playing_bgm
  175.     $game_system.bgm_stop
  176.     # 演奏战斗开始 SE
  177.     $game_system.se_play($data_system.battle_start_se)
  178.     # 演奏战斗 BGM
  179.     $game_system.bgm_play($game_system.battle_bgm)
  180.     # 矫正主角姿势
  181.     $game_player.straighten
  182.     # 切换到战斗画面
  183.     $scene = Scene_Battle.new
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● 调用商店
  187.   #--------------------------------------------------------------------------
  188.   def call_shop
  189.     # 清除商店调用标志
  190.     $game_temp.shop_calling = false
  191.     # 矫正主角姿势
  192.     $game_player.straighten
  193.     # 切换到商店画面
  194.     $scene = Scene_Shop.new
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 调用名称输入
  198.   #--------------------------------------------------------------------------
  199.   def call_name
  200.     # 清除商店调用名称输入标志
  201.     $game_temp.name_calling = false
  202.     # 矫正主角姿势
  203.     $game_player.straighten
  204.     # 切换到名称输入画面
  205.     $scene = Scene_Name.new
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 调用菜单
  209.   #--------------------------------------------------------------------------
  210.   def call_menu
  211.     # 清除商店调用菜单标志
  212.     $game_temp.menu_calling = false
  213.     # 已经设置了菜单 SE 演奏标志的情况下
  214.     if $game_temp.menu_beep
  215.       # 演奏确定 SE
  216.       $game_system.se_play($data_system.decision_se)
  217.       # 清除菜单演奏 SE 标志
  218.       $game_temp.menu_beep = false
  219.     end
  220.     # 矫正主角姿势
  221.     $game_player.straighten
  222.     # 切换到菜单画面
  223.     $scene = Scene_Menu.new
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 调用存档
  227.   #--------------------------------------------------------------------------
  228.   def call_save
  229.     # 矫正主角姿势
  230.     $game_player.straighten
  231.     # 切换到存档画面
  232.     $scene = Scene_Save.new
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ● 调用调试
  236.   #--------------------------------------------------------------------------
  237.   def call_debug
  238.     # 清除商店调用调试标志
  239.     $game_temp.debug_calling = false
  240.     # 演奏确定 SE
  241.     $game_system.se_play($data_system.decision_se)
  242.     # 矫正主角姿势
  243.     $game_player.straighten
  244.     # 切换到调试画面
  245.     $scene = Scene_Debug.new
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ● 主角的场所移动
  249.   #--------------------------------------------------------------------------
  250.   def transfer_player
  251.     # 清除主角场所移动调试标志
  252.     $game_temp.player_transferring = false
  253.     # 移动目标与现在的地图有差异的情况下
  254.     if $game_map.map_id != $game_temp.player_new_map_id
  255.       # 设置新地图
  256.       $game_map.setup($game_temp.player_new_map_id)
  257.     end
  258.     # 设置主角位置
  259.     $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
  260.     # 设置主角朝向
  261.     case $game_temp.player_new_direction
  262.     when 2  # 下
  263.       $game_player.turn_down
  264.     when 4  # 左
  265.       $game_player.turn_left
  266.     when 6  # 右
  267.       $game_player.turn_right
  268.     when 8  # 上
  269.       $game_player.turn_up
  270.     end
  271.     # 矫正主角姿势
  272.     $game_player.straighten
  273.     # 刷新地图 (执行并行事件)
  274.     $game_map.update
  275.     # 在生成活动块
  276.     @spriteset.dispose
  277.     @spriteset = Spriteset_Map.new
  278.     # 处理过渡中的情况下
  279.     if $game_temp.transition_processing
  280.       # 清除过渡处理中标志
  281.       $game_temp.transition_processing = false
  282.       # 执行过渡
  283.       Graphics.transition(20)
  284.     end
  285.     # 执行地图设置的 BGM、BGS 的自动切换
  286.     $game_map.autoplay
  287.     # 设置画面
  288.     Graphics.frame_reset
  289.     # 刷新输入信息
  290.     Input.update
  291.   end
  292. end
复制代码

点评

好东西,收藏了.  发表于 2010-11-20 20:42

评分

参与人数 3星屑 +1002 +1 收起 理由
cc610523 + 1 精品文章
黑色的笔 + 2
枫起 + 1000 感谢草莓君一如既往的支持~a li ga do~.

查看全部评分


STG弹幕实验进程【醒目】
http://rpg.blue/home.php?mod=space&uid=21363&do=blog&classid=89&view=me&from=space

此号已被我入侵啦哈哈。   By-西露达
西露达你不要随便发帖子就行了……  By kxx1997

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

2
发表于 2010-8-19 15:25:55 | 只看该作者
你不能用超级马力的素材么……这样看很囧。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
108
在线时间
28 小时
注册时间
2010-7-2
帖子
302
3
发表于 2010-8-19 15:32:46 | 只看该作者
你说的那个好像是我!!

http://rpg.blue/forum.php?mod=vi ... 53233&from=home

你看这个地址,这是我发表的,你是不是看到这个才发教程的!

点评

你的我根本没看  发表于 2010-8-19 17:20
本人比较忙,以后会很少上论坛.............

回复 支持 反对

使用道具 举报

Lv1.梦旅人

被遗忘の机器

梦石
0
星屑
73
在线时间
402 小时
注册时间
2010-7-24
帖子
1492
4
发表于 2010-8-19 15:53:23 | 只看该作者
看到草莓兄发表的这个教程我感觉就和没看一样的,因为我还有一大堆疑问啊==
详情见http://rpg.blue/forum.php?mod=vi ... 51858&from=home
话说回来我可不是菜鸟啊,我问的问题含金量相当的高!

点评

我弄得只是菜鸟教程,你的问题只能用AGM或者脚本解决了  发表于 2010-8-19 17:20
【镇楼】少年吃我大屌
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

5
发表于 2010-8-19 19:35:02 | 只看该作者
的确推荐AGM,何必用RM呢。

点评

越前前辈指教的好,可惜我不会用AGM  发表于 2010-8-20 10:19
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
6
发表于 2010-8-19 22:07:11 | 只看该作者
RM的话,直接用脚本。
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

7
发表于 2010-8-22 08:59:49 | 只看该作者
重力系统?恩,不错的创意(话说我想做超级玛丽的完美版= =)

点评

8-1最要紧的就是那个星星……利用好他可以过关  发表于 2010-8-23 00:28
说实话,小霸王游戏机上面的马里奥我还没有通关过……每次玩到8-1关就怨念了  发表于 2010-8-22 17:17
例如在海底诡异的重力系统。  发表于 2010-8-22 17:08
超级马里奥其实用某些脚本配上事件还是很容易实现一些基本的功能的,不过要完美的话,那就估计只能用脚本了,比如怪物如何拥有重力等问题  发表于 2010-8-22 14:49
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2010-8-26
帖子
7
8
发表于 2010-8-31 15:26:39 | 只看该作者
4、把记事本内的脚本覆盖到Scene_Map。。。。记事本??
平白无故哪冒出来的记事本?求解LZ

点评

附件没了,上传失败了,我看看  发表于 2010-8-31 15:30
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
245
在线时间
0 小时
注册时间
2010-10-21
帖子
1
9
发表于 2010-10-21 11:46:54 | 只看该作者
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
26 小时
注册时间
2010-10-5
帖子
45
10
发表于 2010-11-26 20:54:07 | 只看该作者
好像没法直接用素材改
做自己的游戏,让别人玩去吧!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 06:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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