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

Project1

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

[已经过期] 无限循环的地图

[复制链接]

Lv1.梦旅人

梦石
0
星屑
44
在线时间
317 小时
注册时间
2011-2-9
帖子
1129
跳转到指定楼层
1
发表于 2012-4-4 10:23:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
效果:人物在没命地往前跑、我们在看对白。但是我们让他们一直跑、地图却没有尽头?
在<我看见>里有这个场景、但是很遗憾、跑着跑着会卡一下、很明显是用场所移动-不过渡实现的。但<废土小红帽>里也有这个场景、而且没有卡一下的感觉、这是怎么实现的呢。有比场景过渡更好的方法么。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
183 小时
注册时间
2012-1-16
帖子
140
2
发表于 2012-4-4 11:17:14 | 只看该作者
先弄一张黑色的背景地图
然后设置一个事件,停止时动画

点评

and then?  发表于 2012-4-4 11:44
想买一艘船         0/1
想住在一个凉爽的的国度         0/1
想获得永生         N/A
回复

使用道具 举报

Lv1.梦旅人

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

QQ截图1.png (1.27 KB, 下载次数: 0)

QQ截图1.png

QQ截图2.png (1 KB, 下载次数: 13)

QQ截图2.png

QQ截图3.png (1.01 KB, 下载次数: 15)

QQ截图3.png

QQ截图4.png (1.54 KB, 下载次数: 24)

QQ截图4.png

点评

直接给你脚本吧  发表于 2012-4-5 18:33
不是吧。。。  发表于 2012-4-5 18:29
脚本错误~~~~我不会脚本的、按你的步骤输入后map最后的end错误了。  发表于 2012-4-5 17:46
好了  发表于 2012-4-4 12:15
图崩了  发表于 2012-4-4 12:03
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
183 小时
注册时间
2012-1-16
帖子
140
4
发表于 2012-4-4 11:56:20 | 只看该作者
star007 发表于 2012-4-4 11:17
先弄一张黑色的背景地图
然后设置一个事件,停止时动画

这样就好像是一个人在黑色的背景上不断的走啊…

点评

.............................. 不是这样的啊~~~人家是在地图上跑  发表于 2012-4-4 12:03
想买一艘船         0/1
想住在一个凉爽的的国度         0/1
想获得永生         N/A
回复

使用道具 举报

Lv1.梦旅人

66RPG我的

梦石
0
星屑
164
在线时间
491 小时
注册时间
2012-1-16
帖子
1993
5
发表于 2012-4-4 12:05:40 | 只看该作者
原地图画4份(在同一地图中),初始位置在最中间,往左走时到第二分左端产所移动到第三份右端,往右走时到第三分右端产所移动到第二份左端,第一和第二份是用来扩展画面的,走不到的。

另外你说的《我看见》好像没有这个内容把。
帐号并非本人使用!
帐号并非本人使用!
帐号并非本人使用!
帐号并非本人使用!
帐号并非本人使用!
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
183 小时
注册时间
2012-1-16
帖子
140
6
发表于 2012-4-4 12:09:49 | 只看该作者
star007 发表于 2012-4-4 11:56
这样就好像是一个人在黑色的背景上不断的走啊…

弄个跑的行走图呗…
我这个是笨方法

点评

这。。。显然是实现不了的。  发表于 2012-4-5 17:32
想买一艘船         0/1
想住在一个凉爽的的国度         0/1
想获得永生         N/A
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
104
在线时间
93 小时
注册时间
2008-8-11
帖子
209
7
发表于 2012-4-4 12:35:41 | 只看该作者
6R的图老爱崩。。不用图了
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

8
发表于 2012-4-4 17:30:18 | 只看该作者
这个用事件完全可行
首先地图至少要大于1个屏幕,而且要保证最后一屏和第一屏的内容是一样的,用个条件分歧判断一下$game_player的x是否在(地图总宽度-11)的位置,然后直接不带过渡的场所移动到x坐标为9的地方即可。
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
44
在线时间
317 小时
注册时间
2011-2-9
帖子
1129
9
 楼主| 发表于 2012-4-5 17:31:30 | 只看该作者
亿万星辰 发表于 2012-4-4 17:30
这个用事件完全可行
首先地图至少要大于1个屏幕,而且要保证最后一屏和第一屏的内容是一样的,用个条件分歧 ...

可否更详细些?毕竟我不会脚本啊。


‘‘──黑色的笔于2012-4-5 17:34补充以下内容

这个还是会稍微卡一下~~~我看见里最后那、他们开车在雪地里走时就有这个东西。
’’

点评

额、卡一下是回复路克酱的、不会脚本是回复星辰的。就是那个判断的语句不会弄、瞎捣鼓了一下失败了。  发表于 2012-4-5 17:52
他说了是事件= =  发表于 2012-4-5 17:34
反正是坏人一个
回复

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3195
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

10
发表于 2012-4-5 18:25:14 | 只看该作者
本帖最后由 hys111111 于 2012-4-6 12:33 编辑

不要用事件中“场所移动”,那个是要过渡的。直接用脚本调用场所移动不用过渡。就不会有卡一下的现象。
方法如下

条件分歧:脚本:$game_player.x==0
  1. $game_temp.player_transferring = true
  2. $game_temp.player_new_map_id = @map_id
  3. $game_temp.player_new_x = $game_map.width-1
  4. $game_temp.player_new_y = $game_player.y
  5. $game_temp.player_new_direction = \
  6. $game_player.direction
复制代码
分歧结束
条件分歧:脚本:$game_player.x==$game_map.width
  1. $game_temp.player_transferring = true
  2. $game_temp.player_new_map_id = @map_id
  3. $game_temp.player_new_x = 1
  4. $game_temp.player_new_y = $game_player.y
  5. $game_temp.player_new_direction = \
  6. $game_player.direction
复制代码
分歧结束
条件分歧:脚本:$game_player.y==0
  1. $game_temp.player_transferring = true
  2. $game_temp.player_new_map_id = @map_id
  3. $game_temp.player_new_x = $game_player.x
  4. $game_temp.player_new_y = $game_map.height-1
  5. $game_temp.player_new_direction = \
  6. $game_player.direction
复制代码
分歧结束
条件分歧:脚本:$game_player.y==$game_map.height
  1. $game_temp.player_transferring = true
  2. $game_temp.player_new_map_id = @map_id
  3. $game_temp.player_new_x = $game_player.x
  4. $game_temp.player_new_y = 1
  5. $game_temp.player_new_direction = \
  6. $game_player.direction
复制代码
分歧结束

另外,要是觉得麻烦,我还下过地图循环系统的范例。
给你一个看看。
new循环地图.rar (193.19 KB, 下载次数: 103)

点评

但是你这个也太繁琐了……  发表于 2012-4-6 09:06
用场所移动指令完全也可以做出不卡的效果,但问题的关键是与此同时还有文字在现实,这样场所移动指令还真就不行了,是需要写成脚本的形式~  发表于 2012-4-6 09:06
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-27 02:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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