幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2831|回复: 3

[入门教程] 新手问题解答后发出的教程.(很不详细)

[复制链接]

1

主题

25

帖子

277

积分

③业余

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

直接把上面的脚本插入 Main前就可以了,由于方法不优化我的机器里有点卡
不知大家的.
由于是复制了时间窗口偷懒的所以有个
  1. #==============================================================================
  2. # ■ Window_PlayTime
  3. #------------------------------------------------------------------------------
  4. #  菜单画面显示游戏时间的窗口。
  5. #==============================================================================
  6. 对于新手来说会复制改造就不错
  7. 下面是脚本主要内容,
  8. class Window_Zuobiao < Window_Base
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对像
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super(0, 0, 160, 96)
  14.     self.contents = Bitmap.new(width - 32, height - 32)
  15.     refresh
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 刷新
  19.   #--------------------------------------------------------------------------
  20.   def refresh
  21.     self.contents.clear
  22.     self.contents.font.color = system_color
  23.     self.contents.draw_text(4, 0, 120, 32, "角色坐标:")
  24.      self.contents.draw_text(4, 32, 120, 32, "x:")
  25.      self.contents.draw_text(64, 32, 120, 32, "y:")
  26.     self.contents.draw_text(16-88, 32, 120, 32, $game_player.x.to_s, 2)
  27.     self.contents.draw_text(64-78, 32, 120, 32, $game_player.y.to_s, 2)
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 刷新画面
  31.   #--------------------------------------------------------------------------
  32.   def update
  33.     super
  34.     if Graphics.frame_count / Graphics.frame_rate != @total_sec
  35.       refresh
  36.     end
  37.   end
  38. end
复制代码
$game_player.y和$game_player.x是在game_player中找到的角色坐标,
我就把他应用了,由于self.contents.draw_text显示变量要在后面加入to_s
所以我显示坐标也用了,其他的用self.contents.draw_text来显示字的就不多说,
用老方法在地图类中有窗口设置的地方照猫画虎显示窗口.






还有的怎样使Level up以图片方式显示:


下面是我的回答

Window_BattleStatus#中就有设置
  1. if @level_up_flags
  2.         self.contents.font.color = normal_color
  3.         self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  4.       else
  5.         draw_actor_state(actor, actor_x, 96)
  6.       end
复制代码

用这个
  1.       bitmap=Bitmap.new("Graphics/pictures/某某某")
  2.     src_rect=Rect.new(0,0,bitmap.width,bitmap.height)
  3.     self.contents.blt(actor_x,96,bitmap,src_rect)
  4. [code]
  5. 替代原来的
  6. [code]
  7. self.contents.font.color = normal_color
  8.         self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
复制代码
图片的名字写在"某某某"那个位置,记住,图片要放在pictures文件甲





上面的感觉够详细的了,大家如果有不明白的就在本贴问
~~~~~~~~~~无视我鄙视我把```````````````
回复

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-10-27 14:52:55 | 显示全部楼层
呃,希望LZ贴代码时,使用 [#code]这里是代码[/#code]  使用时去掉#
否则遇到这个符号就会出现问题哦~~
  1. [i]
复制代码
回复 支持 反对

使用道具 举报

1

主题

25

帖子

277

积分

③业余

积分
277
 楼主| 发表于 2007-10-27 17:27:28 | 显示全部楼层
..去掉井号???这样不就不能直接复制了吗??
赶到这个论坛而已详细解释,不要像我上面的一样
~~~~~~~~~~无视我鄙视我把```````````````
回复 支持 反对

使用道具 举报

3

主题

11

帖子

73

积分

②入门

积分
73
QQ
发表于 2008-3-2 15:53:47 | 显示全部楼层
呵呵,顶个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 09:47 , Processed in 0.019830 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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