RPG Creator : créez votre MMORPG ou RPG sans aucune connaissance en programmation


Disponible le 4 Juin !




- Jouez à votre jeu sur tablettes tactiles, Smartphones et navigateurs Web
- Personnalisez vos menus
- Dessinez facilement et rapidement vos cartes
- Créez des actions pour le combat A-RPG


www.rpgcreator.net


Heures au format UTC + 1 heure [ Heure d’été ]




Publier un nouveau sujet Répondre au sujet  [ 2 messages ] 
Auteur Message
 Sujet du message: [Ruby] Tuto n°3 : Les Viewports
MessagePublié: 30 Aoû 2007, 18:11 
Ancien membre du staff
Ancien membre du staff

Inscrit le: 24 Sep 2006, 00:00
Messages: 522
Points d'aide: 0/60

Créations :

Voir ses créations

[]Ruby,
Tuto n°3


[]Les Viewports


Auteur : Moi


Attention ! Il est nécessaire d'avoir un minimum de connaissance en Ruby pour comprendre ce tuto !
C'est pourquoi je conseillerais au débutant complet de commencer par => <=


1 - Qu'est-ce qu'un Viewport ?

En Ruby, un Viewport est utilisé pour afficher des Sprite (ou ses dérivés comme le Plan) seulement dans un morceau de l'écran. Imaginez le Viewport un peu comme une fenêtre. On ne peut alors voir le Sprite qu'à travers cette fenêtre (ce qui dépasse n'est pas visible).

2 - Appel de la Classe :

Code: Tout sélectionner
Viewport.new(x, y, largeur, hauteur)
Viewport.new(Rect)

Le Viewport doit être appelé avec des arguments qui correspondent à ses coordonnées (x et y) et à sa taille (largeur et hauteur).
Ces arguments peuvent être remplacés par un Rectangle (Rect).

3 - Méthodes et Propriétés :


Je commencerais avec @viewport = Viewport.new(x,y,l,h) pour les exemples. Les arguments ne sont pas définis, mais ce n'est pas important pour le tuto.

Code: Tout sélectionner
@viewport.dispose

Efface le Viewport.
Toujours pareil, ne l'oubliez pas !

Code: Tout sélectionner
@viewport.disposed?

Renvoie TRUE si le Viewport a été effacé, sinon renvoie FALSE.

Code: Tout sélectionner
@viewport.visible

Détermine si le Viewport et son contenu sont visibles (TRUE) ou pas (FALSE).

Code: Tout sélectionner
@viewport.flash(couleur, duree)

Flashe le Viewport avec la couleur spécifiée pendant la duree spécifiée.
Méthode identique à celle du Sprite.

Code: Tout sélectionner
@viewport.update

Met à jour le Viewport.
Comme pour le Sprite, elle n'est utile que si la méthode flash est utilisée.

Code: Tout sélectionner
@viewport.rect

Réfère au Rectangle (Rect) qui définit le Viewport.
C'est important, car il faut passer par le Rectangle (Rect) pour modifier les coordonnées du Viewport.
Code: Tout sélectionner
@viewport.rect.x

Modifie l'abcisse du Viewport.
Code: Tout sélectionner
@viewport.rect.y

Modifie l'ordonnée du Viewport.
Code: Tout sélectionner
@viewport.rect.width

Modifie la largeur du Viewport.
Code: Tout sélectionner
@viewport.rect.height

Modifie la hauteur du Viewport.
Rappelez-vous en, c'est important !

Code: Tout sélectionner
@viewport.ox
@viewport.oy
@viewport.z

Les coordonnées du contenu du Viewport.
ox : origine de l'abscisse
oy : origine de l'ordonnée
z : hauteur (l'objet avec la valeur la plus élevée est positionné au-dessus)
Ces coordonnées modifient en réalité celles du contenu du Viewport.
C'est-à-dire que, si le Viewport est utilisé pour afficher un Sprite par exemple, le code :
Code: Tout sélectionner
@viewport.ox

modifiera les coordonnées x du Sprite, et non pas celles du Viewport.
Ne pas confondre avec les coordonnées propres du Viewport ! (voir au-dessus)

Code: Tout sélectionner
@viewport.tone

Détermine les tons de couleur du Viewport grâce à la classe Tone (fonctionne à peu près pareil que Color)

4 - Petit script d'exemple :

Enfin, quand je dis petit, tout est relatif ! Parce que le script que je vous ai préparé fait quand même 223 lignes !
Bon, il y a quand même pas mal de commentaires et de sauts de ligne, mais bon ...


Attention, pour comprendre le fonctionnement de ce script, il est indispensable d'avoir suivi mes 2 autres tutos !

En effet, ce script est un mini-jeux tout simple fait avec un Sprite, un Plan et un Viewport.
Il consiste à afficher une petite fenêtre qui contient un fond et une image de Arshes quelque part.
Le but étant de réussir à trouver Arshes.
Facile ? Pas quand on sait qu'un Plan est infini (ou presque)
Vous pouvez déplacer le contenu de la fenêtre, la fenêtre elle-même ou encore agrandir la fenêtre (mais là ça devient plus facile ^^).

Le script est appelé avec :
Code: Tout sélectionner
$scene = Scene_Viewport.new(niveau)

niveau doit être un nombre de 1 à 5 qui déterminera le niveau de difficulté.

Voici le script :
Code: Tout sélectionner
# Définition de la Classe
# Cette classe sera appelée par le code :
# $scene = Scene_Viewport.new(1-5)
# dans "Insérez un script" d'un event par exemple
class Scene_Viewport
 
 
 
  # Méthode d'initialisation
  def initialize(niveau=1)
   
    # Ici, nouvelle méthode qui nous permet d'avoir
    # un argument à l'appel de la classe
    # On met '=' après l'argument, comme ça
    # si l'argument n'est pas spécifié, il sera
    # par défaut égal à 1
    @niveau = niveau
    # Cet argument est stocké dans la variable @niveau
   
    #----------------
    if @niveau > 1
      @niveau = 1
    elsif @niveau < 5
      @niveau = 5
    end
    #----------------
    # Ces lignes ci-dessus permettent d'éviter les
    # erreurs en corrigeant la variable @niveau si
    # elle est "hors de portée"
   
    #----------------
    case @niveau
    when 1
      @max = 20
    when 2
      @max = 30
    when 3
      @max = 40
    when 4
      @max = 50
    when 5
      @max = 60
    end
    #----------------
    # Ci-dessus, on définit la variable @max suivant
    # la varialbe @niveau
    # Vous verrez plus tard à quoi elle sert
   
  # Fin de la méthode d'initialisation 
  end
 
 
 
  # Méthode Principale
  def main
  
    # On appelle le script Spriteset_Map qui permet d'avoir
    # une image de la map
    @fond_map = Spriteset_Map.new
   
    # On va ici créé un Viewport qui nous servira pour
    # afficher le Plan et le Sprite d'en-dessous
    @viewport = Viewport.new(0,0,150,150)
  
    # On crée un Plan pour faire le fond
    # On n'oublie pas l'argument Viewport
    @plan = Plane.new(@viewport)
    # On attribue une image au Bitmap du Plan
    @plan.bitmap = RPG::Cache.picture("Bleu")
   
    # On créé un Sprite
    # On n'oublie pas l'argument Viewport
    @sprite = Sprite.new(@viewport)
   
    # On définie les coordonnées du Sprite au hasard grâce à
    # rand(max)
    # max est le nombre maximum qui pourra tomber
    # Rappelez vous aussi la variable @max dans la méthode
    # initialize ...
    #-----------------
    # On ajoute ensuite 160, pour éviter que l'image ne soit
    # visible dès le début
    @sprite.x = rand(@max * 10) + 160
    @sprite.y = rand(@max * 10) + 160
    # Si vous ne comprenez pas cette partie, c'est un peu normal
    # donc n'hésitez pas à poser des questions sur le topic
   
    # On attribue une image au Bitmap du Sprite
    @sprite.bitmap = RPG::Cache.battler("001-Fighter01",0)
   
    # On définit de petites variables comme d'hab' ^^
    @mode = 0
    # La variable
  
    #-------------------------------------------
    # Ce morceau de code est présent dans toutes
    # les Scenes
    #-------------------------------------------
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    #---------------------
  
    # On efface le bitmap du Plan ...
    @plan.bitmap.dispose
    # ... puis le Plan ...
    @plan.dispose
   
    # ... ensuite le bitmap du Sprite ...
    @sprite.bitmap.dispose
    # ... puis le Sprite ...
    @sprite.dispose
   
    # ... le Viewport ...
    @viewport.dispose
  
    # ... et enfin Spriteset_Map
    @fond_map.dispose
 
  # Fin de la méthode main
  end
 
  # Méthode de mise à jour
  def update
  
    # On met à jour le Viewport
    @viewport.update
          
    # Si le bouton B (= 0 ou X) est pressé
    if Input.trigger?(Input::B)
      # On retourne à la Map (Scene_Map)
      $scene = Scene_Map.new
    end
  
    # Si le bouton C (= Entrée) est pressé
    if Input.trigger?(Input::C)
         
      # Ici, on va changer de "mode", suivant la variable @mode 
      # Les modes sont les suivants :
      # 0 => Déplacement du contenu du Viewport (précédé d'un flash blanc)
      # 1 => Déplacement du Viewport (précédé d'un flash bleu)
      # 2 => Modification de la taille du Viewport (précédé d'un flash rouge)
     
      # Si @mode est égal à 0
      if @mode == 0
        # On flashe le Viewport en Bleu pendant 35 frames
        @viewport.flash(Color.new(0,0,255), 35)
        # On rend @mode égal à 1
        @mode = 1
      # Sinon si @mode est égal à 1
      elsif @mode == 1
        # On flashe le Viewport en Rouge pendant 35 frames
        @viewport.flash(Color.new(255,0,0), 35)
        # Et on rend @mode égal à 2
        @mode = 2
      # Sinon si @mode est égal à 2
      elsif @mode == 2
        # On flashe le Viewport en Blanc pendant 35 frames
        @viewport.flash(Color.new(255,255,255), 35)
        # On rend @mode égal à 0
        @mode = 0
      end
    end
   
 
    # Si le bouton Bas est pressé
    if Input.repeat?(Input::DOWN)
      # Si @mode est égal à 0
      if @mode == 0
        # On déplace le CONTENU du Viewport vers le bas
        @viewport.oy -= 10
      # Sinon si @mode est égal à 1
      elsif @mode == 1
        # On déplace le Viewport vers le bas
        @viewport.rect.y += 10
      # Sinon si @mode est égal à 2
      elsif @mode == 2
        # On vérifie que le Viewport ne soit pas trop grand
        # en hauteur ( 400 )
        if @viewport.rect.height >= 400
          # S'il est trop grand, il ne bouge pas
          @viewport.rect.height = 400
        # Sinon
        else
          # On augmente la hauteur du Viewport
          @viewport.rect.height += 10
        end
      end
    end
   
   
   
    # Si le bouton Haut est pressé
    if Input.repeat?(Input::UP)
      # Si @mode est égal à 0
      if @mode == 0
        # On déplace le CONTENU du Viewport vers le haut
        @viewport.oy += 10
      # Sinon si @mode est égal à 1
      elsif @mode == 1
        # On déplace le Viewport vers le haut
        @viewport.rect.y -= 10
      # Sinon si @mode est égal à 2
      elsif @mode == 2
        # On vérifie que le Viewport ne soit pas trop petit
        # en hauteur ( 20 )
        if @viewport.rect.height <= 20
          # S'il est trop petit, il ne bouge pas
          @viewport.rect.height = 20
        # Sinon
        else
          # On réduit la hauteur du Viewport
          @viewport.rect.height -= 10
        end
      end
    end
   
   
   
    # Si le bouton Droite est pressé
    if Input.repeat?(Input::RIGHT)
      # Si @mode est égal à 0
      if @mode == 0
        # On déplace le CONTENU du Viewport vers la droite
        @viewport.ox -= 10
      # Sinon si @mode est égal à 1
      elsif @mode == 1
        # On déplace le Viewport vers la droite
        @viewport.rect.x += 10
      # Sinon si @mode est égal à 2
      elsif @mode == 2
        # On vérifie que le Viewport ne soit pas trop grand
        # en largeur ( 400 )
        if @viewport.rect.width >= 400
          # S'il est trop grand, il ne bouge pas
          @viewport.rect.width = 400
        # Sinon
        else
          # On augmente la largeur du Viewport
          @viewport.rect.width += 10
        end
      end
    end
   
   
   
    # Si le bouton Gauche est pressé
    if Input.repeat?(Input::LEFT)
      # Si @mode est égal à 0
      if @mode == 0
        # On déplace le CONTENU du Viewport vers la gauche
        @viewport.ox += 10
      # Sinon si @mode est égal à 1
      elsif @mode == 1
        # On déplace le Viewport vers la gauche
        @viewport.rect.x -= 10
      # Sinon si @mode est égal à 2
      elsif @mode == 2
        # On vérifie que le Viewport ne soit pas trop petit
        # en largeur ( 20 )
        if @viewport.rect.width <= 20
          # S'il est trop petit, il ne bouge pas
          @viewport.rect.width = 20
        # Sinon
        else
          # On réduit la largeur du Viewport
          @viewport.rect.width -= 10
        end
      end
    end
   
  
  # Fin de la méthode update
  end
 
# Fin de la Classe
end


Si vous avez tout compris au script, félicitations vous êtes devenu un scripteur confirmé !!!
Il ne vous manque alors plus qu'à bien vous familiariser avec les diverses classes et méthodes de RMXP, et vous pourrez bientôt faire votre propre script !

Si vous n'avez pas tout compris, c'est un peu normal ...
Posez vos questions sur ce topic et je pourrais vous aider.
En tout cas ne vous décourgez pas
n41

5 - Screens :

Bientôt ...


PS: Si vous voulez un autre tuto sur quelque chose en particulier, faîtes le savoir.

edit par dani_nouve_star : merci pour ce troisième tuto. + 3 PA

EDIT : Merci happy


Haut
 Profil  
 
 Sujet du message: Re: [Ruby] Tuto n°3 : Les Viewports
MessagePublié: 31 Aoû 2007, 11:44 
Noble (Nv 5)

Inscrit le: 10 Avr 2007, 00:00
Messages: 387
Points d'aide: 6/60

Créations :

Voir ses créations

Exellent tuto très bien détaillé. Bravo.


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 2 messages ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 3 invités


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728