赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 889 |
最后登录 | 2013-7-1 |
在线时间 | 27 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 27 小时
- 注册时间
- 2013-4-10
- 帖子
- 14
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
无论我如何调整视线距离和Z值,永远显示只有主角自己身体亮的(行走图那么大的区域),周围全是黑的,并且黑的很彻底{:2_264:},弄了半天了。。。
竟然不够权限上传图片。。。- class Spriteset_Map
- #控制視線距離的變數編號
- SIGHTRANGE_VARIABLE_INDEX =13
- #控制視線限制的開關編號
- LIMITEDSIGHT_SWITCHES_INDEX = 03
- #定義視線距離
- def get_sightrange
- return $game_variables[SIGHTRANGE_VARIABLE_INDEX]
- end
- #定義視線限制是否工作中
- def get_working?
- return $game_switches[LIMITEDSIGHT_SWITCHES_INDEX]
- end
- alias gsr_01_initialize initialize
- def initialize
- #生成fow (fog of war)平面, 並且z值比霧平面(3000)還高
- @fow = Plane.new(@viewport1)
- @fow.z = 4000
- @fow.bitmap = Bitmap.new(640, 480)
- gsr_01_initialize
- end
- alias gsr_01_dispose dispose
- def dispose
- gsr_01_dispose
- @fow.dispose
- end
- alias gsr_01_update update
- def update
- #TODO: update及render效能還可改進
- gsr_01_update
- #更新
- sightrange = self.get_sightrange
- @fow.visible = self.get_working?
- return unless @fow.visible
- #計算視距
- range = 16+32*sightrange
- xx = $game_player.screen_x
- yy = $game_player.screen_y
- #計算遮罩所在的矩型
- r = Rect.new(xx-range, yy-range-16, 2*range, 2*range)
- #繪製到fow後緩充
- @fow.bitmap.fill_rect(Rect.new(0, 0, 640, 480), Color.new(0, 0, 0))
- @fow.bitmap.fill_rect(r, Color.new(0, 0, 0, 0))
- @fow.bitmap.stretch_blt(r, FOW_Mask.get_instance, Rect.new(0, 0,
- FOW_Mask::Size, FOW_Mask::Size), 255)
- end
- end
- class FOW_Mask < Bitmap
- #遮罩解析度 內定200*200
- Size = 200
- #使用Singleton pattern
- private_class_method :new
- @@mask = nil
- def FOW_Mask.get_instance
- @@mask = new unless @@mask
- return @@mask
- end
- def initialize
- super(Size, Size)
- r = Size/2
- #加速運算
- r2 = r*r
- for i in 0...Size
- for j in 0...Size
- x = r
- y = r
- dis2 = (i-x)*(i-x) + (j-y)*(j-y)
- if dis2 > r*r
- self.set_pixel(i, j, Color.new(0,0,0))
- else
- n = dis2
- m = r2
- opa = 1.0*n/m*255
- self.set_pixel(i, j, Color.new(0,0,0, opa))
- end
- end
- end
- end
- end
复制代码 |
|