http://artificialprovidence.web.fc2.com ... icture.txt
こちらのスクリプトなのですが、ピクチャの中央位置を計算して
アニメ再生されるようになっているようですが
画像ごとにアニメを表示させたい位置を微調整したいことがあり、
相談させてもらいました
できれば、そのマップ上のイベントIDを指定して
そのイベントの位置にアニメは表示するけど、アニメのフラッシュなどの効果は
指定したピクチャに適用されて、アニメがピクチャより上に表示される
と言ったものが理想です。
ご協力お願いできますでしょうか。
星潟さまの「ピクチャの上にアニメーション・フラッシュ」のアニメーション表示位置を指定したい
Re: 星潟さまの「ピクチャの上にアニメーション・フラッシュ」のアニメーション表示位置を指定したい
暫定的ですが
「指定キャラの最前面にアニメーションを表示する」
「ピクチャに対してアニメーションのフラッシュのみを実行する」
この二つのスクリプトを作成してみました。
「最前面アニメーション」
「ピクチャフラッシュ」
スクリプトの機能はイベントコマンドのスクリプトから、
どちらもマップ上でのみ使用可能です。
色々と機能はありますが、ひとまずは最低限だけ紹介します。
「最前面アニメーション」
・TopmostAnimation.event(event_id, animation_id, mirror = false)
event_id -> イベントのID
animation_id -> アニメーションのID
mirror -> 反転表示フラグ(省略可)
指定したイベントにアニメーションを最前面に表示します。
例:
「ピクチャフラッシュ」
・PictureFlash.animation(id, animation_id)
id -> ピクチャ番号
animation_id -> アニメーションのID
指定したピクチャにアニメーションのフラッシュを適用をします。
例:
「指定キャラの最前面にアニメーションを表示する」
「ピクチャに対してアニメーションのフラッシュのみを実行する」
この二つのスクリプトを作成してみました。
「最前面アニメーション」
コード: 全て選択
module TopmostAnimation
# 表示優先度のデフォルト値
DEFAULT_Z = 2000
@animator = []
class << self
attr_accessor :animator
def character(character, animation_id, mirror = false)
@animator << Animator_Character.new(character, animation_id, mirror)
end
def player(animation_id, mirror = false)
character($game_player, animation_id, mirror)
end
def event(event_id, animation_id, mirror = false)
character($game_map.events[event_id], animation_id, mirror)
end
def clear
@animator.clear
end
def update
@animator.delete_if do |animator|
animator.update_topmost_animation
unless animator.animation?
animator.dispose
true
else
false
end
end
end
def dispose
@animator.each { |animator| animator.dispose }.clear
end
end
class Animator_Character < Sprite_Character
def initialize(character, animation_id, mirror = false)
super(nil, character)
self.z = DEFAULT_Z
self.visible = false
start_animation($data_animations[animation_id], mirror)
end
def update_topmost_animation
update_position
update_animation
end
end
end
class Spriteset_Map
alias tani_initialize initialize
def initialize
setup_topmost_animation
tani_initialize
end
alias tani_dispose dispose
def dispose
dispose_topmost_animation
tani_dispose
end
alias tani_update update
def update
update_topmost_animation
tani_update
end
def setup_topmost_animation
TopmostAnimation.dispose
end
def dispose_topmost_animation
TopmostAnimation.dispose
end
def update_topmost_animation
TopmostAnimation.update
end
end
コード: 全て選択
module PictureFlash
# アニメーション効果を適用した場合に効果音も再生する
ANIMATION_SOUND = false
class << self
attr_accessor :pictures
def using_picture(id)
(picture = @pictures ? @pictures[id] : nil) and yield picture
end
def flash(id, duration, r, g, b, a = 255)
using_picture(id) do |picture|
picture.flash(Color.new(r, g, b, a), duration)
end
end
def color(id, r, g, b, a = 255)
using_picture(id) do |picture|
picture.color = Color.new(r, g, b, a)
end
end
def clear_color(id)
using_picture(id) do |picture|
picture.color.set(0, 0, 0, 0)
end
end
def animation(id, animation_id, ani_rate = 4)
using_picture(id) do |picture|
picture.animation_effect = (
AnimationEffector.new(picture, animation_id, ani_rate)
)
end
end
end
class AnimationEffector
def initialize(base_sprite, animation_id, ani_rate = 4)
@base_sprite = base_sprite
@animation = $data_animations[animation_id]
@rate = ani_rate
@count = 0
@duration = @animation.frame_max * @rate
@timings = @animation.timings
@timing_size = @timings.size
@timing_frame = @timing_size > 0 ? @timings[0].frame : 0
@timing_index = 0
end
def update
if (@duration -= 1) % @rate == 0
if @duration > 0
if @timing_index < @timing_size
update_timing if @count >= @timing_frame
@count += 1
return false
else
return true
end
else
return true
end
end
end
def update_timing
while @timing_index < @timing_size
break if @count < (@timing_frame = @timings[@timing_index].frame)
timing = @timings[@timing_index]
timing.se.play if PictureFlash::ANIMATION_SOUND
timing.flash_duration * @rate
@base_sprite.flash(timing.flash_color, timing.flash_duration * @rate)
@timing_index += 1
end
end
end
end
class Spriteset_Map
alias fpic_create_pictures create_pictures
def create_pictures
fpic_create_pictures
flash_picture_setup
end
alias fpic_dispose_pictures dispose_pictures
def dispose_pictures
fpic_dispose_pictures
flash_picture_dispose
end
def flash_picture_setup
PictureFlash.pictures = @picture_sprites
end
def flash_picture_dispose
PictureFlash.pictures = nil
end
end
class Sprite_Picture < Sprite
attr_accessor :animation_effect
alias fpic_update update
def update
fpic_update
flash_picture_update
end
def flash_picture_update
@animation_effect = nil if @animation_effect && @animation_effect.update
end
end
どちらもマップ上でのみ使用可能です。
色々と機能はありますが、ひとまずは最低限だけ紹介します。
「最前面アニメーション」
・TopmostAnimation.event(event_id, animation_id, mirror = false)
event_id -> イベントのID
animation_id -> アニメーションのID
mirror -> 反転表示フラグ(省略可)
指定したイベントにアニメーションを最前面に表示します。
例:
コード: 全て選択
TopmostAnimation.event(15, 79)
・PictureFlash.animation(id, animation_id)
id -> ピクチャ番号
animation_id -> アニメーションのID
指定したピクチャにアニメーションのフラッシュを適用をします。
例:
コード: 全て選択
PictureFlash.animation(1, 79)
Re: 星潟さまの「ピクチャの上にアニメーション・フラッシュ」のアニメーション表示位置を指定したい
ありがとうございます!
まだ確認できていませんが
後ほど確認してみます!
まだ確認できていませんが
後ほど確認してみます!