[Script RGSS] Simulateur de vidéos (par Darth Killer)

Démarré par Couet, 19 Mars 2006 à 09:56

0 Membres et 1 Invité sur ce sujet

19 Mars 2006 à 09:56 Dernière édition: 20 Mars 2006 à 19:12 par Couet
Salut tout le monde ^^

J'ai conçu mon propre simulateur de vidéo pour RGP Maker, bien qu'il en existait un sur Yume Team... Donc autant partager ;)

Attention, si le codage est plus simple, il peut être plus délicat d'utilisation.

Script RGSS : Simulateur de vidéos


  • Niveau : Expert (4/5)
  • Requis : sait faire des GIFs animés et les décortiquer, sait faire des vidéos.
Citation de: Darth Killer
#========================================
#    Simulateur de cinématiques vidéo par Darth Killer
#========================================

class Anim
  def init(name, pics, sounds, waiters)
    @name = name
    @pics = pics
    @sounds = sounds
    @waiters = waiters
    $pic = Sprite.new
    $pic.x = 320
    $pic.ox = 320
    $pic.y = 240
    $pic.oy = 240
  end
  # Attendre 1/10e de seconde n fois
  def waiter(n)
    i = 0
    while (i < n)
      s = 10 * Time.new.to_f
      t = Time.new.to_f * 100
      d = t-s
      while(d < 1)
        t = Time.new.to_f * 100
        d = t - s
      end
      i += 1
      Graphics.update
    end
  end
  # 2) affichage d'une frame
  def graph_show(name, number)
    $pic.bitmap = Bitmap.new("Graphics/Movies/"+name+number.to_s)
  end
 
  # 3) jouer un son
  def anim_player(name,number)
    Audio.me_play("me", "Audio/me/Movies/"+name+number.to_s,100)
  end

 
  # 4) fonction coordinatrice
  def go
    size = @pics.length
    for i in 0...size
      self.graph_show(@name, @pics.at(i))
      if(@sounds.at(i) != 0)
        self.anim_player(@name,@sounds.at(i))
      end
      self.waiter(@waiters.at(i))
    end
    $pic = Sprite.new
  end
end

Vous devriez mettre ça dans un script avant Main. Je vous conseille de faire un script dédié à tous vos ajouts de petite taille et d'y mettre cette classe parmi les autres trucs présents ;)

Voici comment l'utiliser :
Faites un script qui contiendra la définition de toutes vos anim (avant Main bien entendu)

Il vous faut préparer une vidéo. Je vous conseille Flash plutôt que Movie Maker à cause de la suite des opération. Cependant on peut y arriver avec les 2 ^^
Pour plus de sûreté, la vidéo doit être consituée d'images 640x480 à fond noir (pour le plein écran centré ^^)

Une fois que votre vidéo est prête (pas enregistrée en format vidéo, ça servira à rien) exporter la bande son dans 1 fichier (WMA ou MP3 sont des formats intéressants) et la partie graphique dans un GIF animé. Puis Ouvrez votre GIF animé avec un logiciel spécialisé (Animation Shop) pour exporter les frames sous forme d'images, mais pensez à noter le nombre de 1/100 de secondes pendant lequel chaque frame s'affiche !

Le plus dur est fait. Maintenant on sauvegarde les images dans Graphics/Movies (à créer) ou un sous-dossier et le fichier son dans Audio/me/Movies ou un sous-dossier (de nom identique à celui du sous dossier de Graphics/Movies). Ces dossiers sont bien sûr à créer. Veuillez à ce que chaque images et le son aie un nom du type zk1.extension où zk est à remplacer par un nom de votre choix et 1 par le numéro de la frame ou du fichier son ^^

Pour la suite de l'explication je prend un exemple où mon film corespond à 4 frames, s'appelle zksample et possède 1 son au début. Chaque frame dure 1 seconde entière, sauf la dernière (moitié plus).

$zksample = Anim.new("zksample",[1,2,3,4],[1,0,0,0],[10,10,10,15])

le premier tableau [1,2,3,4] contient les numéros des images dans l'odre où elles doivent s'afficher. rien ne vous interdit de changer cet ordre ou de faire des répétitions d'images ;)
le 2e idem mais pour les sons. Notez que pour ce tableau le chiffre 0 indique au script "ne pas jouer de son". Le son déjà en cours continuera ;)
Le 3e tableau indique les temps d'attente en 1/100 de seconde. Temps pendant lequel la frame affichée restera affichée, après quoi le script passe à la frame suivante.

Et pour lancer l'anim en question :

$zksample.go

Voilà.


En lançant une animation de ce type avant le script Main vous pourrez faire ainsi une intro avant l'écran-titre.
En utilisant les insertions de script dans les commandes d'events RPG Maker vous pourrez faire des cinématiques.

Voilà voilà :mrgreen:
Vu que son utilisation est relativement compliquée n'hésitez pas à m'envoyer des remarque ou question. :mrgreen:


Good niouze : voici une version 1.1

La nouveauté : on peut faire des cinématiques zappables par appui touche !

Script RGSS : Simulateur de vidéos


  • Niveau : Expert (4/5)
  • Requis : sait faire des GIFs animés et les décortiquer, sait faire des vidéos.
Citation de: Darth Killer
#========================================
#    Simulateur de cinématiques vidéo v1.1 par Darth Killer
#========================================

class Anim
  def init(name, pics, sounds, waiters)
    @name = name
    @pics = pics
    @sounds = sounds
    @waiters = waiters
    $pic = Sprite.new
    $pic.x = 320
    $pic.ox = 320
    $pic.y = 240
    $pic.oy = 240
  end
  # Attendre 1/10e de seconde n fois
  def waiter(n)
    i = 0
    while (i < n)
      s = 10 * Time.new.to_f
      t = Time.new.to_f * 100
      d = t-s
      while(d < 1)
        t = Time.new.to_f * 100
        d = t - s
      end
      i += 1
      Graphics.update
      Input.update
    end
  end
  # 2) affichage d'une frame
  def graph_show(name, number)
    $pic.bitmap = Bitmap.new("Graphics/Movies/"+name+number.to_s)
  end
 
  # 3) jouer un son
  def anim_player(name,number)
    Audio.me_play("me", "Audio/me/Movies/"+name+number.to_s,100)
  end

 
  # 4) fonction coordinatrice
  def go
    size = @pics.length
    i = -1
    loop do
      i += 1
      if( (i == size) || (@zappable && (Input.press?(Input::C))))
        break
      end
      self.graph_show(@name, @pics.at(i))
      if(@sounds.at(i) != 0)
        self.anim_player(@name,@sounds.at(i))
      end
      self.waiter(@waiters.at(i))
    end
    $pic = Sprite.new
    Audio.me_stop
  end
end

Vous devriez mettre ça dans un script avant Main. Je vous conseille de faire un script dédié à tous vos ajouts de petite taille et d'y mettre cette classe parmi les autres trucs présents ;)

Voici comment l'utiliser :
Faites un script qui contiendra la définition de toutes vos anim (avant Main bien entendu)

Il vous faut préparer une vidéo. Je vous conseille Flash plutôt que Movie Maker à cause de la suite des opération. Cependant on peut y arriver avec les 2 ^^
Pour plus de sûreté, la vidéo doit être consituée d'images 640x480 à fond noir (pour le plein écran centré ^^)

Une fois que votre vidéo est prête (pas enregistrée en format vidéo, ça servira à rien) exporter la bande son dans 1 fichier (WMA ou MP3 sont des formats intéressants) et la partie graphique dans un GIF animé. Puis Ouvrez votre GIF animé avec un logiciel spécialisé (Animation Shop) pour exporter les frames sous forme d'images, mais pensez à noter le nombre de 1/100 de secondes pendant lequel chaque frame s'affiche !

Le plus dur est fait. Maintenant on sauvegarde les images dans Graphics/Movies (à créer) ou un sous-dossier et le fichier son dans Audio/me/Movies ou un sous-dossier (de nom identique à celui du sous dossier de Graphics/Movies). Ces dossiers sont bien sûr à créer. Veuillez à ce que chaque images et le son aie un nom du type zk1.extension où zk est à remplacer par un nom de votre choix et 1 par le numéro de la frame ou du fichier son ^^

Pour la suite de l'explication je prend un exemple où mon film corespond à 4 frames, s'appelle zksample et possède 1 son au début. Chaque frame dure 1 seconde entière, sauf la dernière (moitié plus).

$zksample = Anim.new("zksample",[1,2,3,4],[1,0,0,0],[10,10,10,15],true)

le premier tableau [1,2,3,4] contient les numéros des images dans l'odre où elles doivent s'afficher. rien ne vous interdit de changer cet ordre ou de faire des répétitions d'images ;)
le 2e idem mais pour les sons. Notez que pour ce tableau le chiffre 0 indique au script "ne pas jouer de son". Le son déjà en cours continuera ;)
Le 3e tableau indique les temps d'attente en 1/100 de seconde. Temps pendant lequel la frame affichée restera affichée, après quoi le script passe à la frame suivante.
Le dernier élément peut être true ou false et indique si l'animation peut ou non être zappée ;)

Et pour lancer l'anim en question :

$zksample.go

Voilà.

le reste ne change pas ^^