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

Project1

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

[已经解决] 怎么设置类似轻功的走动?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2012-11-18
帖子
5
跳转到指定楼层
1
发表于 2013-3-18 10:21:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
就是能让角色在特定状况下,例如按住某个键就能把地图图块全部设成可通行,求方法

Lv1.梦旅人

梦石
0
星屑
50
在线时间
865 小时
注册时间
2010-6-27
帖子
131
2
发表于 2013-3-18 10:55:56 | 只看该作者
测试游戏的时候按ctrl就行了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2012-11-18
帖子
5
3
 楼主| 发表于 2013-3-18 11:16:07 | 只看该作者
本帖最后由 zyf32123 于 2013-3-18 11:20 编辑

在游戏中也需要...还有最好可以设置成技能(减蓝)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
865 小时
注册时间
2010-6-27
帖子
131
4
发表于 2013-3-18 12:05:24 | 只看该作者
本帖最后由 hcm 于 2013-4-8 11:46 编辑
  1. #==============================================================================
  2. # ■ Game_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图的类。包含卷动以及可以通行的判断功能。
  5. # 本类的实例请参考 $game_map 。
  6. #==============================================================================

  7. class Game_Map
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_accessor :tileset_name             # 元件 文件名
  12.   attr_accessor :autotile_names           # 自动元件 文件名
  13.   attr_accessor :panorama_name            # 全景 文件名
  14.   attr_accessor :panorama_hue             # 全景 色相
  15.   attr_accessor :fog_name                 # 雾 文件名
  16.   attr_accessor :fog_hue                  # 雾 色相
  17.   attr_accessor :fog_opacity              # 雾 不透明度
  18.   attr_accessor :fog_blend_type           # 雾 混合方式
  19.   attr_accessor :fog_zoom                 # 雾 放大率
  20.   attr_accessor :fog_sx                   # 雾 SX
  21.   attr_accessor :fog_sy                   # 雾 SY
  22.   attr_accessor :battleback_name          # 战斗背景 文件名
  23.   attr_accessor :display_x                # 显示 X 坐标 * 128
  24.   attr_accessor :display_y                # 显示 Y 坐标 * 128
  25.   attr_accessor :need_refresh             # 刷新要求标志
  26.   attr_reader   :passages                 # 通行表
  27.   attr_reader   :priorities               # 优先表
  28.   attr_reader   :terrain_tags             # 地形标记表
  29.   attr_reader   :events                   # 事件
  30.   attr_reader   :fog_ox                   # 雾 原点 X 坐标
  31.   attr_reader   :fog_oy                   # 雾 原点 Y 坐标
  32.   attr_reader   :fog_tone                 # 雾 色调
  33.   #--------------------------------------------------------------------------
  34.   # ● 初始化条件
  35.   #--------------------------------------------------------------------------
  36.   def initialize
  37.     @map_id = 0
  38.     @display_x = 0
  39.     @display_y = 0
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 设置
  43.   #     map_id : 地图 ID
  44.   #--------------------------------------------------------------------------
  45.   def setup(map_id)
  46.     # 地图 ID 记录到 @map_id
  47.     @map_id = map_id
  48.     # 地图文件装载后、设置到 @map
  49.     @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
  50.     # 定义实例变量设置地图元件信息
  51.     tileset = $data_tilesets[@map.tileset_id]
  52.     @tileset_name = tileset.tileset_name
  53.     @autotile_names = tileset.autotile_names
  54.     @panorama_name = tileset.panorama_name
  55.     @panorama_hue = tileset.panorama_hue
  56.     @fog_name = tileset.fog_name
  57.     @fog_hue = tileset.fog_hue
  58.     @fog_opacity = tileset.fog_opacity
  59.     @fog_blend_type = tileset.fog_blend_type
  60.     @fog_zoom = tileset.fog_zoom
  61.     @fog_sx = tileset.fog_sx
  62.     @fog_sy = tileset.fog_sy
  63.     @battleback_name = tileset.battleback_name
  64.     @passages = tileset.passages
  65.     @priorities = tileset.priorities
  66.     @terrain_tags = tileset.terrain_tags
  67.     # 初始化显示坐标
  68.     @display_x = 0
  69.     @display_y = 0
  70.     # 清除刷新要求标志
  71.     @need_refresh = false
  72.     # 设置地图事件数据
  73.     @events = {}
  74.     for i in @map.events.keys
  75.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  76.     end
  77.     # 设置公共事件数据
  78.     @common_events = {}
  79.     for i in 1...$data_common_events.size
  80.       @common_events[i] = Game_CommonEvent.new(i)
  81.     end
  82.     # 初始化雾的各种信息
  83.     @fog_ox = 0
  84.     @fog_oy = 0
  85.     @fog_tone = Tone.new(0, 0, 0, 0)
  86.     @fog_tone_target = Tone.new(0, 0, 0, 0)
  87.     @fog_tone_duration = 0
  88.     @fog_opacity_duration = 0
  89.     @fog_opacity_target = 0
  90.     # 初始化滚动信息
  91.     @scroll_direction = 2
  92.     @scroll_rest = 0
  93.     @scroll_speed = 4
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 获取地图 ID
  97.   #--------------------------------------------------------------------------
  98.   def map_id
  99.     return @map_id
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 获取宽度
  103.   #--------------------------------------------------------------------------
  104.   def width
  105.     return @map.width
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 获取高度
  109.   #--------------------------------------------------------------------------
  110.   def height
  111.     return @map.height
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 获取遇敌列表
  115.   #--------------------------------------------------------------------------
  116.   def encounter_list
  117.     return @map.encounter_list
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● 获取遇敌步数
  121.   #--------------------------------------------------------------------------
  122.   def encounter_step
  123.     return @map.encounter_step
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 获取地图数据
  127.   #--------------------------------------------------------------------------
  128.   def data
  129.     return @map.data
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● BGM / BGS 自动切换
  133.   #--------------------------------------------------------------------------
  134.   def autoplay
  135.     if @map.autoplay_bgm
  136.       $game_system.bgm_play(@map.bgm)
  137.     end
  138.     if @map.autoplay_bgs
  139.       $game_system.bgs_play(@map.bgs)
  140.     end
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 刷新
  144.   #--------------------------------------------------------------------------
  145.   def refresh
  146.     # 地图 ID 有效
  147.     if @map_id > 0
  148.       # 刷新全部的地图事件
  149.       for event in @events.values
  150.         event.refresh
  151.       end
  152.       # 刷新全部的公共事件
  153.       for common_event in @common_events.values
  154.         common_event.refresh
  155.       end
  156.     end
  157.     # 清除刷新要求标志
  158.     @need_refresh = false
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 向下滚动
  162.   #     distance : 滚动距离
  163.   #--------------------------------------------------------------------------
  164.   def scroll_down(distance)
  165.     @display_y = [@display_y + distance, (self.height - 15) * 128].min
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 向左滚动
  169.   #     distance : 滚动距离
  170.   #--------------------------------------------------------------------------
  171.   def scroll_left(distance)
  172.     @display_x = [@display_x - distance, 0].max
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 向右滚动
  176.   #     distance : 滚动距离
  177.   #--------------------------------------------------------------------------
  178.   def scroll_right(distance)
  179.     @display_x = [@display_x + distance, (self.width - 20) * 128].min
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 向上滚动
  183.   #     distance : 滚动距离
  184.   #--------------------------------------------------------------------------
  185.   def scroll_up(distance)
  186.     @display_y = [@display_y - distance, 0].max
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 有效坐标判定
  190.   #     x          : X 坐标
  191.   #     y          : Y 坐标
  192.   #--------------------------------------------------------------------------
  193.   def valid?(x, y)
  194.     return (x >= 0 and x < width and y >= 0 and y < height)
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 可以通行判定
  198.   #     x          : X 坐标
  199.   #     y          : Y 坐标
  200.   #     d          : 方向 (0,2,4,6,8,10)
  201.   #                  ※ 0,10 = 全方向不能通行的情况的判定 (跳跃等)
  202.   #     self_event : 自己 (判定事件可以通行的情况下)
  203.   #--------------------------------------------------------------------------
  204.   def passable?(x, y, d, self_event = nil)
  205.     # 被给予的坐标地图外的情况下
  206.     unless valid?(x, y)
  207.       # 不能通行
  208.       return false
  209.     end
  210.     # 方向 (0,2,4,6,8,10) 与障碍物接触 (0,1,2,4,8,0) 后变换
  211.     bit = (1 << (d / 2 - 1)) & 0x0f
  212.     # 循环全部的事件
  213.     for event in events.values
  214.       # 自己以外的元件与坐标相同的情况
  215.       if event.tile_id >= 0 and event != self_event and
  216.          event.x == x and event.y == y and not event.through
  217.         # 如果障碍物的接触被设置的情况下
  218.         if @passages[event.tile_id] & bit != 0 and $game_switches[1] == false
  219.           # 不能通行
  220.           return false
  221.         # 如果全方向的障碍物的接触被设置的情况下
  222.         elsif @passages[event.tile_id] & 0x0f == 0x0f and $game_switches[1] == false
  223.           # 不能通行
  224.           return false
  225.         # 这以外的优先度为 0 的情况下
  226.         elsif @priorities[event.tile_id] == 0 or $game_switches[1] == true
  227.           # 可以通行
  228.           return true
  229.         end
  230.       end
  231.     end
  232.     # 从层按从上到下的顺序调查循环
  233.     for i in [2, 1, 0]
  234.       # 取得元件 ID
  235.       tile_id = data[x, y, i]
  236.       # 取得元件 ID 失败
  237.       if tile_id == nil and $game_switches[1] == false
  238.         # 不能通行
  239.         return false
  240.       # 如果障碍物的接触被设置的情况下
  241.       elsif @passages[tile_id] & bit != 0 and $game_switches[1] == false
  242.         # 不能通行
  243.         return false
  244.       # 如果全方向的障碍物的接触被设置的情况下
  245.       elsif @passages[tile_id] & 0x0f == 0x0f and $game_switches[1] == false
  246.         # 不能通行
  247.         return false
  248.       # 这以外的优先度为 0 的情况下
  249.       elsif @priorities[tile_id] == 0 or $game_switches[1] == true
  250.         # 可以通行
  251.         return true
  252.       end
  253.     end
  254.     # 可以通行
  255.     return true
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 茂密判定
  259.   #     x          : X 坐标
  260.   #     y          : Y 坐标
  261.   #--------------------------------------------------------------------------
  262.   def bush?(x, y)
  263.     if @map_id != 0
  264.       for i in [2, 1, 0]
  265.         tile_id = data[x, y, i]
  266.         if tile_id == nil
  267.           return false
  268.         elsif @passages[tile_id] & 0x40 == 0x40
  269.           return true
  270.         end
  271.       end
  272.     end
  273.     return false
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● 反击判定
  277.   #     x          : X 坐标
  278.   #     y          : Y 坐标
  279.   #--------------------------------------------------------------------------
  280.   def counter?(x, y)
  281.     if @map_id != 0
  282.       for i in [2, 1, 0]
  283.         tile_id = data[x, y, i]
  284.         if tile_id == nil
  285.           return false
  286.         elsif @passages[tile_id] & 0x80 == 0x80
  287.           return true
  288.         end
  289.       end
  290.     end
  291.     return false
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ● 地获取地形标志
  295.   #     x          : X 坐标
  296.   #     y          : Y 坐标
  297.   #--------------------------------------------------------------------------
  298.   def terrain_tag(x, y)
  299.     if @map_id != 0
  300.       for i in [2, 1, 0]
  301.         tile_id = data[x, y, i]
  302.         if tile_id == nil
  303.           return 0
  304.         elsif @terrain_tags[tile_id] > 0
  305.           return @terrain_tags[tile_id]
  306.         end
  307.       end
  308.     end
  309.     return 0
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 获取指定位置的事件 ID
  313.   #     x          : X 坐标
  314.   #     y          : Y 坐标
  315.   #--------------------------------------------------------------------------
  316.   def check_event(x, y)
  317.     for event in $game_map.events.values
  318.       if event.x == x and event.y == y
  319.         return event.id
  320.       end
  321.     end
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● 滚动开始
  325.   #     direction : 滚动方向
  326.   #     distance  : 滚动距离
  327.   #     speed     : 滚动速度
  328.   #--------------------------------------------------------------------------
  329.   def start_scroll(direction, distance, speed)
  330.     @scroll_direction = direction
  331.     @scroll_rest = distance * 128
  332.     @scroll_speed = speed
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ● 滚动中判定
  336.   #--------------------------------------------------------------------------
  337.   def scrolling?
  338.     return @scroll_rest > 0
  339.   end
  340.   #--------------------------------------------------------------------------
  341.   # ● 开始变更雾的色调
  342.   #     tone     : 色调
  343.   #     duration : 时间
  344.   #--------------------------------------------------------------------------
  345.   def start_fog_tone_change(tone, duration)
  346.     @fog_tone_target = tone.clone
  347.     @fog_tone_duration = duration
  348.     if @fog_tone_duration == 0
  349.       @fog_tone = @fog_tone_target.clone
  350.     end
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # ● 开始变更雾的不透明度
  354.   #     opacity  : 不透明度
  355.   #     duration : 时间
  356.   #--------------------------------------------------------------------------
  357.   def start_fog_opacity_change(opacity, duration)
  358.     @fog_opacity_target = opacity * 1.0
  359.     @fog_opacity_duration = duration
  360.     if @fog_opacity_duration == 0
  361.       @fog_opacity = @fog_opacity_target
  362.     end
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ● 刷新画面
  366.   #--------------------------------------------------------------------------
  367.   def update
  368.     # 还原必要的地图
  369.     if $game_map.need_refresh
  370.       refresh
  371.     end
  372.     # 滚动中的情况下
  373.     if @scroll_rest > 0
  374.       # 滚动速度变化为地图坐标系的距离
  375.       distance = 2 ** @scroll_speed
  376.       # 执行滚动
  377.       case @scroll_direction
  378.       when 2  # 下
  379.         scroll_down(distance)
  380.       when 4  # 左
  381.         scroll_left(distance)
  382.       when 6  # 右
  383.         scroll_right(distance)
  384.       when 8  # 上
  385.         scroll_up(distance)
  386.       end
  387.       # 滚动距离的减法运算
  388.       @scroll_rest -= distance
  389.     end
  390.     # 更新地图事件
  391.     for event in @events.values
  392.       event.update
  393.     end
  394.     # 更新公共事件
  395.     for common_event in @common_events.values
  396.       common_event.update
  397.     end
  398.     # 处理雾的滚动
  399.     @fog_ox -= @fog_sx / 8.0
  400.     @fog_oy -= @fog_sy / 8.0
  401.     # 处理雾的色调变更
  402.     if @fog_tone_duration >= 1
  403.       d = @fog_tone_duration
  404.       target = @fog_tone_target
  405.       @fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
  406.       @fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
  407.       @fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
  408.       @fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
  409.       @fog_tone_duration -= 1
  410.     end
  411.     # 处理雾的不透明度变更
  412.     if @fog_opacity_duration >= 1
  413.       d = @fog_opacity_duration
  414.       @fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
  415.       @fog_opacity_duration -= 1
  416.     end
  417.   end
  418. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
865 小时
注册时间
2010-6-27
帖子
131
5
发表于 2013-3-18 12:06:39 | 只看该作者
把Game_Map换成这段,特技中设置公共时间,用条件分歧,开启时一号开关打开,关闭时关闭1号开关

评分

参与人数 1星屑 +100 收起 理由
hcm + 100 感谢回答

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

水土火风重逢处

梦石
0
星屑
229
在线时间
691 小时
注册时间
2010-7-17
帖子
3042
6
发表于 2013-3-18 12:16:25 | 只看该作者
LS方法感觉好麻烦....
记得将指定开关打开...如果想要其他的按键请搜索全键盘脚本...
未测试,有问题请@我

点评

+1  发表于 2013-3-18 18:48
独坐望城,望断天涯
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2012-11-18
帖子
5
7
 楼主| 发表于 2013-3-18 17:00:09 | 只看该作者
多亏大虾指点(在游戏手柄里R键居然是键盘上的W,半天按着R键木有反应{:2_263:}){:2_249:}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2012-11-18
帖子
5
8
 楼主| 发表于 2013-3-18 17:09:12 | 只看该作者
还有请教一下,能不能设置成在按住R键时每秒内减指定的蓝?本人是脚本白痴...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

水土火风重逢处

梦石
0
星屑
229
在线时间
691 小时
注册时间
2010-7-17
帖子
3042
9
发表于 2013-3-18 18:06:01 | 只看该作者
zyf32123 发表于 2013-3-18 17:09
还有请教一下,能不能设置成在按住R键时每秒内减指定的蓝?本人是脚本白痴... ...

....刚考完试回来...........

评分

参与人数 1星屑 +100 收起 理由
hcm + 100 感谢回答

查看全部评分

独坐望城,望断天涯
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-6-6 12:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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