Ruby on RGSS
キャラクタ透過
タイルセットがキャラクタの上に重なる場合、
その下にあるキャラクタを半透明で表示します。
障害物の多いマップなどで、キャラクタの位置を確認しやすくなります。
対象は操作しているキャラクターのみです。
併用不可:「影表示」との併用はできません
# キャラクタ透過 Ver 1.0 by 半導体 # http://h2so5.web.fc2.com/ # 概要:タイルセットのしたにあるキャラクタを半透明で # 表示します。(操作キャラクタのみ) class Sprite_Character < RPG::Sprite #設定 CHARA_OPACITY = 80 #不透明度(0〜255) end class Sprite_Character < RPG::Sprite #キャラクターの画像に重ねる def chara_trans(bitmap,x,y,z,rect) if $chara_t == nil $chara_t = Sprite.new(@viewport2) $chara_t.bitmap = Bitmap.new(rect.width,rect.height) end $chara_t.bitmap.clear $chara_t.bitmap.blt(0, 0, bitmap,rect) $chara_t.ox = rect.width / 2 $chara_t.oy = rect.height $chara_t.opacity = CHARA_OPACITY $chara_t.x = x $chara_t.y = y $chara_t.z = 100 end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super # タイル ID、ファイル名、色相のどれかが現在のものと異なる場合 if @tile_id != @character.tile_id or @character_name != @character.character_name or @character_hue != @character.character_hue # タイル ID とファイル名、色相を記憶 @tile_id = @character.tile_id @character_name = @character.character_name @character_hue = @character.character_hue # タイル ID が有効な値の場合 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 # タイル ID が無効な値の場合 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.visible = (not @character.transparent) # グラフィックがキャラクターの場合 if @tile_id == 0 # 転送元の矩形を設定 sx = @character.pattern * @cw sy = (@character.direction - 2) / 2 * @ch self.src_rect.set(sx, sy, @cw, @ch) chara_trans(self.bitmap,@character.screen_x,@character.screen_y,@character.screen_z(@ch),Rect.new(sx, sy, @cw, @ch)) end # スプライトの座標を設定 self.x = @character.screen_x self.y = @character.screen_y self.z = @character.screen_z(@ch) # 不透明度、合成方法、茂み深さを設定 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 end end
Back