Partagez
Aller en bas
Coco'
Coco'
Staffeux retraité

Nombre de messages : 6577
Age : 26
Localisation : Nord/Douai
Distinction : EL DICTATOR COCO'
Coco-Dieu en puissance

Curseur animé Magikarpe Grand gourou suppléant de la secte des MAGIKARP
Leader charismatique des 2beStaffieux

N°1 du forum
Président, vice-présidents et membres honoraires de la cour suprême du forum
Président de l'association des grosses distinctions CMB
Date d'inscription : 02/07/2008
https://www.rpgmakervx-fr.com

Curseur animé Empty Curseur animé

le Mer 21 Juil 2010 - 16:14
Curseur animé


Auteur : KGC

Instructions pour modifier votre curseur animé :

Code:
ANIMATION_FILE = "CursorAnimation"
Le nom du fichier de votre icone animé. Vous devez le placer préalablement dans le dossier Graphics/System de votre projet.

Code:
FRAME_COUNT = 12
Le nombre de frames (d'images si vous ne comprenez pas) dans votre animation.

Code:
ANIMATION_WAIT = 4
Le nombre de frames (1 frame = 1/60 seconde si vous ne le savez pas Wink ) entre chaque image de votre animation.

Instructions pour créer votre curseur animé :
Il n'y a aucune limitation sur la taille de votre curseur, mais votre fichier image doit être découpé en 8 colonnes, et chaque image de votre curseur doit être compris dans un carré (la taille du coté du carré varie selon la taille totale du fichier curseur).

Curseur de base :
Curseur animé Cursor11

Curseur de base avec l'ordre d'animation (pour l'explication) :
Curseur animé Cursor12


Le script :
Spoiler:
Code:
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ カーソルアニメーション - KGC_CursorAnimation ◆ VX ◆
#_/    ◇ Last update : 2008/04/01 ◇
#_/----------------------------------------------------------------------------
#_/  カーソルの位置にアニメーションを表示します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ カスタマイズ項目 - Customize ★
#==============================================================================

module KGC
module CursorAnimation
  # ◆ アニメ表示 ON/OFF を切り替えるスイッチ ID
  #  この ID のスイッチがオンの間、カーソルアニメが表示されます。
  SWITCH_ID = 20
  # ◆ 最初からカーソルアニメを表示する
  #  true  : タイトルなどでもアニメを表示します。
  #  false : ゲーム中にスイッチを切り替えるまで表示しません。
  DEFAULT_ANIMATION = true

  # ◆ アニメファイル名
  #  "Graphics/System" から読み込む。
  ANIMATION_FILE = "CursorAnimation"
  # ◆ アニメーションのフレーム数
  FRAME_COUNT    = 12
  # ◆ アニメーションウェイト
  #  数値が大きいほどアニメが遅くなる。
  ANIMATION_WAIT = 4

  # ◆ 不透明度
  OPACITY      = 224
  # ◆ 合成方法
  #  0..通常  1..加算  2..減算
  BLEND_TYPE    = 1
  # ◆ 基準位置
  #  0..上  1..中央  2..下
  BASE_POSITION = 1
  # ◆ 表示位置補正 [x, y]
  POSITION_REV  = [-4, 0]
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["CursorAnimation"] = true

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_Base
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ○ クラス変数
  #--------------------------------------------------------------------------
  @@__cursor_animation = nil  # カーソルアニメ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #    x      : ウィンドウの X 座標
  #    y      : ウィンドウの Y 座標
  #    width  : ウィンドウの幅
  #    height  : ウィンドウの高さ
  #--------------------------------------------------------------------------
  alias initialize_KGC_CursorAnimation initialize
  def initialize(x, y, width, height)
    initialize_KGC_CursorAnimation(x, y, width, height)

    @@__cursor_animation.add_window(self)
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  alias dispose_KGC_CursorAnimation dispose unless $@
  def dispose
    @@__cursor_animation.remove_window(self)

    dispose_KGC_CursorAnimation
  end
  #--------------------------------------------------------------------------
  # ○ カーソルアニメを表示
  #--------------------------------------------------------------------------
  def self.show_cursor_animation
    @@__cursor_animation.visible = true
    @@__cursor_animation.update
  end
  #--------------------------------------------------------------------------
  # ○ カーソルアニメを隠す
  #--------------------------------------------------------------------------
  def self.hide_cursor_animation
    @@__cursor_animation.visible = false
    @@__cursor_animation.update
  end
  #--------------------------------------------------------------------------
  # ○ カーソルアニメを更新
  #--------------------------------------------------------------------------
  def self.update_cursor_animation
    @@__cursor_animation.update
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Sprite_CursorAnimation
#------------------------------------------------------------------------------
#  カーソルアニメーション用の処理を追加したスプライトのクラスです。
#==============================================================================

class Sprite_CursorAnimation < Sprite
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #    viewport : ビューポート
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    super(viewport)
    @duration = 0
    @frame_count = 0
    self.bitmap = Cache.system(KGC::CursorAnimation::ANIMATION_FILE)
    self.src_rect.width = bitmap.width / 8
    self.src_rect.height = bitmap.height /
      ([KGC::CursorAnimation::FRAME_COUNT - 1, 0].max / 8 + 1)
    self.ox = src_rect.width / 2
    self.oy = src_rect.height / 2
    self.opacity = KGC::CursorAnimation::OPACITY
    self.blend_type = KGC::CursorAnimation::BLEND_TYPE
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    return unless visible

    @frame_count += 1
    return if @frame_count % KGC::CursorAnimation::ANIMATION_WAIT != 0

    @frame_count = 0
    @duration -= 1
    if @duration < 0
      @duration = KGC::CursorAnimation::FRAME_COUNT - 1
    end
    update_animation
  end
  #--------------------------------------------------------------------------
  # ○ アニメーションを更新
  #--------------------------------------------------------------------------
  def update_animation
    self.src_rect.x = src_rect.width * (@duration % 8)
    self.src_rect.y = src_rect.height * (@duration / 8)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Cursor_Animation
#------------------------------------------------------------------------------
#  カーソル周りのアニメーションを扱うクラスです。
#==============================================================================

class Cursor_Animation
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :visible
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @visible = false

    @viewport = Viewport.new(0, 0, 640, 480)
    @windows = []
    @target_sprite = Sprite_CursorAnimation.new(@viewport)
    @active_window = nil

    @viewport.visible = false
    @viewport.z = 10000
  end
  #--------------------------------------------------------------------------
  # ○ 破棄
  #--------------------------------------------------------------------------
  def dispose
    @target_sprite.dispose
    @viewport.dispose
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウ追加
  #--------------------------------------------------------------------------
  def add_window(*window)
    @windows |= window.find_all { |w|
      w.is_a?(Window_Selectable) || w.is_a?(Window_SaveFile)
    }
    @windows.flatten!
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウ削除
  #--------------------------------------------------------------------------
  def remove_window(*window)
    @windows -= window
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  def update
    @viewport.update
    @target_sprite.update

    # 座標調整
    dest_x, dest_y = get_cursor_pos
    if @target_sprite.x != dest_x
      if (dest_x - @target_sprite.x).abs < 4
        @target_sprite.x = dest_x
      else
        dist = (dest_x - @target_sprite.x) / 4
        dist = (dist > 0 ? [dist, 4].max : [dist, -4].min)
        @target_sprite.x += dist
      end
    end
    if @target_sprite.y != dest_y
      if (dest_y - @target_sprite.y).abs < 4
        @target_sprite.y = dest_y
      else
        dist = (dest_y - @target_sprite.y) / 4
        dist = (dist > 0 ? [dist, 4].max : [dist, -4].min)
        @target_sprite.y += dist
      end
    end
  end
  #--------------------------------------------------------------------------
  # ○ カーソル位置取得
  #    [x, y] の形で返す。
  #--------------------------------------------------------------------------
  def get_cursor_pos
    dx = 0
    dy = 0
    # アクティブウィンドウを取得
    unless window_active?(@active_window)
      @active_window = search_active_window
    end

    # アクティブウィンドウがなければ非表示
    if @active_window == nil || !$game_switches[KGC::CursorAnimation::SWITCH_ID]
      @viewport.visible = false
      dx = Graphics.width / 2
      dy = Graphics.height / 2
      return [dx, dy]
    end
    @viewport.visible = @visible

    # カーソル位置を計算
    rect = @active_window.cursor_rect
    dx = rect.x + 16 + KGC::CursorAnimation::POSITION_REV[0]
    dy = rect.y + 16 + KGC::CursorAnimation::POSITION_REV[1]
    vp = @active_window.viewport
    if vp != nil
      dx += vp.rect.x - vp.ox
      dy += vp.rect.y - vp.oy
    end
    dx += @active_window.x
    dy += @active_window.y
    case KGC::CursorAnimation::BASE_POSITION
    when 0  # 上
      dy += @target_sprite.oy
    when 1  # 中央
      dy += rect.height / 2
    when 2  # 下
      dy += rect.height - @target_sprite.oy
    end
    return [dx, dy]
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウのアクティブ状態判定
  #--------------------------------------------------------------------------
  def window_active?(window)
    return false if window == nil
    return false if window.disposed?

    if window.is_a?(Window_Selectable)
      return true if window.active
    elsif window.is_a?(Window_SaveFile)
      return true if window.selected
    end
    return false
  end
  #--------------------------------------------------------------------------
  # ○ アクティブウィンドウを探す
  #--------------------------------------------------------------------------
  def search_active_window
    return @windows.find { |w|
      if !w.visible
        false
      elsif w.is_a?(Window_Selectable)
        w.active && w.index >= 0
      elsif w.is_a?(Window_SaveFile)
        w.selected
      else
        false
      end
    }
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Base
#==============================================================================

class Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias start_KGC_CursorAnimation start
  def start
    Window_Base.show_cursor_animation

    start_KGC_CursorAnimation
  end
  #--------------------------------------------------------------------------
  # ● 終了前処理
  #--------------------------------------------------------------------------
  alias pre_terminate_KGC_CursorAnimation pre_terminate
  def pre_terminate
    Window_Base.hide_cursor_animation

    pre_terminate_KGC_CursorAnimation
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_KGC_CursorAnimation update
  def update
    update_KGC_CursorAnimation

    Window_Base.update_cursor_animation
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Title
#==============================================================================

if KGC::CursorAnimation::DEFAULT_ANIMATION

class Scene_Title < Scene_Base
  #--------------------------------------------------------------------------
  # ● 各種ゲームオブジェクトの作成
  #--------------------------------------------------------------------------
  alias create_game_objects_KGC_CursorAnimation create_game_objects
  def create_game_objects
    create_game_objects_KGC_CursorAnimation

    $game_switches[KGC::CursorAnimation::SWITCH_ID] = true
  end
end

end  # <-- if KGC::CursorAnimation::DEFAULT_ANIMATION


class Window_Base < Window
  @@__cursor_animation = Cursor_Animation.new
end


Screens :

Spoiler:
Curseur animé Cursor13
Curseur animé Cursor14
Shadow of Life
Shadow of Life
Membre

Nombre de messages : 870
Age : 23
Localisation : Joyeux. Comment ça c'est pas la bonne case ?
Distinction : Artiste de la flagornerie.
Porte parole du Ô grand Voilà voilà.
Président du club des masochistes du forum
Fake Gentleman

Soumis ^^
Date d'inscription : 13/09/2009

Curseur animé Empty Re: Curseur animé

le Mer 21 Juil 2010 - 16:38
Coco' ! tu es en forme aujourd'hui ! ><
Ah moins que ce ne soit le site où tu as trouvé tout les scripts de KGC ? =P
Coco'
Coco'
Staffeux retraité

Nombre de messages : 6577
Age : 26
Localisation : Nord/Douai
Distinction : EL DICTATOR COCO'
Coco-Dieu en puissance

Curseur animé Magikarpe Grand gourou suppléant de la secte des MAGIKARP
Leader charismatique des 2beStaffieux

N°1 du forum
Président, vice-présidents et membres honoraires de la cour suprême du forum
Président de l'association des grosses distinctions CMB
Date d'inscription : 02/07/2008
https://www.rpgmakervx-fr.com

Curseur animé Empty Re: Curseur animé

le Mer 21 Juil 2010 - 16:45
Bah nan, j'ai juste posté le script KGC Large Party, et comme j'étais bien lancé, j'ai posté celui ci, tiré de ma boite à scripts perso' Curseur animé 522164
Black'
Black'
Membre

Nombre de messages : 351
Localisation : Far, far away
Distinction : aucune
Date d'inscription : 19/04/2010

Curseur animé Empty Re: Curseur animé

le Jeu 29 Juil 2010 - 15:31
Tu l'as choppé dans le Pack de script KGC , hein ?
Tient, peut-être qu'un tuto sur "comment faire son propre curseur animé" serait la bienvenue sur ce forum, je médite ! Peut-être un , que dis-je LE grand retour de la main sélectionneuse de Square Enix ??

Merci du partage !
Thank's for the Sharing
Danke für die ... partage Laughing
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum