| 赞 | 0 |
| VIP | |
| 好人卡 | |
| 积分 | 1 |
| 经验 | |
| 最后登录 | 2016-9-13 |
| 在线时间 | 70 小时 |
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 70 小时
- 注册时间
- 2014-10-11
- 回帖
- 38
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 风晴生 于 2015-2-10 21:11 编辑
如题 我用了 局部刷新事件脚本 和 太阳精灵影子脚本 可是当角色走出一个屏幕(640*480)时 就会出现影子残留的情况
如图:
求大神帮忙解决 ,
附上脚本
局部刷新事件 :
[pre lang="ruby"]#======================================
# ■ Anti Event Lag Script
#======================================
# By: Near Fantastica
# Date: 12.06.05
# Version: 3
#======================================
#======================================
# ■ Game_Map
#======================================
class Game_Map
#--------------------------------------------------------------------------
def in_range?(object)
screne_x = $game_map.display_x
screne_x -= 256
screne_y = $game_map.display_y
screne_y -= 256
screne_width = $game_map.display_x
screne_width += 2816
screne_height = $game_map.display_y
screne_height += 2176 #- 400
return false if object.real_x <= screne_x #- 128
return false if object.real_x >= screne_width# - 128
return false if object.real_y <= screne_y #- 16000# + 140
return false if object.real_y >= screne_height
return true
end
#--------------------------------------------------------------------------
def update
if $game_map.need_refresh
refresh
end
if @scroll_rest > 0
distance = 2 ** @scroll_speed
case @scroll_direction
when 2
scroll_down(distance)
when 4
scroll_left(distance)
when 6
scroll_right(distance)
when 8
scroll_up(distance)
end
@scroll_rest -= distance
end
for event in @events.values
if in_range?(event) or event.trigger == 3 or (event.trigger == 4 and @arpg_id == 0)
event.update
end
end
for common_event in @common_events.values
common_event.update
end
@fog_ox -= @fog_sx / 8.0
@fog_oy -= @fog_sy / 8.0
if @fog_tone_duration >= 1
d = @fog_tone_duration
target = @fog_tone_target
@fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
@fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
@fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
@fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
@fog_tone_duration -= 1
end
if @fog_opacity_duration >= 1
d = @fog_opacity_duration
@fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
@fog_opacity_duration -= 1
end
end
end
#======================================
# ■ Spriteset_Map
#======================================
class Spriteset_Map
#--------------------------------------------------------------------------
def in_range?(object)
screne_x = $game_map.display_x
screne_x -= 256
screne_y = $game_map.display_y
screne_y -= 256
screne_width = $game_map.display_x
screne_width += 2816
screne_height = $game_map.display_y
screne_height += 2176
return false if object.real_x <= screne_x
return false if object.real_x >= screne_width
return false if object.real_y <= screne_y
return false if object.real_y >= screne_height
return true
end
#--------------------------------------------------------------------------
def update
if @panorama_name != $game_map.panorama_name or
@panorama_hue != $game_map.panorama_hue
@panorama_name = $game_map.panorama_name
@panorama_hue = $game_map.panorama_hue
if @panorama.bitmap != nil
@panorama.bitmap.dispose
@panorama.bitmap = nil
end
if @panorama_name != ""
@panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
end
Graphics.frame_reset
end
if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
@fog_name = $game_map.fog_name
@fog_hue = $game_map.fog_hue
if @fog.bitmap != nil
@fog.bitmap.dispose
@fog.bitmap = nil
end
if @fog_name != ""
@fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
end
Graphics.frame_reset
end
@tilemap.ox = $game_map.display_x / 4
@tilemap.oy = $game_map.display_y / 4
@tilemap.update
@panorama.ox = $game_map.display_x / 8
@panorama.oy = $game_map.display_y / 8
@fog.zoom_x = $game_map.fog_zoom / 100.0
@fog.zoom_y = $game_map.fog_zoom / 100.0
@fog.opacity = $game_map.fog_opacity
@fog.blend_type = $game_map.fog_blend_type
@fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
@fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
@fog.tone = $game_map.fog_tone
i=0
for sprite in @character_sprites
if sprite.character.is_a?(Game_Event)
if in_range?(sprite.character) or sprite.character.trigger == 3 or sprite.character.trigger == 4
sprite.update
i+=1
end
else
sprite.update
i+=1
end
end
#p i
@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.ox = $game_map.display_x / 4
@weather.oy = $game_map.display_y / 4
@weather.update
for sprite in @picture_sprites
sprite.update
end
@timer_sprite.update
@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
@viewport3.color = $game_screen.flash_color
@viewport1.update
@viewport3.update
end
end
[/pre]
太阳精灵影子脚本
[pre lang="ruby"]#使用方法:不透明的物体在光源旁边会产生一个阴影。
#所以,在光源的事件里面(例如火),请在第一页加上一个注释“s”(请不要带引号)
#然后将此脚本命名为“人物阴影”插入到main上方即可。
#==============================================================================
# ■ 阴影精灵 (渐变精灵 )
# 以 Genzai Kawakami的阴影脚本为基础,
# Rataime为其重写和更新,
# Boushy 为其添加附属功能
# 精灵使者汉化
#==============================================================================
CATERPILLAR_COMPATIBLE = true
class Game_Party
attr_reader :characters
end
class Sprite_Shadow < RPG::Sprite
attr_accessor :character
def initialize(viewport, character = nil,source = nil,anglemin=0,anglemax=0,distancemax=0)
super(viewport)
@anglemin=anglemin.to_f
@anglemax=anglemax.to_f
@distancemax=distancemax.to_f
@character = character
@source = source
update
end
def update
super
if (@tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue)# and ( @character.screen_x >= 0 and @character.screen_x <=640 and @character.screen_y>=0 and @character.screen_y <= 480)
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
if @character_name.include?("AC") and not @character_name.include?("=4")
if @character.direction == 4
self.mirror = false
else
self.mirror = true
end
else
if @character.direction == 4
self.mirror = true
else
self.mirror = false
end
end
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
@cw = bitmap.width / 4
@cw = bitmap.width / 4
if not @character_name.include?("=4")
@ch = bitmap.height / 4
else
@ch = bitmap.height / 4
end
self.ox = @cw / 2
self.oy = @ch
end
end
self.visible = (not @character.transparent)
if @tile_id == 0
# 设置传送目标的矩形
if not @character_name.include?("=4")
if @character.pattern >= 4
sx = (@character.pattern - 4) * @cw
else
sx = @character.pattern * @cw
end
if @character.pattern >= 4
sy = (4 - 2) / 2 * @ch
else
sy = (2 - 2) / 2 * @ch
end
self.src_rect.set(sx, sy, @cw, @ch)
else
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
end
self.x = @character.screen_x
self.y = @character.screen_y-5
self.z = @character.screen_z(@ch)-1
self.opacity = @character.opacity
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
#if @character.animation_id != 0
#animation = $data_animations[@character.animation_id]
# animation(animation, true)
# @character.animation_id = 0
#end
@deltax=@source.x-self.x
@deltay= @source.y-self.y
self.angle = 57.3*Math.atan2(@deltax, @deltay )
@angle_trigo=self.angle+90
if @angle_trigo<0
@angle_trigo=360+@angle_trigo
end
self.color = Color.new(0, 0, 0)
@distance = ((@deltax ** 2) + (@deltay ** 2))
if$game_map.shadows==-1
self.opacity = 0
else
self.opacity = 1200000/(@distance+6000)
end
if @character.screen_x >= 640 or @character.screen_x <= 0 or @character.screen_y >= 480 or @character.screen_y <= 0
self.opacity = 0
end
@distance = @distance ** 0.5
if @distancemax !=0 and @distance>=@distancemax
self.opacity=0
end
if @anglemin !=0 or @anglemax !=0
if (@angle_trigo<@anglemin or @angle_trigo>@anglemax) and @anglemin<@anglemax
self.opacity=0
end
if (@angle_trigo<@anglemin and @angle_trigo>@anglemax) and @anglemin>@anglemax
self.opacity=0
end
end
end
end
#===================================================
# ■ 重定义 Sprite_Character
#===================================================
class Sprite_Character < RPG::Sprite
alias shadow_initialize initialize
def initialize(viewport, character = nil)
@character = character
# @character = nil
super(viewport)
@ombrelist=[]
if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["s"])
if (character.list[1]!=nil and character.list[1].code == 108)
@anglemin=character.list[1].parameters[0]
end
if (character.list[2]!=nil and character.list[2].code == 108)
@anglemax=character.list[2].parameters[0]
end
if (character.list[3]!=nil and character.list[3].code == 108)
@distancemax=character.list[3].parameters[0]
end
for i in $game_map.events.keys.sort
if ($game_map.events.is_a?(Game_Event) and not ($game_map.events.list[0].code == 108 && ($game_map.events.list[0].parameters == ["NotShadow"]) or $game_map.events.list[0].parameters == ["s"]) ) #$game_map.events.list!=nil and $game_map.events.list[0].code == 108 and $game_map.events.list[0].parameters == ["o"])
@ombrelist[i+1] = Sprite_Shadow.new(viewport, $game_map.events,self,@anglemin,@anglemax,@distancemax)
end
end
@ombrelist[1] = Sprite_Shadow.new(viewport, $game_player,self,@anglemin,@anglemax,@distancemax)
#===================================================
# ● 原装人物跟随兼容脚本
#===================================================
if CATERPILLAR_COMPATIBLE and $game_party.characters!=nil
for member in $game_party.characters
@ombrelist.push(Sprite_Shadow.new(viewport, member,self,@anglemin,@anglemax,@distancemax))
end
end
#===================================================
# ● 兼容脚本结束
#===================================================
end
shadow_initialize(viewport, @character)
end
alias shadow_update update
def update
shadow_update
if @ombrelist!=[]
for i in 1..@ombrelist.size
# if @character.x >= 7 # character.x = @x -1
if @ombrelist!=nil
@ombrelist.update
end
# end
end
end
end
end
#===================================================
# ■ 新定义类Scene_Save
#===================================================
class Scene_Save < Scene_File
alias shadows_write_save_data write_save_data
def write_save_data(file)
$game_map.shadows = nil
shadows_write_save_data(file)
end
end
#===================================================
# ■ 新定义类 Game_Map
#===================================================
class Game_Map
attr_accessor :shadows
end[/pre]
补充截图
|
|