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

Project1

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

[RMVX发布] VX RGSS202E.dll 分辨率完全解放

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
462 小时
注册时间
2007-7-30
帖子
643
跳转到指定楼层
1
发表于 2010-12-26 20:30:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 david50407 于 2010-12-26 22:54 编辑

今天尝试把RGSS202E.dll改了下
理论上画面最大能到无限 (理论上 因为我XE的把 强制修正 给强制跳过了
Tilemap 最大到 1024*768
注意: 地图请设置成大于或等于画面的大小 (这是以前就有的BUG)

脚本请加上:

  1. class Viewport
  2.   alias old_init initialize
  3.   def initialize(*args)
  4.     old_init(0, 0, 1024, 768)
  5.   end
  6. end
复制代码
来修正Viewport (额...我偷懒 全改大了 有心的自己去细节吧...

上图: fps 丝毫不减 =   =b



地图细节修正脚本 之后再发 现在没空...
上附件:
RGSS202E.zip (948.83 KB, 下载次数: 8989)
遁~

Spriteset_Battle : Line 31

  1.   #--------------------------------------------------------------------------
  2.   # ● 生成战斗背景活动块
  3.   #--------------------------------------------------------------------------
  4.   def create_battleback
  5.     source = $game_temp.background_bitmap
  6.     bitmap = Bitmap.new(1024, 768) #=====
复制代码

点评

我东拼西都弄了个GTBS,目前正在找人帮忙修正bug呢。  发表于 2011-4-26 20:36

评分

参与人数 9星屑 +700 +4 收起 理由
阿尔西斯的马甲 + 10 塞糖
R-零 + 18 连续自然数……
slick + 128 这个。。。感动了
eve592370698 + 170 我崇拜您!前辈就是厉害!
54酱 + 24
Rion幻音 + 24 好强大啊!!,但分辨率放大,地图就完全曝.
wbsy8241 + 6 精品文章
yangff + 320
夕阳武士 + 4 前辈,还有什么理由不膜拜你呢~.

查看全部评分

RGE这万年大坑 啥时填起来@@

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42394
在线时间
7602 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

2
发表于 2010-12-26 20:33:58 | 只看该作者
竟然瞬间就发上来了,渐变的问题也修复了吗……

点评

渐变无问题... 图大一点  发表于 2010-12-26 20:41
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1185
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

3
发表于 2010-12-26 22:27:48 | 只看该作者
期望实现RGE中Frame的某邪恶方法的功能。

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

4
发表于 2010-12-26 22:34:53 | 只看该作者
  1. #==============================================================================
  2. # ■ Game_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图的类。包含卷动以及可以通行的判断功能。本类的实例请参考 $game_map 。
  5. #==============================================================================

  6. class Game_Map
  7.   #--------------------------------------------------------------------------
  8.   # ● 定义实例变量
  9.   #--------------------------------------------------------------------------
  10.   attr_reader   :screen                   # 地图画面状态
  11.   attr_reader   :interpreter              # 地图事件解释器
  12.   attr_reader   :display_x                # 画面 X 座标 * 256
  13.   attr_reader   :display_y                # 画面 Y 座标 * 256
  14.   attr_reader   :parallax_name            # 远景图文件名
  15.   attr_reader   :passages                 # 通行列表
  16.   attr_reader   :events                   # 事件
  17.   attr_reader   :vehicles                 # 交通工具
  18.   attr_accessor :need_refresh             # 需要刷新标志
  19.   #--------------------------------------------------------------------------
  20.   # ● 初始化对像
  21.   #--------------------------------------------------------------------------
  22.   def initialize
  23.     @screen = Game_Screen.new
  24.     @interpreter = Game_Interpreter.new(0, true)
  25.     @map_id = 0
  26.     @display_x = 0
  27.     @display_y = 0
  28.     create_vehicles
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 设置
  32.   #     map_id : 地图 ID
  33.   #--------------------------------------------------------------------------
  34.   def setup(map_id)
  35.     @map_id = map_id
  36.     @map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
  37.     @display_x = 0
  38.     @display_y = 0
  39.     @passages = $data_system.passages
  40.     referesh_vehicles
  41.     setup_events
  42.     setup_scroll
  43.     setup_parallax
  44.     @need_refresh = false
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 生成交通工具
  48.   #--------------------------------------------------------------------------
  49.   def create_vehicles
  50.     @vehicles = []
  51.     @vehicles[0] = Game_Vehicle.new(0)    # 小型船
  52.     @vehicles[1] = Game_Vehicle.new(1)    # 大型船
  53.     @vehicles[2] = Game_Vehicle.new(2)    # 飞船
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 刷新交通工具
  57.   #--------------------------------------------------------------------------
  58.   def referesh_vehicles
  59.     for vehicle in @vehicles
  60.       vehicle.refresh
  61.     end
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 获取小型船
  65.   #--------------------------------------------------------------------------
  66.   def boat
  67.     return @vehicles[0]
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 获取大型船
  71.   #--------------------------------------------------------------------------
  72.   def ship
  73.     return @vehicles[1]
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 获取飞船
  77.   #--------------------------------------------------------------------------
  78.   def airship
  79.     return @vehicles[2]
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 设置事件
  83.   #--------------------------------------------------------------------------
  84.   def setup_events
  85.     @events = {}          # 地图事件
  86.     for i in @map.events.keys
  87.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  88.     end
  89.     @common_events = {}   # 公共事件
  90.     for i in 1...$data_common_events.size
  91.       @common_events[i] = Game_CommonEvent.new(i)
  92.     end
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 设置滚动
  96.   #--------------------------------------------------------------------------
  97.   def setup_scroll
  98.     @scroll_direction = 2
  99.     @scroll_rest = 0
  100.     @scroll_speed = 4
  101.     @margin_x = (width - $原宽度/32) * 256 / 2      # 画面未显示宽度 / 2
  102.     @margin_y = (height - $原高度/32) * 256 / 2     # 画面未显示高度 / 2
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 设置远景
  106.   #--------------------------------------------------------------------------
  107.   def setup_parallax
  108.     @parallax_name = @map.parallax_name
  109.     @parallax_loop_x = @map.parallax_loop_x
  110.     @parallax_loop_y = @map.parallax_loop_y
  111.     @parallax_sx = @map.parallax_sx
  112.     @parallax_sy = @map.parallax_sy
  113.     @parallax_x = 0
  114.     @parallax_y = 0
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 设置显示位置
  118.   #     x : 新显示 X 座标 * 256
  119.   #     y : 新显示 Y 座标 * 256
  120.   #--------------------------------------------------------------------------
  121.   def set_display_pos(x, y)
  122.     @display_x = (x + @map.width * 256) % (@map.width * 256)
  123.     @display_y = (y + @map.height * 256) % (@map.height * 256)
  124.     @parallax_x = x
  125.     @parallax_y = y
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 计算远景 X 座标
  129.   #     bitmap : 远景图
  130.   #--------------------------------------------------------------------------
  131.   def calc_parallax_x(bitmap)
  132.     if bitmap == nil
  133.       return 0
  134.     elsif @parallax_loop_x
  135.       return @parallax_x / 16
  136.     elsif loop_horizontal?
  137.       return 0
  138.     else
  139.       w1 = bitmap.width - $原宽度
  140.       w2 = @map.width * 32 - $原宽度
  141.       if w1 <= 0 or w2 <= 0
  142.         return 0
  143.       else
  144.         return @parallax_x * w1 / w2 / 8
  145.       end
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 计算远景 Y 座标
  150.   #     bitmap : 远景图
  151.   #--------------------------------------------------------------------------
  152.   def calc_parallax_y(bitmap)
  153.     if bitmap == nil
  154.       return 0
  155.     elsif @parallax_loop_y
  156.       return @parallax_y / 16
  157.     elsif loop_vertical?
  158.       return 0
  159.     else
  160.       h1 = bitmap.height - $原高度
  161.       h2 = @map.height * 32 - $原高度
  162.       if h1 <= 0 or h2 <= 0
  163.         return 0
  164.       else
  165.         return @parallax_y * h1 / h2 / 8
  166.       end
  167.     end
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ● 获取地图 ID
  171.   #--------------------------------------------------------------------------
  172.   def map_id
  173.     return @map_id
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ● 获取宽度
  177.   #--------------------------------------------------------------------------
  178.   def width
  179.     return @map.width
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 获取高度
  183.   #--------------------------------------------------------------------------
  184.   def height
  185.     return @map.height
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 横向回圈判断
  189.   #--------------------------------------------------------------------------
  190.   def loop_horizontal?
  191.     return (@map.scroll_type == 2 or @map.scroll_type == 3)
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 纵向回圈判断
  195.   #--------------------------------------------------------------------------
  196.   def loop_vertical?
  197.     return (@map.scroll_type == 1 or @map.scroll_type == 3)
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 判断是否禁止奔跑
  201.   #--------------------------------------------------------------------------
  202.   def disable_dash?
  203.     return @map.disable_dashing
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 获取遇敌列表
  207.   #--------------------------------------------------------------------------
  208.   def encounter_list
  209.     return @map.encounter_list
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● 获取遇敌步数
  213.   #--------------------------------------------------------------------------
  214.   def encounter_step
  215.     return @map.encounter_step
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 获取地图对象
  219.   #--------------------------------------------------------------------------
  220.   def map
  221.     return @map
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ● 获取地图数据
  225.   #--------------------------------------------------------------------------
  226.   def data
  227.     return @map.data
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 计算 X 座标减去显示座标
  231.   #     x : X 座标
  232.   #--------------------------------------------------------------------------
  233.   def adjust_x(x)
  234.     if loop_horizontal? and x < @display_x - @margin_x
  235.       return x - @display_x + @map.width * 256
  236.     else
  237.       return x - @display_x
  238.     end
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 计算 Y 座标减去显示座标
  242.   #     y : Y 座标
  243.   #--------------------------------------------------------------------------
  244.   def adjust_y(y)
  245.     if loop_vertical? and y < @display_y - @margin_y
  246.       return y - @display_y + @map.height * 256
  247.     else
  248.       return y - @display_y
  249.     end
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● 计算回圈调整後的 X 座标
  253.   #     x : X 座标
  254.   #--------------------------------------------------------------------------
  255.   def round_x(x)
  256.     if loop_horizontal?
  257.       return (x + width) % width
  258.     else
  259.       return x
  260.     end
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # ● 计算回圈调整後的 Y 座标
  264.   #     y : Y 座标
  265.   #--------------------------------------------------------------------------
  266.   def round_y(y)
  267.     if loop_vertical?
  268.       return (y + height) % height
  269.     else
  270.       return y
  271.     end
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ● 计算一格指定方向的 X 座标
  275.   #     x         : X 座标
  276.   #     direction : 方向(2, 4, 6, 8)
  277.   #--------------------------------------------------------------------------
  278.   def x_with_direction(x, direction)
  279.     return round_x(x + (direction == 6 ? 1 : direction == 4 ? -1 : 0))
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ● 计算一格指定方向的 Y 座标
  283.   #     y         : Y 座标
  284.   #     direction : 方向(2, 4, 6, 8)
  285.   #--------------------------------------------------------------------------
  286.   def y_with_direction(y, direction)
  287.     return round_y(y + (direction == 2 ? 1 : direction == 8 ? -1 : 0))
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● 获取指定位置的事件数组
  291.   #     x : X 座标
  292.   #     y : Y 座标
  293.   #--------------------------------------------------------------------------
  294.   def events_xy(x, y)
  295.     result = []
  296.     for event in $game_map.events.values
  297.       result.push(event) if event.pos?(x, y)
  298.     end
  299.     return result
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # ● BGM / BGS 自动切换
  303.   #--------------------------------------------------------------------------
  304.   def autoplay
  305.     @map.bgm.play if @map.autoplay_bgm unless $game_player.in_vehicle?
  306.     @map.bgs.play if @map.autoplay_bgs
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 刷新
  310.   #--------------------------------------------------------------------------
  311.   def refresh
  312.     if @map_id > 0
  313.       for event in @events.values
  314.         event.refresh
  315.       end
  316.       for common_event in @common_events.values
  317.         common_event.refresh
  318.       end
  319.     end
  320.     @need_refresh = false
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # ● 向下滚动
  324.   #     distance : 滚动距离
  325.   #--------------------------------------------------------------------------
  326.   def scroll_down(distance)
  327.     if loop_vertical?
  328.       @display_y += distance
  329.       @display_y %= @map.height * 256
  330.       @parallax_y += distance
  331.     else
  332.       last_y = @display_y
  333.       @display_y = [@display_y + distance, (height - $原高度/32) * 256].min
  334.       @parallax_y += @display_y - last_y
  335.     end
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 向左滚动
  339.   #     distance : 滚动距离
  340.   #--------------------------------------------------------------------------
  341.   def scroll_left(distance)
  342.     if loop_horizontal?
  343.       @display_x += @map.width * 256 - distance
  344.       @display_x %= @map.width * 256
  345.       @parallax_x -= distance
  346.     else
  347.       last_x = @display_x
  348.       @display_x = [@display_x - distance, 0].max
  349.       @parallax_x += @display_x - last_x
  350.     end
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # ● 向右滚动
  354.   #     distance : 滚动距离
  355.   #--------------------------------------------------------------------------
  356.   def scroll_right(distance)
  357.     if loop_horizontal?
  358.       @display_x += distance
  359.       @display_x %= @map.width * 256
  360.       @parallax_x += distance
  361.     else
  362.       last_x = @display_x
  363.       @display_x = [@display_x + distance, (width - $原宽度/32) * 256].min
  364.       @parallax_x += @display_x - last_x
  365.     end
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # ● 向上滚动
  369.   #     distance : 滚动距离
  370.   #--------------------------------------------------------------------------
  371.   def scroll_up(distance)
  372.     if loop_vertical?
  373.       @display_y += @map.height * 256 - distance
  374.       @display_y %= @map.height * 256
  375.       @parallax_y -= distance
  376.     else
  377.       last_y = @display_y
  378.       @display_y = [@display_y - distance, 0].max
  379.       @parallax_y += @display_y - last_y
  380.     end
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● 有效坐标判定
  384.   #     x : X 坐标
  385.   #     y : Y 坐标
  386.   #--------------------------------------------------------------------------
  387.   def valid?(x, y)
  388.     return (x >= 0 and x < width and y >= 0 and y < height)
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ● 可以通行判定
  392.   #     x : X 坐标
  393.   #     y : Y 坐标
  394.   #     flag : 通行度标志(非交通工具时,一般为 0x01)
  395.   #--------------------------------------------------------------------------
  396.   def passable?(x, y, flag = 0x01)
  397.     for event in events_xy(x, y)            # 循环指定位置的事件数组
  398.       next if event.tile_id == 0            # 事件图片非图块的情况下
  399.       next if event.priority_type > 0       # 非「一般角色之下」
  400.       next if event.through                 # 允许穿透
  401.       pass = @passages[event.tile_id]       # 获取通行属性
  402.       next if pass & 0x10 == 0x10           # ☆: 不影响通行判定
  403.       return true if pass & flag == 0x00    # ○: 可以通行
  404.       return false if pass & flag == flag   # x: 不可通行
  405.     end
  406.     for i in [2, 1, 0]                      # 由上层而下
  407.       tile_id = @map.data[x, y, i]          # 获取图块 ID
  408.       return false if tile_id == nil        # 无法获取图块:不可通行
  409.       pass = @passages[tile_id]             # 获取通行属性
  410.       next if pass & 0x10 == 0x10           # ☆: 不影响通行判定
  411.       return true if pass & flag == 0x00    # o: 可以通行
  412.       return false if pass & flag == flag   # x: 不可通行
  413.     end
  414.     return false                            # 不可通行
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ● 判断小型船通行度
  418.   #     x : X 坐标
  419.   #     y : Y 坐标
  420.   #--------------------------------------------------------------------------
  421.   def boat_passable?(x, y)
  422.     return passable?(x, y, 0x02)
  423.   end
  424.   #--------------------------------------------------------------------------
  425.   # ● 判断大型船通行度
  426.   #     x : X 坐标
  427.   #     y : Y 坐标
  428.   #--------------------------------------------------------------------------
  429.   def ship_passable?(x, y)
  430.     return passable?(x, y, 0x04)
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ● 判断飞船降落通行度
  434.   #     x : X 坐标
  435.   #     y : Y 坐标
  436.   #--------------------------------------------------------------------------
  437.   def airship_land_ok?(x, y)
  438.     return passable?(x, y, 0x08)
  439.   end
  440.   #--------------------------------------------------------------------------
  441.   # ● 判断草木繁茂处
  442.   #     x : X 坐标
  443.   #     y : Y 坐标
  444.   #--------------------------------------------------------------------------
  445.   def bush?(x, y)
  446.     return false unless valid?(x, y)
  447.     return @passages[@map.data[x, y, 1]] & 0x40 == 0x40
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ● 判断柜台属性
  451.   #     x : X 坐标
  452.   #     y : Y 坐标
  453.   #--------------------------------------------------------------------------
  454.   def counter?(x, y)
  455.     return false unless valid?(x, y)
  456.     return @passages[@map.data[x, y, 0]] & 0x80 == 0x80
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ● 开始滚动
  460.   #     direction : 滚动方向
  461.   #     distance  : 滚动距离
  462.   #     speed     : 滚动速度
  463.   #--------------------------------------------------------------------------
  464.   def start_scroll(direction, distance, speed)
  465.     @scroll_direction = direction
  466.     @scroll_rest = distance * 256
  467.     @scroll_speed = speed
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 滚动判断
  471.   #--------------------------------------------------------------------------
  472.   def scrolling?
  473.     return @scroll_rest > 0
  474.   end
  475.   #--------------------------------------------------------------------------
  476.   # ● 更新画面
  477.   #--------------------------------------------------------------------------
  478.   def update
  479.     refresh if $game_map.need_refresh
  480.     update_scroll
  481.     update_events
  482.     update_vehicles
  483.     update_parallax
  484.     @screen.update
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ● 更新滚动
  488.   #--------------------------------------------------------------------------
  489.   def update_scroll
  490.     if @scroll_rest > 0                 # 滚动中
  491.       distance = 2 ** @scroll_speed     # 转换成距离
  492.       case @scroll_direction
  493.       when 2  # 下
  494.         scroll_down(distance)
  495.       when 4  # 左
  496.         scroll_left(distance)
  497.       when 6  # 右
  498.         scroll_right(distance)
  499.       when 8  # 上
  500.         scroll_up(distance)
  501.       end
  502.       @scroll_rest -= distance          # 减短距离
  503.     end
  504.   end
  505.   #--------------------------------------------------------------------------
  506.   # ● 更新事件
  507.   #--------------------------------------------------------------------------
  508.   def update_events
  509.     for event in @events.values
  510.       event.update
  511.     end
  512.     for common_event in @common_events.values
  513.       common_event.update
  514.     end
  515.   end
  516.   #--------------------------------------------------------------------------
  517.   # ● 更新交通工具
  518.   #--------------------------------------------------------------------------
  519.   def update_vehicles
  520.     for vehicle in @vehicles
  521.       vehicle.update
  522.     end
  523.   end
  524.   #--------------------------------------------------------------------------
  525.   # ● 更新远景
  526.   #--------------------------------------------------------------------------
  527.   def update_parallax
  528.     @parallax_x += @parallax_sx * 4 if @parallax_loop_x
  529.     @parallax_y += @parallax_sy * 4 if @parallax_loop_y
  530.   end
  531. end
复制代码
  1. #==============================================================================
  2. # ■ Game_Player
  3. #------------------------------------------------------------------------------
  4. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  5. # 本类的实例请参考 $game_player。
  6. #==============================================================================

  7. class Game_Player < Game_Character
  8.   #--------------------------------------------------------------------------
  9.   # ● 常量
  10.   #--------------------------------------------------------------------------
  11.   CENTER_X = ($原宽度 / 2 - 16) * 8     # 画面中央 X 座标 * 8
  12.   CENTER_Y = ($原高度 / 2 - 16) * 8     # 画面中央 Y 座标 * 8
  13.   #--------------------------------------------------------------------------
  14.   # ● 定义实例变量
  15.   #--------------------------------------------------------------------------
  16.   attr_reader   :vehicle_type       # 目前乘坐交通工具类型
  17.   #--------------------------------------------------------------------------
  18.   # ● 初始化对像
  19.   #--------------------------------------------------------------------------
  20.   def initialize
  21.     super
  22.     @vehicle_type = -1
  23.     @vehicle_getting_on = false     # 乘坐交通工具标志
  24.     @vehicle_getting_off = false    # 离开交通工具标志
  25.     @transferring = false           # 场所移动标志
  26.     @new_map_id = 0                 # 目标地图 ID
  27.     @new_x = 0                      # 目标 X 座标
  28.     @new_y = 0                      # 目标 Y 座标
  29.     @new_direction = 0              # 移动後方向
  30.     @walking_bgm = nil              # 记忆用行走时 BGM
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 判断是否停止
  34.   #--------------------------------------------------------------------------
  35.   def stopping?
  36.     return false if @vehicle_getting_on
  37.     return false if @vehicle_getting_off
  38.     return super
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 场所移动准备
  42.   #     map_id    : 地图 ID
  43.   #     x         : X 座标
  44.   #     y         : Y 座标
  45.   #     direction : 移动後面向
  46.   #--------------------------------------------------------------------------
  47.   def reserve_transfer(map_id, x, y, direction)
  48.     @transferring = true
  49.     @new_map_id = map_id
  50.     @new_x = x
  51.     @new_y = y
  52.     @new_direction = direction
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 判断是否准备场所移动
  56.   #--------------------------------------------------------------------------
  57.   def transfer?
  58.     return @transferring
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ● 执行场所移动
  62.   #--------------------------------------------------------------------------
  63.   def perform_transfer
  64.     return unless @transferring
  65.     @transferring = false
  66.     set_direction(@new_direction)
  67.     if $game_map.map_id != @new_map_id
  68.       $game_map.setup(@new_map_id)     # 移动到另一地图
  69.     end
  70.     moveto(@new_x, @new_y)
  71.     @walking_bgm = $game_map.map.bgm
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 判断地图是否可以通行
  75.   #     x:X 座标
  76.   #     y:Y 座标
  77.   #--------------------------------------------------------------------------
  78.   def map_passable?(x, y)
  79.     case @vehicle_type
  80.     when 0  # 小型船
  81.       return $game_map.boat_passable?(x, y)
  82.     when 1  # 大型船
  83.       return $game_map.ship_passable?(x, y)
  84.     when 2  # 飞船
  85.       return true
  86.     else    # 行走
  87.       return $game_map.passable?(x, y)
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 判断行走通行度
  92.   #     x:X 座标
  93.   #     y:Y 座标
  94.   #--------------------------------------------------------------------------
  95.   def can_walk?(x, y)
  96.     last_vehicle_type = @vehicle_type   # 移除交通工具类型
  97.     @vehicle_type = -1                  # 暂时设置为行走
  98.     result = passable?(x, y)            # 判断是否可以通行
  99.     @vehicle_type = last_vehicle_type   # 回复交通工具类型
  100.     return result
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 判断飞船降落通行度
  104.   #     x:X 座标
  105.   #     y:Y 座标
  106.   #--------------------------------------------------------------------------
  107.   def airship_land_ok?(x, y)
  108.     unless $game_map.airship_land_ok?(x, y)
  109.       return false    # 指定地图图块无法降落
  110.     end
  111.     unless $game_map.events_xy(x, y).empty?
  112.       return false    # 不可降落于事件之上
  113.     end
  114.     return true       # 可以降落
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 判断是否在交通工具上
  118.   #--------------------------------------------------------------------------
  119.   def in_vehicle?
  120.     return @vehicle_type >= 0
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 判断是否在飞船之上
  124.   #--------------------------------------------------------------------------
  125.   def in_airship?
  126.     return @vehicle_type == 2
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 判断是否奔跑中
  130.   #--------------------------------------------------------------------------
  131.   def dash?
  132.     return false if @move_route_forcing
  133.     return false if $game_map.disable_dash?
  134.     return false if in_vehicle?
  135.     return Input.press?(Input::A)
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # ● 判断是否是游戏测试通行状态
  139.   #--------------------------------------------------------------------------
  140.   def debug_through?
  141.     return false unless $TEST
  142.     return Input.press?(Input::CTRL)
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 设置地图画面座标为画面中央
  146.   #     x:X 座标
  147.   #     y:Y 座标
  148.   #--------------------------------------------------------------------------
  149.   def center(x, y)
  150.     display_x = x * 256 - CENTER_X                    # 计算座标
  151.     unless $game_map.loop_horizontal?                 # 非横向回圈的场合
  152.       max_x = ($game_map.width - $原宽度/32) * 256            # 计算最大值
  153.       display_x = [0, [display_x, max_x].min].max     # 校正座标
  154.     end
  155.     display_y = y * 256 - CENTER_Y                    # 计算座标
  156.     unless $game_map.loop_vertical?                   # 非横向回圈的场合
  157.       max_y = ($game_map.height - $原高度/32) * 256           # 计算最大值
  158.       display_y = [0, [display_y, max_y].min].max     # 校正座标
  159.     end
  160.    
  161.     $game_map.set_display_pos(display_x, display_y)   # 改变地图位置
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 移动至指定位置
  165.   #     x:X 座标
  166.   #     y:Y 座标
  167.   #--------------------------------------------------------------------------
  168.   def moveto(x, y)
  169.     super
  170.     center(x, y)                                      # 居中对齐
  171.     make_encounter_count                              # 初始化遇敌
  172.     if in_vehicle?                                    # 在交通工具中的场合
  173.       vehicle = $game_map.vehicles[@vehicle_type]     # 获取交通工具
  174.       vehicle.refresh                                 # 刷新交通工具
  175.     end
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 增加步数
  179.   #--------------------------------------------------------------------------
  180.   def increase_steps
  181.     super
  182.     return if @move_route_forcing
  183.     return if in_vehicle?
  184.     $game_party.increase_steps
  185.     $game_party.on_player_walk
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 设置遇敌计数
  189.   #--------------------------------------------------------------------------
  190.   def encounter_count
  191.     return @encounter_count
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 初始化遇敌计数
  195.   #--------------------------------------------------------------------------
  196.   def make_encounter_count
  197.     if $game_map.map_id != 0
  198.       n = $game_map.encounter_step
  199.       @encounter_count = rand(n) + rand(n) + 1  # 好比掷两个骰子
  200.     end
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 判断是否在地图区域中
  204.   #     area : 区域数据(RPG::Area)
  205.   #--------------------------------------------------------------------------
  206.   def in_area?(area)
  207.     return false if area == nil
  208.     return false if $game_map.map_id != area.map_id
  209.     return false if @x < area.rect.x
  210.     return false if @y < area.rect.y
  211.     return false if @x >= area.rect.x + area.rect.width
  212.     return false if @y >= area.rect.y + area.rect.height
  213.     return true
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● 生成遇敌队伍
  217.   #--------------------------------------------------------------------------
  218.   def make_encounter_troop_id
  219.     encounter_list = $game_map.encounter_list.clone
  220.     for area in $data_areas.values
  221.       encounter_list += area.encounter_list if in_area?(area)
  222.     end
  223.     if encounter_list.empty?
  224.       make_encounter_count
  225.       return 0
  226.     end
  227.     return encounter_list[rand(encounter_list.size)]
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 刷新
  231.   #--------------------------------------------------------------------------
  232.   def refresh
  233.     if $game_party.members.size == 0
  234.       @character_name = ""
  235.       @character_index = 0
  236.     else
  237.       actor = $game_party.members[0]   # 获取队伍第一人
  238.       @character_name = actor.character_name
  239.       @character_index = actor.character_index
  240.     end
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 判断同位置事件是否被触发
  244.   #     triggers : 触发数组
  245.   #--------------------------------------------------------------------------
  246.   def check_event_trigger_here(triggers)
  247.     return false if $game_map.interpreter.running?
  248.     result = false
  249.     for event in $game_map.events_xy(@x, @y)
  250.       if triggers.include?(event.trigger) and event.priority_type != 1
  251.         event.start
  252.         result = true if event.starting
  253.       end
  254.     end
  255.     return result
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 确认前方事件是否被触发
  259.   #     triggers : 触发数组
  260.   #--------------------------------------------------------------------------
  261.   def check_event_trigger_there(triggers)
  262.     return false if $game_map.interpreter.running?
  263.     result = false
  264.     front_x = $game_map.x_with_direction(@x, @direction)
  265.     front_y = $game_map.y_with_direction(@y, @direction)
  266.     for event in $game_map.events_xy(front_x, front_y)
  267.       if triggers.include?(event.trigger) and event.priority_type == 1
  268.         event.start
  269.         result = true
  270.       end
  271.     end
  272.     if result == false and $game_map.counter?(front_x, front_y)
  273.       front_x = $game_map.x_with_direction(front_x, @direction)
  274.       front_y = $game_map.y_with_direction(front_y, @direction)
  275.       for event in $game_map.events_xy(front_x, front_y)
  276.         if triggers.include?(event.trigger) and event.priority_type == 1
  277.           event.start
  278.           result = true
  279.         end
  280.       end
  281.     end
  282.     return result
  283.   end
  284.   #--------------------------------------------------------------------------
  285.   # ● 判断接触事件是否被触发
  286.   #     x:X 座标
  287.   #     y:Y 座标
  288.   #--------------------------------------------------------------------------
  289.     def check_event_trigger_touch(x, y)
  290.     x -=  $game_map.width if $game_map.loop_horizontal? and x == $game_map.width
  291.     y -=  $game_map.height if $game_map.loop_vertical? and y == $game_map.height
  292.     return false if $game_map.interpreter.running?
  293.     result = false
  294.     for event in $game_map.events_xy(x, y)
  295.       if [1,2].include?(event.trigger) and event.priority_type == 1
  296.         event.start
  297.         result = true
  298.       end
  299.     end
  300.     return result
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● 方向键移动处理
  304.   #--------------------------------------------------------------------------
  305.   def move_by_input
  306.     return unless movable?
  307.     return if $game_map.interpreter.running?
  308.     case Input.dir4
  309.     when 2;  move_down
  310.     when 4;  move_left
  311.     when 6;  move_right
  312.     when 8;  move_up
  313.     end
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● 可以行动判定
  317.   #--------------------------------------------------------------------------
  318.   def movable?
  319.     return false if moving?                     # 正在移动
  320.     return false if @move_route_forcing         # 强制移动路线
  321.     return false if @vehicle_getting_on         # 正在乘上交通工具
  322.     return false if @vehicle_getting_off        # 正在乘上交通工具
  323.     return false if $game_message.visible       # 正在显示讯息
  324.     return false if in_airship? and not $game_map.airship.movable?
  325.     return true
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● 更新画面
  329.   #--------------------------------------------------------------------------
  330.   def update
  331.     last_real_x = @real_x
  332.     last_real_y = @real_y
  333.     last_moving = moving?
  334.     move_by_input
  335.     super
  336.     update_scroll(last_real_x, last_real_y)
  337.     update_vehicle
  338.     update_nonmoving(last_moving)
  339.   end
  340.   #--------------------------------------------------------------------------
  341.   # ● 更新滚动
  342.   #--------------------------------------------------------------------------
  343.   def update_scroll(last_real_x, last_real_y)
  344.     ax1 = $game_map.adjust_x(last_real_x)
  345.     ay1 = $game_map.adjust_y(last_real_y)
  346.     ax2 = $game_map.adjust_x(@real_x)
  347.     ay2 = $game_map.adjust_y(@real_y)
  348.     if ay2 > ay1 and ay2 > CENTER_Y
  349.       $game_map.scroll_down(ay2 - ay1)
  350.     end
  351.     if ax2 < ax1 and ax2 < CENTER_X
  352.       $game_map.scroll_left(ax1 - ax2)
  353.     end
  354.     if ax2 > ax1 and ax2 > CENTER_X
  355.       $game_map.scroll_right(ax2 - ax1)
  356.     end
  357.     if ay2 < ay1 and ay2 < CENTER_Y
  358.       $game_map.scroll_up(ay1 - ay2)
  359.     end
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● 更新交通工具
  363.   #--------------------------------------------------------------------------
  364.   def update_vehicle
  365.     return unless in_vehicle?
  366.     vehicle = $game_map.vehicles[@vehicle_type]
  367.     if @vehicle_getting_on                    # 正在乘上?
  368.       if not moving?
  369.         @direction = vehicle.direction        # 更改方向
  370.         @move_speed = vehicle.speed           # 更改移动速度
  371.         @vehicle_getting_on = false           # 结束乘上操作
  372.         @transparent = true                   # 透明状态
  373.       end
  374.     elsif @vehicle_getting_off                # 正在离开?
  375.       if not moving? and vehicle.altitude == 0
  376.         @vehicle_getting_off = false          # 结束乘上操作
  377.         @vehicle_type = -1                    # 清除交通工具类型
  378.         @transparent = false                  # 移除透明状态
  379.       end
  380.     else                                      # 正在交通工具之上
  381.       vehicle.sync_with_player                # 与角色同步移动
  382.     end
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ● 非移动中更新
  386.   #     last_moving : 之前是否正在移动
  387.   #--------------------------------------------------------------------------
  388.   def update_nonmoving(last_moving)
  389.     return if $game_map.interpreter.running?
  390.     return if moving?
  391.     return if check_touch_event if last_moving
  392.     if not $game_message.visible and Input.trigger?(Input::C)
  393.       return if get_on_off_vehicle
  394.       return if check_action_event
  395.     end
  396.     update_encounter if last_moving
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ● 更新遇敌
  400.   #--------------------------------------------------------------------------
  401.   def update_encounter
  402.     return if $TEST and Input.press?(Input::CTRL)   # 测试游戏中
  403.     return if in_vehicle?                           # 乘坐交通工具中
  404.     if $game_map.bush?(@x, @y)                      # 在草木繁茂处
  405.       @encounter_count -= 2                         # 将遇敌计数减2
  406.     else                                            # 否则
  407.       @encounter_count -= 1                         # 将遇敌计数减1
  408.     end
  409.   end
  410.   #--------------------------------------------------------------------------
  411.   # ● 判断事件是否由接触触发(重叠)
  412.   #--------------------------------------------------------------------------
  413.   def check_touch_event
  414.     return false if in_airship?
  415.     return check_event_trigger_here([1,2])
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ● 判断事件是否由确认键触发
  419.   #--------------------------------------------------------------------------
  420.   def check_action_event
  421.     return false if in_airship?
  422.     return true if check_event_trigger_here([0])
  423.     return check_event_trigger_there([0,1,2])
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 上下交通工具
  427.   #--------------------------------------------------------------------------
  428.   def get_on_off_vehicle
  429.     return false unless movable?
  430.     if in_vehicle?
  431.       return get_off_vehicle
  432.     else
  433.       return get_on_vehicle
  434.     end
  435.   end
  436.   #--------------------------------------------------------------------------
  437.   # ● 乘上交通工具
  438.   #    以角色非在交通工具之上为前提
  439.   #--------------------------------------------------------------------------
  440.   def get_on_vehicle
  441.     front_x = $game_map.x_with_direction(@x, @direction)
  442.     front_y = $game_map.y_with_direction(@y, @direction)
  443.     if $game_map.airship.pos?(@x, @y)       # 判断角色是否与飞船重叠
  444.       get_on_airship
  445.       return true
  446.     elsif $game_map.ship.pos?(front_x, front_y)   # 判断前方是否有大型船
  447.       get_on_ship
  448.       return true
  449.     elsif $game_map.boat.pos?(front_x, front_y)   # 判断前方是否有小型船
  450.       get_on_boat
  451.       return true
  452.     end
  453.     return false
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● 乘上小型船
  457.   #--------------------------------------------------------------------------
  458.   def get_on_boat
  459.     @vehicle_getting_on = true        # 乘上交通工具标志
  460.     @vehicle_type = 0                 # 设置交通工具类型
  461.     force_move_forward                # 向前一步
  462.     @walking_bgm = RPG::BGM::last     # 记忆行走 BGM
  463.     $game_map.boat.get_on             # 上船处理
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ● 乘上大型船
  467.   #--------------------------------------------------------------------------
  468.   def get_on_ship
  469.     @vehicle_getting_on = true        # 乘上交通工具标志
  470.     @vehicle_type = 1                 # 设置交通工具类型
  471.     force_move_forward                # 向前一步
  472.     @walking_bgm = RPG::BGM::last     # 记忆行走 BGM
  473.     $game_map.ship.get_on             # 上船处理
  474.   end
  475.   #--------------------------------------------------------------------------
  476.   # ● 乘上飞船
  477.   #--------------------------------------------------------------------------
  478.   def get_on_airship
  479.     @vehicle_getting_on = true        # 乘上交通工具标志
  480.     @vehicle_type = 2                 # 设置交通工具类型
  481.     @through = true                   # 允许穿透
  482.     @walking_bgm = RPG::BGM::last     # 记忆行走 BGM
  483.     $game_map.airship.get_on          # 上船处理
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # ● 离开交通工具
  487.   #    以角色在交通工具之上为前提
  488.   #--------------------------------------------------------------------------
  489.   def get_off_vehicle
  490.     if in_airship?                                # 在飞船之上
  491.       return unless airship_land_ok?(@x, @y)      # 判断是否能降落
  492.     else                                          # 在大/小型船上
  493.       front_x = $game_map.x_with_direction(@x, @direction)
  494.       front_y = $game_map.y_with_direction(@y, @direction)
  495.       return unless can_walk?(front_x, front_y)   # 判断是否能下船
  496.     end
  497.     $game_map.vehicles[@vehicle_type].get_off     # 下船处理
  498.     if in_airship?                                # 飞船
  499.       @direction = 2                              # 面向下
  500.     else                                          # 大/小型船
  501.       force_move_forward                          # 向前一步
  502.       @transparent = false                        # 移除透明状态
  503.     end
  504.     @vehicle_getting_off = true                   # 开始下船处理
  505.     @move_speed = 4                               # 回复移动速度
  506.     @through = false                              # 不允许穿透
  507.     @walking_bgm.play                             # 回复行走 BGM
  508.     make_encounter_count                          # 初始化遇敌
  509.   end
  510.   #--------------------------------------------------------------------------
  511.   # ● 强迫向前一步
  512.   #--------------------------------------------------------------------------
  513.   def force_move_forward
  514.     @through = true         # 允许穿透
  515.     move_forward            # 向前一步
  516.     @through = false        # 不允许穿透
  517.   end
  518. end
复制代码
关于其他的自己改去吧,
什么,不能运行?你没见过常量吗?
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
帖子
590
5
发表于 2010-12-26 23:07:37 | 只看该作者
可以解决全屏后的异常吗?
画面被固定成1024*768全屏了
多了不显示 少了显黑色

点评

摁 会确认BUG原因  发表于 2010-12-26 23:13
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小睡

梦石
0
星屑
2186
在线时间
508 小时
注册时间
2010-8-1
帖子
1378
6
发表于 2010-12-26 23:19:04 | 只看该作者
RGSS神马的改了最牛掰了~~~~
不过想rw一下,为啥之前不能超过640X480呢?

点评

我记得又一篇文章说rgss很有阴招,为了限制某些功能搞什么2次验证,所以得把dll破解了才行。  发表于 2011-4-26 20:39
欢迎来到6R RTP Maker!加入RTP行走图制作组的行列吧!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
462 小时
注册时间
2007-7-30
帖子
643
7
 楼主| 发表于 2010-12-26 23:38:47 | 只看该作者
回复 星之璇 的帖子

DLL强制修正 640* 480    我把他跳过了 = =bb

点评

我想问一下,那么XP的rgss103呢?它怎么得用扩展而不能跳过去呢?  发表于 2011-4-26 20:40
RGE这万年大坑 啥时填起来@@

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1347
在线时间
676 小时
注册时间
2009-11-11
帖子
2790
8
发表于 2010-12-27 11:10:08 | 只看该作者
我对LZ的敬仰犹如滔滔江水。。。。~~`

嘿。嘿。嘿
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
462 小时
注册时间
2007-7-30
帖子
643
9
 楼主| 发表于 2010-12-27 18:13:59 | 只看该作者
回复 wbsy8241 的帖子

额...这是VX的默认的问题...
如果默认的DLL不改大小全屏后依然变成640* 480

我会尽力找出解法

点评

辛苦了,我遇到daipeng76他发布了高分辨率的脚本,偏偏固定成1024×768分辨率。  发表于 2011-5-6 15:04
RGE这万年大坑 啥时填起来@@

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
帖子
590
10
发表于 2010-12-27 18:20:29 | 只看该作者
回复 david50407 的帖子

我希望 全屏画面会拉伸至自定义的大小...
默认的就被固定成640x480了,可能比较难?
谢谢~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 07:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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