66RPG
本站首页
制作教程
文章作品
制作素材
原创游戏区
周边下载
本站论坛
 ※ 站内搜索
栏 目:
方 式:
关键词:
  
 ※ 教程分类
 RMXP 图文教学
 初级教学
 中级教学
 高级教学
 个人创意与研究
 RMXP 录像教学
 新人入门录像
 零散录像教学
 商业素材使用录像 ★
 周边教学
 美工 与 音乐
 RMXP 脚本发布
 游戏系统修改
 地图效果类
 战斗系统相关
 全新系统类
 API与高难度类
 RMVX 制作教学
 RMVX 初级教学
 RMVX 中级教程
 RMVX 高级教程
 RMVX 综合制作展
 ※ 无图目录 (按点击量横排序)


-- 66RPG全内容文字目录 --


 ※ 近期特色教学
人物倒影 ( 66RPG, RPG MAKER XP教程 )
 本站首页→制作教程→地图效果类

人物倒影


教程作者:★_茄孓
首发网址:点此进入本教学的原始帖
适宜用户:RMXP用户
技术通用度:★★★★★
技术应用复杂度:50 (满分150分)
学习的理解难度:50 (满分150分)

 教学正文:

放个脚本,贴几张图给大家看看!
不过我在写时不知道影子到底是从
那边发射来的
所以弄了3种类型的影子
请自行在脚本中修改样式

P $影子类型 = 1 # 可写1与2.3更换影子类型

根据大家的建议,我也弄了第三种影子类型。
应该与现实比较符合了。大家可以使用看看。
另:
很不要脸的借用别人的图片来使用下~

叫这张shadow图片放在picture下,做为一般影子图!
在水中则有倒影图!切记需要改地形标志为1才有倒影
更新内容:
新增类型3-在地形标志为1的元件图内有倒影,其他则为普通影子
且影子随水流有点荡漾的感觉(伪造的不太形象)

#==============================================================================
# ■ Sprite_Character_Shadow
# ■ By 茄子 联系QQ 9244579
# ■ 要地图元件有倒影出现请将
# ■ 地形标志改为1
#==============================================================================
$影子类型 = 3
# $影子类型可以选为1.2.3来测试效果
# 类型3是比较完善真实的类型
#==============================================================================
#==============================================================================
class Sprite_Character_False < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize(viewport, character = nil)
    super(viewport)
    @character = character
    @direction = 2
    update
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    if @tile_id != @character.tile_id or
       @character_name != @character.character_name or
       @character_hue != @character.character_hue
      @tile_id = @character.tile_id
      @character_name = @character.character_name
      @character_hue = @character.character_hue
      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
        @ch = bitmap.height / 4
        self.ox = @cw / 2
        self.oy = @ch
      end
    end
    self.opacity = 102
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    if $影子类型 == 1  # ★
    if @tile_id == 0
    sx = @character.pattern * @cw
    sy = (@direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    end
    self.mirror = false
    if @character.direction == 2
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    self.angle = 180
    elsif @character.direction == 4
    self.x = @character.screen_x-10
    self.y = @character.screen_y-10
    self.z = @character.screen_z(@ch)
    self.angle = 90
    elsif @character.direction == 6
    self.x = @character.screen_x+10
    self.y = @character.screen_y-10
    self.z = @character.screen_z(@ch)
    self.angle = 270
    elsif @character.direction == 8
    self.x = @character.screen_x
    self.y = @character.screen_y-15
    self.z = @character.screen_z(@ch)
    self.angle = 0
    end  
    elsif $影子类型 == 2  # ★
    if @tile_id == 0
    sx = @character.pattern * @cw
    sy = (@character.direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    end
    self.mirror = true
    if @character.direction == 2
    if @tile_id == 0
    sx = @character.pattern * @cw
    sy = (@direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    end
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    self.angle = 180
    elsif @character.direction == 4
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    elsif @character.direction == 6
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    elsif @character.direction == 8
    self.x = @character.screen_x
    self.y = @character.screen_y-15
    self.z = @character.screen_z(@ch)
    self.angle = 0
    end   
  elsif $影子类型 == 3  # ★
    @x = @character.x
    @y = @character.y
    if @tile_id == 0
    sx = @character.pattern * @cw
    sy = (@character.direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    end
  if $game_map.terrain_tag(@x, @y+1) == 1
    self.mirror = true
    self.angle = 180
    if @character.direction == 2
    self.visible = true
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    elsif @character.direction == 4
    self.visible = true
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    elsif @character.direction == 6
    self.visible = true
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    end
  elsif $game_map.terrain_tag(@x, @y-1) == 1  # …
    self.mirror = false
    if @tile_id == 0
    sx = @character.pattern * @cw
    sy = (@direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    end
    if @character.direction == 8 # …
    self.visible = true
    @direction = 2
    self.x = @character.screen_x
    self.y = @character.screen_y-35
    self.z = @character.screen_z(@ch)
    self.angle = 0
    elsif @character.direction == 4
    self.visible = true
    @direction = 4
    self.x = @character.screen_x
    self.y = @character.screen_y-35
    self.z = @character.screen_z(@ch)
    self.angle = 0
    elsif @character.direction == 6
    self.visible = true
    @direction = 6
    self.x = @character.screen_x
    self.y = @character.screen_y-35
    self.z = @character.screen_z(@ch)
    self.angle = 0
    end  # …
  elsif $game_map.terrain_tag(@x+1, @y) == 1
    if @tile_id == 0
    sx = @character.pattern * @cw
    sy = (@direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    end
    self.angle = 270
    self.visible = true
    if @character.direction == 8
    @direction = 6
    self.x = @character.screen_x+20
    self.y = @character.screen_y-20
    self.z = @character.screen_z(@ch)
    elsif @character.direction == 2
    @direction = 4
    self.x = @character.screen_x+20
    self.y = @character.screen_y-20
    self.z = @character.screen_z(@ch)
    elsif @character.direction == 6
    @direction = 2
    self.x = @character.screen_x+20
    self.y = @character.screen_y-20
    self.z = @character.screen_z(@ch)
    end 
  elsif $game_map.terrain_tag(@x-1, @y) == 1
    if @tile_id == 0
    sx = @character.pattern * @cw
    sy = (@direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    end
    self.visible = true
    self.angle = 90
    if @character.direction == 8
    @direction = 4
    self.x = @character.screen_x-20
    self.y = @character.screen_y-20
    self.z = @character.screen_z(@ch)
    elsif @character.direction == 2
    @direction = 6
    self.x = @character.screen_x-20
    self.y = @character.screen_y-20
    self.z = @character.screen_z(@ch)
    elsif @character.direction == 4
    @direction = 2
    self.x = @character.screen_x-20
    self.y = @character.screen_y-20
    self.z = @character.screen_z(@ch)
    end
  elsif
  self.visible = false
  end  # …
end
  self.opacity = rand(25)+100
  self.bush_depth = rand(25)+100
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      animation(animation, true)
      @character.animation_id = 0
    end
  end
end
class Sprite_Character_Shadow < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize(viewport, character = nil)
    super(viewport)
    @character = character
    self.bitmap = RPG::Cache.picture("shadow")
    update
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    if $影子类型 == 3
    if @character.character_name == ""
    self.x = @character.screen_x-5000
    self.y = @character.screen_y-5000
    else
    self.x = @character.screen_x-16
    self.y = @character.screen_y-20
    self.z = 10
    self.opacity = 255
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    end
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      animation(animation, true)
      @character.animation_id = 0
    end
    end
  end
end
#==============================================================================
# ■ Spriteset_Map
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
 def initialize
    @viewport1 = Viewport.new(0, 0, 640, 480)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 200
    @viewport3.z = 5000
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
    @character_sprites = []
    for i in $game_map.events.keys.sort
      s = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites.push(s)
      s = Sprite_Character_Shadow.new(@viewport1, $game_map.events[i])
      @character_sprites.push(s)
      s = Sprite_Character_False.new(@viewport1, $game_map.events[i])
      @character_sprites.push(s)
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
    @character_sprites.push(Sprite_Character_False.new(@viewport1, $game_player))
    @character_sprites.push(Sprite_Character_Shadow.new(@viewport1, $game_player))
    @weather = RPG::Weather.new(@viewport1)
    @picture_sprites = []
    for i in 1..50
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
        $game_screen.pictures[i]))
    end
    @timer_sprite = Sprite_Timer.new
    update
  end
end



关键字:

发布日期:2008-8-6 22:57:23 点击量:339


 上一篇:大航海时代昼夜系统 v0.4
 下一篇:单人负重系统V1.16
关于我们
支援本站
友情连接
站点目录
站内搜索



WWW.66RPG.COM,2005-2013 ^o^

备案序号:京ICP备05035415号



 
Web www.66rpg.com bbs.66rpg.com