搜索附件  

范例.rar

 

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

1、请先下载附件:
#注释:里面已经删掉了数据库中一些无用的内容,包括跟战斗有关等,总之都是与我们要做内容无关,里面也添加了一些脚本,包括三个:①重力脚本②显示生命③显示金钱  其实这些脚本都可以在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文件夹
由于这部分比较麻烦,我先发工程(金币的做法也在工程里面)
←测试版范例
←正式版范例



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

某记事本内容
  1. #==============================================================================# ■ Scene_Map#------------------------------------------------------------------------------#  处理地图画面的类。#==============================================================================class Scene_Map  #--------------------------------------------------------------------------  # ● 主处理  #--------------------------------------------------------------------------  def main    # 生成活动块    @spriteset = Spriteset_Map.new    # 生成信息窗口    @message_window = Window_Message.new    # 生成显示变量窗口    @var_window = Window_MapVar.new    @var2_window = Window_MapVar2.new    # 执行过渡    Graphics.transition    # 主循环    loop do      # 刷新游戏画面      Graphics.update      # 刷新输入信息      Input.update      # 刷新画面      update      # 如果画面切换的话就中断循环      if $scene != self        break      end    end    # 准备过渡    Graphics.freeze    # 释放活动块    @spriteset.dispose    # 释放信息窗口    @message_window.dispose    # 释放显示变量窗口    @var_window.dispose    @var2_window.dispose    # 标题画面切换中的情况下    if $scene.is_a?(Scene_Title)      # 淡入淡出画面      Graphics.transition      Graphics.freeze    end  end  #--------------------------------------------------------------------------  # ● 刷新画面  #--------------------------------------------------------------------------  def update    # 循环    loop do      # 按照地图、实例、主角的顺序刷新      # (本更新顺序不会在的满足事件的执行条件下成为给予角色瞬间移动      #  的机会的重要因素)      $game_map.update      $game_system.map_interpreter.update      $game_player.update      # 系统 (计时器)、画面刷新      $game_system.update      $game_screen.update      # 如果主角在场所移动中就中断循环      unless $game_temp.player_transferring        break      end      # 执行场所移动      transfer_player      # 处理过渡中的情况下、中断循环      if $game_temp.transition_processing        break      end    end    # 刷新活动块    @spriteset.update    # 刷新信息窗口    @message_window.update    # 刷新显示变量窗口    @var_window.refresh    @var2_window.refresh    # 游戏结束的情况下    if $game_temp.gameover      # 切换的游戏结束画面      $scene = Scene_Gameover.new      return    end    # 返回标题画面的情况下    if $game_temp.to_title      # 切换到标题画面      $scene = Scene_Title.new      return    end    # 处理过渡中的情况下    if $game_temp.transition_processing      # 清除过渡处理中标志      $game_temp.transition_processing = false      # 执行过渡      if $game_temp.transition_name == ""        Graphics.transition(20)      else        Graphics.transition(40, "Graphics/Transitions/" +          $game_temp.transition_name)      end    end    # 显示信息窗口中的情况下    if $game_temp.message_window_showing      return    end    # 遇敌计数为 0 且、且遇敌列表不为空的情况下    if $game_player.encounter_count == 0 and $game_map.encounter_list != []      # 不是在事件执行中或者禁止遇敌中      unless $game_system.map_interpreter.running? or             $game_system.encounter_disabled        # 确定队伍        n = rand($game_map.encounter_list.size)        troop_id = $game_map.encounter_list[n]        # 队伍有效的话        if $data_troops[troop_id] != nil          # 设置调用战斗标志          $game_temp.battle_calling = true          $game_temp.battle_troop_id = troop_id          $game_temp.battle_can_escape = true          $game_temp.battle_can_lose = false          $game_temp.battle_proc = nil        end      end    end    # 按下 B 键的情况下    if Input.trigger?(Input::B)      # 不是在事件执行中或菜单禁止中      unless $game_system.map_interpreter.running? or             $game_system.menu_disabled        # 设置菜单调用标志以及 SE 演奏        $game_temp.menu_calling = true        $game_temp.menu_beep = true      end    end    # 调试模式为 ON 并且按下 F9 键的情况下    if $DEBUG and Input.press?(Input::F9)      # 设置调用调试标志      $game_temp.debug_calling = true    end    # 不在主角移动中的情况下    unless $game_player.moving?      # 执行各种画面的调用      if $game_temp.battle_calling        call_battle      elsif $game_temp.shop_calling        call_shop      elsif $game_temp.name_calling        call_name      elsif $game_temp.menu_calling        call_menu      elsif $game_temp.save_calling        call_save      elsif $game_temp.debug_calling        call_debug      end    end  end  #--------------------------------------------------------------------------  # ● 调用战斗  #--------------------------------------------------------------------------  def call_battle    # 清除战斗调用标志    $game_temp.battle_calling = false    # 清除菜单调用标志    $game_temp.menu_calling = false    $game_temp.menu_beep = false    # 生成遇敌计数    $game_player.make_encounter_count    # 记忆地图 BGM 、停止 BGM    $game_temp.map_bgm = $game_system.playing_bgm    $game_system.bgm_stop    # 演奏战斗开始 SE    $game_system.se_play($data_system.battle_start_se)    # 演奏战斗 BGM    $game_system.bgm_play($game_system.battle_bgm)    # 矫正主角姿势    $game_player.straighten    # 切换到战斗画面    $scene = Scene_Battle.new  end  #--------------------------------------------------------------------------  # ● 调用商店  #--------------------------------------------------------------------------  def call_shop    # 清除商店调用标志    $game_temp.shop_calling = false    # 矫正主角姿势    $game_player.straighten    # 切换到商店画面    $scene = Scene_Shop.new  end  #--------------------------------------------------------------------------  # ● 调用名称输入  #--------------------------------------------------------------------------  def call_name    # 清除商店调用名称输入标志    $game_temp.name_calling = false    # 矫正主角姿势    $game_player.straighten    # 切换到名称输入画面    $scene = Scene_Name.new  end  #--------------------------------------------------------------------------  # ● 调用菜单  #--------------------------------------------------------------------------  def call_menu    # 清除商店调用菜单标志    $game_temp.menu_calling = false    # 已经设置了菜单 SE 演奏标志的情况下    if $game_temp.menu_beep      # 演奏确定 SE      $game_system.se_play($data_system.decision_se)      # 清除菜单演奏 SE 标志      $game_temp.menu_beep = false    end    # 矫正主角姿势    $game_player.straighten    # 切换到菜单画面    $scene = Scene_Menu.new  end  #--------------------------------------------------------------------------  # ● 调用存档  #--------------------------------------------------------------------------  def call_save    # 矫正主角姿势    $game_player.straighten    # 切换到存档画面    $scene = Scene_Save.new  end  #--------------------------------------------------------------------------  # ● 调用调试  #--------------------------------------------------------------------------  def call_debug    # 清除商店调用调试标志    $game_temp.debug_calling = false    # 演奏确定 SE    $game_system.se_play($data_system.decision_se)    # 矫正主角姿势    $game_player.straighten    # 切换到调试画面    $scene = Scene_Debug.new  end  #--------------------------------------------------------------------------  # ● 主角的场所移动  #--------------------------------------------------------------------------  def transfer_player    # 清除主角场所移动调试标志    $game_temp.player_transferring = false    # 移动目标与现在的地图有差异的情况下    if $game_map.map_id != $game_temp.player_new_map_id      # 设置新地图      $game_map.setup($game_temp.player_new_map_id)    end    # 设置主角位置    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)    # 设置主角朝向    case $game_temp.player_new_direction    when 2  # 下      $game_player.turn_down    when 4  # 左      $game_player.turn_left    when 6  # 右      $game_player.turn_right    when 8  # 上      $game_player.turn_up    end    # 矫正主角姿势    $game_player.straighten    # 刷新地图 (执行并行事件)    $game_map.update    # 在生成活动块    @spriteset.dispose    @spriteset = Spriteset_Map.new    # 处理过渡中的情况下    if $game_temp.transition_processing      # 清除过渡处理中标志      $game_temp.transition_processing = false      # 执行过渡      Graphics.transition(20)    end    # 执行地图设置的 BGM、BGS 的自动切换    $game_map.autoplay    # 设置画面    Graphics.frame_reset    # 刷新输入信息    Input.update  endend复制代码
复制代码
             本帖来自P1论坛作者kxx1997,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=153815  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

GMT+8, 2024-9-21 16:38 , Processed in 0.041645 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部