Confira o Videos Épicos #45!
6 Respostas   152 Visualizações
0 Membros e 1 Visitante estão vendo este tópico.
Você precisa que um evento se mova em torno de outro? Precisa ser necessariamente um evento? Não garanto que eu consiga, mas imagino que uma partícula seria bem mais fácil.
Vish, aí complica. Qual seria o ABS? Porque é possível que só fazer o evento girar em torno do outro evento não seja o suficiente, embora seja uma tentativa válida. Por exemplo, com o SAS já não funcionaria porque certamente iria conflitar com a movimentação por pixels.
#==============================================================================# ★ RGSS3_キャラクター表示拡張 Ver1.1#===============================================================================begin作者:tomoakywebサイト:ひきも記は閉鎖しました。 (http://hikimoki.sakura.ne.jp/)キャラクタースプライトに以下の機能を追加します。 ・表示座標の補正 ・任意の拡大率に変更 ・任意の回転角度に変更 ・拡大縮小アニメーション ・ふらふらアニメーション ・円運動アニメーションイベントコマンド『スクリプト』で以下のコマンドが使えるようになります。 set_shift(event_id, shift_x, shift_y) 指定したIDのイベントのをX方向に shift_x、Y方向に shift_y だけ ずらして表示します。 set_angle(event_id, angle) 指定したIDのイベントの回転角度を angle に変更します(0 ~ 360) set_zoom(event_id, zoom_x, zoom_y) 指定したIDのイベントの拡大率を zoom_x, zoom_y に変更します、 zoom(1, 1.5, 3.0) とした場合はイベントID1を横1.5倍、縦3倍。 zoom_y を省略した場合は縦横ともに zoom_x の値に変更します set_zoom_anime(event_id, flag) 指定したIDのイベントが拡大と縮小を繰り返すようになります。 flag が true なら機能オン、false なら機能オフ set_swing_anime(event_id, angle) 指定したIDのイベントがふらふらと揺れるようになります。 angle には揺れ幅を指定してください(0 ~ 360)、省略すると止まります set_circle_anime(event_id, dist) 指定したIDのイベントが円運動をするようになります。 dist には半径を指定してください、省略すると止まります。 移動するのはスプライトだけなので、イベントの位置は変化しません。 set_cycle(event_id, cycle) 指定したIDのイベントのアニメーション周期を cycle に変更します、 対象となるのは拡大縮小アニメ、ふらふらアニメ、円運動アニメの3つです。 初期値は 256 event_id に 0 を指定すると実行中のイベント自身が対象となり、 -1 を指定すればプレイヤーが対象となります。スクリプトコマンドを使う方法以外に、イベント名や注釈コマンドを使って設定することもできます。以下の文字列をイベント名か注釈に加えてください。 <zm 1.5, 2.0> … 拡大率の設定、横1.5倍、縦2倍 <an 45> … 回転角度の設定、半時計回りに45度 <za> … 拡大縮小アニメーションを有効にする <sa 30> … ふらふらアニメーションを有効にする、揺れ幅30度 <ca 16> … 円運動アニメーションを有効にする、半径16ドット <cy 128> … アニメーション周期の設定、1周128フレーム 注釈コマンドを使う場合は必ずイベント実行内容の一番上で設定してください。 === 注意 === ・設定したパラメータはイベントページの変更などによって初期化されます、 イベントコマンドとイベント名、注釈をうまく使い分けてください。2015/09/10 Ver1.1 ・表示座標を補正する set_shift コマンドを追加 ・イベントコマンド『移動ルートの設定』に対応2011/12/21 Ver1.01 ・並列処理で event_id に 0 を指定するとエラーが発生する不具合を修正 2011/12/15 Ver1.0 公開 =end#==============================================================================# □ コマンド#==============================================================================module TMSPREXmodule Commands #-------------------------------------------------------------------------- # ○ キャラクタースプライトの座標補正値を変更 #-------------------------------------------------------------------------- def set_shift(id, shift_x, shift_y) target = get_character(id) return unless target target.shift_x_ex = shift_x target.shift_y_ex = shift_y end #-------------------------------------------------------------------------- # ○ キャラクタースプライトの回転角度を変更 #-------------------------------------------------------------------------- def set_angle(id, n = 0) target = get_character(id) target.angle = n if target end #-------------------------------------------------------------------------- # ○ キャラクタースプライトの拡大率を変更 #-------------------------------------------------------------------------- def set_zoom(id, zoom_x, zoom_y = nil) target = get_character(id) return unless target zoom_y ||= zoom_x target.zoom_x, target.zoom_y = zoom_x, zoom_y end #-------------------------------------------------------------------------- # ○ キャラクタースプライトのズームアニメを変更 #-------------------------------------------------------------------------- def set_zoom_anime(id, flag = true) target = get_character(id) target.zoom_anime = flag if target end #-------------------------------------------------------------------------- # ○ キャラクタースプライトのふらふら状態を変更 #-------------------------------------------------------------------------- def set_swing_anime(id, n = nil) target = get_character(id) return unless target target.swing_anime = n target.angle = 0 unless n end #-------------------------------------------------------------------------- # ○ キャラクタースプライトの円運動状態を変更 #-------------------------------------------------------------------------- def set_circle_anime(id, n = nil) target = get_character(id) target.circle_anime = n if target end #-------------------------------------------------------------------------- # ○ キャラクタースプライトの拡張アニメーション周期を変更 #-------------------------------------------------------------------------- def set_cycle(id, n = 256) target = get_character(id) target.ex_count_max = n if target endendend # module TMSPREX#==============================================================================# ■ Game_Character#==============================================================================class Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :shift_x_ex # X方向の拡大率 attr_accessor :shift_y_ex # Y方向の拡大率 attr_accessor :zoom_x # X方向の拡大率 attr_accessor :zoom_y # Y方向の拡大率 attr_accessor :angle # 回転角度 attr_accessor :zoom_anime # ズームアニメフラグ attr_accessor :swing_anime # ふらふらフラグ attr_accessor :circle_anime # 円運動フラグ attr_accessor :ex_count_max # アニメーション周期 #-------------------------------------------------------------------------- # ● 公開メンバ変数の初期化 #-------------------------------------------------------------------------- alias tmsprex_game_character_init_public_members init_public_members def init_public_members tmsprex_game_character_init_public_members clear_ex_param end #-------------------------------------------------------------------------- # ● 画面 X 座標の取得 #-------------------------------------------------------------------------- def screen_x super + @shift_x_ex end #-------------------------------------------------------------------------- # ● 画面 Y 座標の取得 #-------------------------------------------------------------------------- def screen_y super + @shift_y_ex end #-------------------------------------------------------------------------- # ○ キャラクター拡張用パラメータの初期化 #-------------------------------------------------------------------------- def clear_ex_param @shift_x_ex = 0 @shift_y_ex = 0 @zoom_x = 1.0 @zoom_y = 1.0 @angle = 0 @zoom_anime = false @swing_anime = nil @circle_anime = nil @ex_count_max = 256 endend#==============================================================================# ■ Game_Event#==============================================================================class Game_Event < Game_Character include TMSPREX::Commands #-------------------------------------------------------------------------- # ● イベントページの設定をセットアップ #-------------------------------------------------------------------------- alias tmsprex_game_event_setup_page_settings setup_page_settings def setup_page_settings tmsprex_game_event_setup_page_settings clear_ex_param if @list if /<zm\s+(\d+(?:\.\d+)?)\s*\,\s*(\d+(?:\.\d+)?)>/i =~ @event.name @zoom_x, @zoom_y = $1.to_f, $2.to_f end @angle = $1.to_i if /<an\s*(\d+)>/i =~ @event.name @zoom_anime = true if /<za>/i =~ @event.name @swing_anime = $1.to_i if /<sa\s+(\d+)>/i =~ @event.name @circle_anime = $1.to_i if /<ca\s+(\d+)>/i =~ @event.name @ex_count_max = $1.to_i if /<cy\s+(\d+)>/i =~ @event.name @list.each do |list| if list.code == 108 || list.code == 408 text = list.parameters[0] if /<zm\s+(\d+(?:\.\d+)?)\s*\,\s*(\d+(?:\.\d+)?)>/i =~ text @zoom_x, @zoom_y = $1.to_f, $2.to_f end @angle = $1.to_i if /<an\s*(\d+)>/i =~ text @zoom_anime = true if /<za>/i =~ text @swing_anime = $1.to_i if /<sa\s+(\d+)>/i =~ text @circle_anime = $1.to_i if /<ca\s+(\d+)>/i =~ text @ex_count_max = $1.to_i if /<cy\s+(\d+)>/i =~ text else break end end end end #-------------------------------------------------------------------------- # ○ キャラクターの取得 # param : -1 ならプレイヤー、0 ならこのイベント、それ以外はイベント ID #-------------------------------------------------------------------------- def get_character(param) if param < 0 $game_player else $game_map.events[param > 0 ? param : @id] end endend#==============================================================================# ■ Sprite_Character#==============================================================================class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート # character : キャラクター (Game_Character) #-------------------------------------------------------------------------- alias tmsprex_sprite_character_initialize initialize def initialize(viewport, character = nil) @ex_count = 0 # 特殊演出用のカウンタ tmsprex_sprite_character_initialize(viewport, character) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias tmsprex_sprite_character_update update def update tmsprex_sprite_character_update @ex_count = (@ex_count + 1) % @character.ex_count_max n = @character.ex_count_max / 2 if @character.zoom_anime # ズームアニメの更新 self.zoom_x = Math.sin(Math::PI * @ex_count / n) * 0.5 + 1.5 self.zoom_y = self.zoom_x else self.zoom_x, self.zoom_y = @character.zoom_x, @character.zoom_y end if @character.swing_anime # ふらふら状態の更新 self.angle = Math.sin(Math::PI * @ex_count / n) * @character.swing_anime else self.angle = @character.angle end if @character.circle_anime # 円運動状態の更新 a = Math::PI * @ex_count / n self.x += Math.sin(a) * @character.circle_anime self.y += Math.cos(a) * @character.circle_anime end endend#==============================================================================# ■ Game_Interpreter#==============================================================================class Game_Interpreter include TMSPREX::Commandsend
<ca 32><cy 128>
Bem, a esta altura você já deve ter percebido que os eventos não conseguem executar um movimento circular ao redor de outros eventos de maneira natural por causa do tamanho dos tiles pelos quais se movimentam. No entanto você pode forçar com que os sprites dos eventos circulem ao redor do evento origem.Um script do Tomoaky permite isso inclusive.Código: [Selecionar]#==============================================================================# ★ RGSS3_キャラクター表示拡張 Ver1.1#===============================================================================begin作者:tomoakywebサイト:ひきも記は閉鎖しました。 (http://hikimoki.sakura.ne.jp/)キャラクタースプライトに以下の機能を追加します。 ・表示座標の補正 ・任意の拡大率に変更 ・任意の回転角度に変更 ・拡大縮小アニメーション ・ふらふらアニメーション ・円運動アニメーションイベントコマンド『スクリプト』で以下のコマンドが使えるようになります。 set_shift(event_id, shift_x, shift_y) 指定したIDのイベントのをX方向に shift_x、Y方向に shift_y だけ ずらして表示します。 set_angle(event_id, angle) 指定したIDのイベントの回転角度を angle に変更します(0 ~ 360) set_zoom(event_id, zoom_x, zoom_y) 指定したIDのイベントの拡大率を zoom_x, zoom_y に変更します、 zoom(1, 1.5, 3.0) とした場合はイベントID1を横1.5倍、縦3倍。 zoom_y を省略した場合は縦横ともに zoom_x の値に変更します set_zoom_anime(event_id, flag) 指定したIDのイベントが拡大と縮小を繰り返すようになります。 flag が true なら機能オン、false なら機能オフ set_swing_anime(event_id, angle) 指定したIDのイベントがふらふらと揺れるようになります。 angle には揺れ幅を指定してください(0 ~ 360)、省略すると止まります set_circle_anime(event_id, dist) 指定したIDのイベントが円運動をするようになります。 dist には半径を指定してください、省略すると止まります。 移動するのはスプライトだけなので、イベントの位置は変化しません。 set_cycle(event_id, cycle) 指定したIDのイベントのアニメーション周期を cycle に変更します、 対象となるのは拡大縮小アニメ、ふらふらアニメ、円運動アニメの3つです。 初期値は 256 event_id に 0 を指定すると実行中のイベント自身が対象となり、 -1 を指定すればプレイヤーが対象となります。スクリプトコマンドを使う方法以外に、イベント名や注釈コマンドを使って設定することもできます。以下の文字列をイベント名か注釈に加えてください。 <zm 1.5, 2.0> … 拡大率の設定、横1.5倍、縦2倍 <an 45> … 回転角度の設定、半時計回りに45度 <za> … 拡大縮小アニメーションを有効にする <sa 30> … ふらふらアニメーションを有効にする、揺れ幅30度 <ca 16> … 円運動アニメーションを有効にする、半径16ドット <cy 128> … アニメーション周期の設定、1周128フレーム 注釈コマンドを使う場合は必ずイベント実行内容の一番上で設定してください。 === 注意 === ・設定したパラメータはイベントページの変更などによって初期化されます、 イベントコマンドとイベント名、注釈をうまく使い分けてください。2015/09/10 Ver1.1 ・表示座標を補正する set_shift コマンドを追加 ・イベントコマンド『移動ルートの設定』に対応2011/12/21 Ver1.01 ・並列処理で event_id に 0 を指定するとエラーが発生する不具合を修正 2011/12/15 Ver1.0 公開 =end#==============================================================================# □ コマンド#==============================================================================module TMSPREXmodule Commands #-------------------------------------------------------------------------- # ○ キャラクタースプライトの座標補正値を変更 #-------------------------------------------------------------------------- def set_shift(id, shift_x, shift_y) target = get_character(id) return unless target target.shift_x_ex = shift_x target.shift_y_ex = shift_y end #-------------------------------------------------------------------------- # ○ キャラクタースプライトの回転角度を変更 #-------------------------------------------------------------------------- def set_angle(id, n = 0) target = get_character(id) target.angle = n if target end #-------------------------------------------------------------------------- # ○ キャラクタースプライトの拡大率を変更 #-------------------------------------------------------------------------- def set_zoom(id, zoom_x, zoom_y = nil) target = get_character(id) return unless target zoom_y ||= zoom_x target.zoom_x, target.zoom_y = zoom_x, zoom_y end #-------------------------------------------------------------------------- # ○ キャラクタースプライトのズームアニメを変更 #-------------------------------------------------------------------------- def set_zoom_anime(id, flag = true) target = get_character(id) target.zoom_anime = flag if target end #-------------------------------------------------------------------------- # ○ キャラクタースプライトのふらふら状態を変更 #-------------------------------------------------------------------------- def set_swing_anime(id, n = nil) target = get_character(id) return unless target target.swing_anime = n target.angle = 0 unless n end #-------------------------------------------------------------------------- # ○ キャラクタースプライトの円運動状態を変更 #-------------------------------------------------------------------------- def set_circle_anime(id, n = nil) target = get_character(id) target.circle_anime = n if target end #-------------------------------------------------------------------------- # ○ キャラクタースプライトの拡張アニメーション周期を変更 #-------------------------------------------------------------------------- def set_cycle(id, n = 256) target = get_character(id) target.ex_count_max = n if target endendend # module TMSPREX#==============================================================================# ■ Game_Character#==============================================================================class Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :shift_x_ex # X方向の拡大率 attr_accessor :shift_y_ex # Y方向の拡大率 attr_accessor :zoom_x # X方向の拡大率 attr_accessor :zoom_y # Y方向の拡大率 attr_accessor :angle # 回転角度 attr_accessor :zoom_anime # ズームアニメフラグ attr_accessor :swing_anime # ふらふらフラグ attr_accessor :circle_anime # 円運動フラグ attr_accessor :ex_count_max # アニメーション周期 #-------------------------------------------------------------------------- # ● 公開メンバ変数の初期化 #-------------------------------------------------------------------------- alias tmsprex_game_character_init_public_members init_public_members def init_public_members tmsprex_game_character_init_public_members clear_ex_param end #-------------------------------------------------------------------------- # ● 画面 X 座標の取得 #-------------------------------------------------------------------------- def screen_x super + @shift_x_ex end #-------------------------------------------------------------------------- # ● 画面 Y 座標の取得 #-------------------------------------------------------------------------- def screen_y super + @shift_y_ex end #-------------------------------------------------------------------------- # ○ キャラクター拡張用パラメータの初期化 #-------------------------------------------------------------------------- def clear_ex_param @shift_x_ex = 0 @shift_y_ex = 0 @zoom_x = 1.0 @zoom_y = 1.0 @angle = 0 @zoom_anime = false @swing_anime = nil @circle_anime = nil @ex_count_max = 256 endend#==============================================================================# ■ Game_Event#==============================================================================class Game_Event < Game_Character include TMSPREX::Commands #-------------------------------------------------------------------------- # ● イベントページの設定をセットアップ #-------------------------------------------------------------------------- alias tmsprex_game_event_setup_page_settings setup_page_settings def setup_page_settings tmsprex_game_event_setup_page_settings clear_ex_param if @list if /<zm\s+(\d+(?:\.\d+)?)\s*\,\s*(\d+(?:\.\d+)?)>/i =~ @event.name @zoom_x, @zoom_y = $1.to_f, $2.to_f end @angle = $1.to_i if /<an\s*(\d+)>/i =~ @event.name @zoom_anime = true if /<za>/i =~ @event.name @swing_anime = $1.to_i if /<sa\s+(\d+)>/i =~ @event.name @circle_anime = $1.to_i if /<ca\s+(\d+)>/i =~ @event.name @ex_count_max = $1.to_i if /<cy\s+(\d+)>/i =~ @event.name @list.each do |list| if list.code == 108 || list.code == 408 text = list.parameters[0] if /<zm\s+(\d+(?:\.\d+)?)\s*\,\s*(\d+(?:\.\d+)?)>/i =~ text @zoom_x, @zoom_y = $1.to_f, $2.to_f end @angle = $1.to_i if /<an\s*(\d+)>/i =~ text @zoom_anime = true if /<za>/i =~ text @swing_anime = $1.to_i if /<sa\s+(\d+)>/i =~ text @circle_anime = $1.to_i if /<ca\s+(\d+)>/i =~ text @ex_count_max = $1.to_i if /<cy\s+(\d+)>/i =~ text else break end end end end #-------------------------------------------------------------------------- # ○ キャラクターの取得 # param : -1 ならプレイヤー、0 ならこのイベント、それ以外はイベント ID #-------------------------------------------------------------------------- def get_character(param) if param < 0 $game_player else $game_map.events[param > 0 ? param : @id] end endend#==============================================================================# ■ Sprite_Character#==============================================================================class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート # character : キャラクター (Game_Character) #-------------------------------------------------------------------------- alias tmsprex_sprite_character_initialize initialize def initialize(viewport, character = nil) @ex_count = 0 # 特殊演出用のカウンタ tmsprex_sprite_character_initialize(viewport, character) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias tmsprex_sprite_character_update update def update tmsprex_sprite_character_update @ex_count = (@ex_count + 1) % @character.ex_count_max n = @character.ex_count_max / 2 if @character.zoom_anime # ズームアニメの更新 self.zoom_x = Math.sin(Math::PI * @ex_count / n) * 0.5 + 1.5 self.zoom_y = self.zoom_x else self.zoom_x, self.zoom_y = @character.zoom_x, @character.zoom_y end if @character.swing_anime # ふらふら状態の更新 self.angle = Math.sin(Math::PI * @ex_count / n) * @character.swing_anime else self.angle = @character.angle end if @character.circle_anime # 円運動状態の更新 a = Math::PI * @ex_count / n self.x += Math.sin(a) * @character.circle_anime self.y += Math.cos(a) * @character.circle_anime end endend#==============================================================================# ■ Game_Interpreter#==============================================================================class Game_Interpreter include TMSPREX::CommandsendEntão você pode, por exemplo, incluir um comentário em um evento inimigo com:Código: [Selecionar]<ca 32><cy 128>e definir uma rota para que ele siga o herói definindo sua prioridade para abaixo do mesmo de modo que ele sempre esteja abaixo do personagem.Deste modo o sprite do evento executará um movimento circular perfeito, mas você ainda terá que usar algum outro meio para determinar se o sprite será acertável ou não (direção do personagem em relação onde o sprite está, etc...). Não é a solução mais simples, mas no momento é o mais próximo que me recordo já ter visto.Este script está disponível em uma demo funcional presente aqui. Muito embora só exista um exemplo de uso nela (siga ao norte e procure uma borboleta azul) talvez seja útil.o/