Project1

标题: 如何改变主角所在位置的图块? [打印本页]

作者: 牛肉面    时间: 2009-10-17 13:59
标题: 如何改变主角所在位置的图块?
本帖最后由 牛肉面 于 2009-10-17 14:00 编辑

如何改变主角所在位置的图块?

比如用事件把角色脚下的草地改成平地这样……不能用创造事件怎么弄


是真正的改变图块啊,只是用事件制定把主角位置(变量X,变量Y)的图块变成另外一个……

就是主角站的位置本来是草地,执行一个事件,变成土路这样……  (不能创造一个事件,因为事件太多会很卡)

我地面是画在第一层的!
作者: 后知后觉    时间: 2009-10-17 13:59
本帖最后由 后知后觉 于 2009-10-17 16:32 编辑

把下面这段脚本插到Main前
在事件中调用脚本
$game_map.hzhj(地图元件编号, 元件层数-1)
这个地图元件编号我要说一下
在RMXP界面里左上方就是图块的图形
这个里面的最上面的第一行是自动元件 对吧!
从第2行开始才是图块文件的内容
那么第2行的第一个元件的编号是384
第2行的第2个元件编号就是385
第2行的第3个元件就是386
这样以此类推
第3行的第一个元件编号就是392
第4行第一个就是400.......

附带工程一个
运行时更改地图元件.rar (190.35 KB, 下载次数: 440)


至于获取自动元件的编号
先在地图上放上自动元件
然后开个事件输入脚本
p $game_map.data[X坐标, Y坐标, 所在的层数-1]
所在的层数-1  就是说 第一层的话要输入为0  
第二层的话要输入为1...第三层的话要输入为2

  1. #==============================================================================
  2. # ■ Game_System
  3. #==============================================================================

  4. class Game_System
  5.   attr_accessor :hzhj_map
  6.   alias hzhj_sys_ini initialize
  7.   def initialize
  8.     @hzhj_map = {}
  9.     hzhj_sys_ini
  10.   end
  11. end


  12. #==============================================================================
  13. # ■ Game_Map
  14. #==============================================================================

  15. class Game_Map
  16.   alias hzhj_setup_map setup
  17.   def setup(map_id)
  18.     hzhj_setup_map(map_id)
  19.     if $game_system.hzhj_map[@map_id] != nil
  20.       for a in $game_system.hzhj_map[@map_id]
  21.         @map.data[a[0],a[1],a[2]] = a[3]
  22.       end
  23.     end
  24.   end
  25.   
  26.   def data=(new_data)
  27.     @map.data = new_data
  28.     return @map
  29.   end
  30.   
  31.   def hzhj(c, f = 0)
  32.     a = $game_player.x;b = $game_player.y
  33.     d = [];d.push(a);d.push(b);d.push(f)
  34.     d.push(c)
  35.     e = $game_map.map_id
  36.     if $game_system.hzhj_map[e] == nil
  37.       $game_system.hzhj_map[e] = []
  38.       $game_system.hzhj_map[e].push(d)
  39.     else
  40.       $game_system.hzhj_map[e].push(d)
  41.     end
  42.     $game_map.data[a,b,f] = c
  43.   end
  44. end

  45. #==============================================================================
  46. # ■ Spriteset_Map
  47. #==============================================================================

  48. class Spriteset_Map
  49.   alias hzhj_spri_map_upd update
  50.   def update
  51.     if @tilemap.map_data != $game_map.data
  52.       @tilemap.map_data = $game_map.data
  53.     end
  54.     hzhj_spri_map_upd
  55.   end
  56. end

复制代码

作者: 霜冻之狼    时间: 2009-10-17 16:07
本帖最后由 霜冻之狼 于 2009-10-17 16:09 编辑

其实LS不用这么麻烦……
http://rpg.blue/viewthread.php?tid=131802

ps:最后不要忘了刷新下地图
作者: 后知后觉    时间: 2009-10-17 16:35
本帖最后由 后知后觉 于 2009-10-17 16:38 编辑

你那个帖子里说的只是基础
那样直接改了的话 换个地图又或者是存档再读档又回复原来的样子了
如果去修改Map.rxdata的话
那就是说这是个一次性游戏
第2+N次开始新游戏的话就是改过以后的样子了
所以只有拿东西来记录一下然后存到存档里去
作者: 牛肉面    时间: 2009-10-17 16:38
啊,太感谢了!!!

怎么把悬赏分给你呢?
作者: 后知后觉    时间: 2009-10-17 16:39
你自己先试试看找找有没有BUG再说吧
作者: 牛肉面    时间: 2009-10-17 16:39
对了,这个如果切换地图或者存取档案会不会恢复呢?
作者: 后知后觉    时间: 2009-10-17 16:50
不会
作者: 牛肉面    时间: 2009-10-17 16:54
太好了!  我在测试一会,然后把分给你!
作者: boss870331    时间: 2009-10-17 20:52
谢谢大大!!顶一个!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1