Le Deal du moment :
Nike : Jusqu’à 50% sur les articles de ...
Voir le deal

Aller en bas
Berka
Berka
Staffeux retraité

Nombre de messages : 1832
Age : 33
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Script video amelioré Empty Script video amelioré

Ven 14 Mar 2008 - 21:04
Bonsoir !

M'étan particulièrement intéressé aux api, et a la gestion multimédia, dans mon projet (voir ma signature):
voici un script de corwin que j'ai légérement amélioré:

gestion du volume
pause
et positionnement de la fenetre de video

En espérant qu'il vous soit utile !
Code:
#============================
#                         
#    rpgmakervx.1fr1.net                                         
#================================
#
#                          -  Game_Film  -
#  Rgss 1 & 2
#--------------------------------------------------------
#                              par berka
#                        sur les bases de Corwin
#--------------------------------------------------------
# -> utilisation:
# -1-creer un dossier "Films" dans le dossier de votre projet
# -2-y déposer les videos
# -3-appeler ce script dans un évenement par:
#      $game_film = Game_Film.new("Test.avi")
# ou  $game_film = Game_Film.new("Test.avi", pos x, pos y, largeur, hauteur)
# ou  $game_film = Game_Film.new("Test.avi", pos x, pos y) ....etc....
#===========================================
class Game_Film
 
  Volume = 500 #entre 0 et 1000
 
  def initialize(film, x = 0, y= 0, w= 544, h= 416)
    @x= x.to_s+" " #position horizontale
    @y= y.to_s+" " #position verticale
    @w= w.to_s+" "#largeur
    @h= h.to_s+" " #hauteur
    @nom = Dir.getwd()+"\\Films\\"+film # recherche de l'adresse de la video
    @readini = Win32API.new('kernel32', 'GetPrivateProfileStringA', '%w(p p p p l p)', 'l') #pour lire le fichier Game.ini
    @film= Win32API.new('winmm','mciSendString','%w(p,p,l,l)','V') #gestion du media
    @handle = Win32API.new('user32','FindWindowEx','%w(l,l,p,p)','L') #pour recuperer le handle de la fenetre
    @message = Win32API.new('user32','SendMessage','%w(l,l,l,l)','V') #pour envoyer des infos
    charge
  end
 
  def charge
    jeu  = "\0" * 256
    @readini.call('Game','Title','',jeu,255,".\\Game.ini")#on lit le game.ini jusqu'au string Title, on inscrit le titre dans jeu
    jeu.delete!("\0") #on enleve tous les \0 du string
    @temp = @handle.call(0,0,nil,jeu).to_s #on recupere la fenetre
    @film.call("open \""+@nom+"\" alias FILE style 1073741824 parent " + @temp.to_s,0,0,0) #on ouvre le media
    @status = " " * 255
    lecture
  end
 
  def lecture
    pause = false
    @film.call("put FILE window at "+@x+@y+@w+@h, @status,0,0) #on positionne la fenetre du media
    @film.call("setaudio MediaFile volume to "+Volume.to_s, @status,0,0) #on regle le volume
    @film.call("play FILE from 0",@status,0,0) #et on lit le media
    loop do
      sleep(0.1) #on raffraichit
      @message.call(@temp.to_i,11,0,0) #on envoie l'info de lecture
      Graphics.update #mise a jour graphique
      @message.call(@temp.to_i,11,1,0) #on envoie l'info de lecture
      Input.update #mise a jour des touches
      @film.call("status FILE mode",@status,255,0) #on recupere l'etat du media
      true_status = @status.unpack("aaaa") #que l'on insere dans un tableau
      break if true_status == "stop".split(//) #sort de la boucle si en stop
      if Input.trigger?(Input::B) #quitte si on presse X
        Input.update
        break
      end
      if Input.trigger?(Input::C) #pause si on presse Espace
        Input.update
        if pause == false
          @film.call("pause FILE",@status,0,0)
          pause = true
        else
          @film.call("play FILE",@status,0,0)
          pause = false
        end     
      end
    end
    @film.call("close FILE",0,0,0) #et on ferme le fichier
  end
end
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum