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

Project1

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

[已经解决] 为什么增加的视口会不起作用?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4481
在线时间
1053 小时
注册时间
2013-3-28
帖子
390

开拓者

跳转到指定楼层
1
发表于 2016-7-20 10:14:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这是我修改过的Spriteset_Map(搜索卐即可找到修改的地方),理想效果为注释有light的事件的色调不会随着地图色调的改变而改变,可是实际使用时注释有light的事件刚出现时色调正常可是不能随画面移动,过2秒后可以随画面移动移动了色调却变成和地图一样,搞了好多天快要疯掉了,希望哪位大神能帮助我一下
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Spriteset_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图画面活动块和元件的类。本类在
  5. # Scene_Map 类的内部使用。
  6. #==============================================================================
  7.  
  8. class Spriteset_Map
  9.   #--------------------------------------------------------------------------
  10.   # 卐 初始化对像
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     #卐 生成显示端口
  14.     @viewport1 = Viewport.new(0, 0, 640, 480)
  15.     @viewport1_sp = Viewport.new(0, 0, 640, 480) #卐
  16.     @viewport2 = Viewport.new(0, 0, 640, 480)
  17.     @viewport3 = Viewport.new(0, 0, 640, 480)
  18.     @viewport2.z = 200
  19.     @viewport3.z = 5000
  20.     # 生成元件地图
  21.     @tilemap = Tilemap.new(@viewport1)
  22.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  23.     for i in 0..6
  24.       autotile_name = $game_map.autotile_names[i]
  25.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  26.     end
  27.     @tilemap.map_data = $game_map.data
  28.     @tilemap.priorities = $game_map.priorities
  29.     # 生成远景平面
  30.     @panorama = Plane.new(@viewport1)
  31.     @panorama.z = -1000
  32.     # 生成雾平面
  33.     [url=home.php?mod=space&uid=14217]@fog[/url] = Plane.new(@viewport1)
  34.     @fog.z = 3000
  35.     #卐 生成角色活动块
  36.     @character_sprites = []
  37.     for i in $game_map.events.keys.sort
  38.       for j in 0...$game_map.events[i].list.size
  39.         if ($game_map.events[i].list[j].code == 108 or $game_map.events[i].list[j].code == 408) and $game_map.events[i].list[j].parameters == ["light"]
  40.           sprite = Sprite_Character.new(@viewport1_sp, $game_map.events[i])
  41.         else
  42.           sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  43.         end
  44.       end
  45.       @character_sprites.push(sprite)
  46.     end
  47.     @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  48.     # 生成天气
  49.     @weather = RPG::Weather.new(@viewport1)
  50.     # 生成图片
  51.     @picture_sprites = []
  52.     for i in 1..50
  53.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  54.         $game_screen.pictures[i]))
  55.     end
  56.     # 生成计时器块
  57.     @timer_sprite = Sprite_Timer.new
  58.     # 刷新画面
  59.     update
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # 卐 释放
  63.   #--------------------------------------------------------------------------
  64.   def dispose
  65.     # 释放元件地图
  66.     @tilemap.tileset.dispose
  67.     for i in 0..6
  68.       @tilemap.autotiles[i].dispose
  69.     end
  70.     @tilemap.dispose
  71.     # 释放远景平面
  72.     @panorama.dispose
  73.     # 释放雾平面
  74.     @fog.dispose
  75.     # 释放角色活动块
  76.     for sprite in @character_sprites
  77.       sprite.dispose
  78.     end
  79.     # 释放天候
  80.     @weather.dispose
  81.     # 释放图片
  82.     for sprite in @picture_sprites
  83.       sprite.dispose
  84.     end
  85.     # 释放计时器块
  86.     @timer_sprite.dispose
  87.     #卐 释放显示端口
  88.     @viewport1.dispose
  89.     @viewport1_sp.dispose #卐
  90.     @viewport2.dispose
  91.     @viewport3.dispose
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # 卐 刷新画面
  95.   #--------------------------------------------------------------------------
  96.   def update
  97.     # 远景与现在的情况有差异发情况下
  98.     if @panorama_name != $game_map.panorama_name or
  99.        @panorama_hue != $game_map.panorama_hue
  100.       @panorama_name = $game_map.panorama_name
  101.       @panorama_hue = $game_map.panorama_hue
  102.       if @panorama.bitmap != nil
  103.         @panorama.bitmap.dispose
  104.         @panorama.bitmap = nil
  105.       end
  106.       if @panorama_name != ""
  107.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  108.       end
  109.       Graphics.frame_reset
  110.     end
  111.     # 雾与现在的情况有差异的情况下
  112.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  113.       @fog_name = $game_map.fog_name
  114.       @fog_hue = $game_map.fog_hue
  115.       if @fog.bitmap != nil
  116.         @fog.bitmap.dispose
  117.         @fog.bitmap = nil
  118.       end
  119.       if @fog_name != ""
  120.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  121.       end
  122.       Graphics.frame_reset
  123.     end
  124.     # 刷新元件地图
  125.     @tilemap.ox = $game_map.display_x / 4
  126.     @tilemap.oy = $game_map.display_y / 4
  127.     @tilemap.update
  128.     # 刷新远景平面
  129.     @panorama.ox = $game_map.display_x / 8
  130.     @panorama.oy = $game_map.display_y / 8
  131.     # 刷新雾平面
  132.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  133.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  134.     @fog.opacity = $game_map.fog_opacity
  135.     @fog.blend_type = $game_map.fog_blend_type
  136.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  137.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  138.     @fog.tone = $game_map.fog_tone
  139.     # 刷新角色活动块
  140.     for sprite in @character_sprites
  141.       sprite.update
  142.     end
  143.     # 刷新天候图形
  144.     @weather.type = $game_screen.weather_type
  145.     @weather.max = $game_screen.weather_max
  146.     @weather.ox = $game_map.display_x / 4
  147.     @weather.oy = $game_map.display_y / 4
  148.     @weather.update
  149.     # 刷新图片
  150.     for sprite in @picture_sprites
  151.       sprite.update
  152.     end
  153.     # 刷新计时器块
  154.     @timer_sprite.update
  155.     #卐 设置画面的色调与震动位置
  156.     @viewport1.tone = $game_screen.tone
  157.     @viewport1.ox = $game_screen.shake
  158.     @viewport1_sp.ox = $game_screen.shake
  159.     # 设置画面的闪烁色
  160.     @viewport3.color = $game_screen.flash_color
  161.     #卐 刷新显示端口
  162.     @viewport1.update
  163.     @viewport1_sp.update
  164.     @viewport3.update
  165.   end
  166. end

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9397
在线时间
2748 小时
注册时间
2008-9-5
帖子
3543

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

2
发表于 2016-7-20 13:57:36 | 只看该作者
生成事件对象的循环方式弄错了……
应该在事件ID列表里循环判定并建立事件活动对象,
而不是在每个事件的内容列表循环每一项事件内容建立对象,
这样会多出很多冗余的事件对象出来……

试试看把生成角色活动块的那整段for...end换成下面这段(建立$game_player对象之前。)
  1.     #卐 生成角色活动块
  2.     @character_sprites = []
  3.     $game_map.events.keys.sort.each do |i|
  4.       event = $game_map.events[i]
  5.       if event.list and event.list.any? do |list|
  6.           (list.code == 108 or list.code == 408) and list.parameters.include?("light")
  7.         end
  8.         sprite = Sprite_Character.new(@viewport1_sp, event)
  9.       else
  10.         sprite = Sprite_Character.new(@viewport1, event)
  11.       end
  12.       @character_sprites.push(sprite)
  13.     end
复制代码

点评

你抢先了我一步qwq  发表于 2016-7-20 21:44

评分

参与人数 2星屑 +230 收起 理由
RyanBern + 200 认可答案
陈大帅帅帅哥 + 30 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

3
发表于 2016-7-20 13:59:23 | 只看该作者
你所说的[不能随画面移动]指的是?这也是你需要的效果之一吗?

点评

不能随画面移动是指人物走动,地图也懂了,可事件的图像却像显示图片一样在窗口相同的位置不动,是一个BUG  发表于 2016-7-20 18:08
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 09:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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