Retour à l'accueil
Accueil Aide Rechercher Calendrier Identifiez-vous Inscrivez-vous
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
19 Février 2019 à 21:43

Connexion avec identifiant, mot de passe et durée de la session
Règlement | Grades du forum | L'équipe de modération | Album photo | Chat
Rechercher:     avancée
Forums Zelda Solarus  |  Jeux amateurs  |  Tutoriaux  |  Tutoriaux "Développement"  |  Topic: [RGSS] Propriétés d'objets (par Darth Killer) 0 Membres et 1 Invité sur ce sujet.
Pages: [1] Imprimer
Auteur Sujet: [RGSS] Propriétés d'objets (par Darth Killer)  (Lu 1922 fois)
Couet
Administrateur
Arbre Mojo
*
Offline Offline

Messages: 12 814


Jag är ingen bott


Courriel
« le: 04 Février 2006 à 23:28 »

Niveau : Amateur (2/5)
Pré-requis : quelques bases de Ruby, par exemple à travers le RGSS.



Bonjour tout le monde !

Pour les pros de RGSS, je vais rien apprendre (je pense), mais pour ceux qui y débutent, je viens de découvrir comment faire les propriétés d'objets donc on se partage ça :lol:


Avant de se lancer, il faut poser les bases.

Vous avez sûrement déjà vu l'usage de propriétés d'objets, comme la propriété ox d'un objet Sprite (obj.ox = obj.x / 2). Le problème c'est que les propriétés ne sont pas gérées par le Ruby pur. La syntaxe obj.id corespond en fait à la méthode id de l'objet obj (donc ox est une méthode de obj). et ses spécifications font qu'elle agit comme une variable propre à l'objet mais utilisable à l'extérieur des méthodes de l'objet. C'est ça une propriété.

Il me fallait donc trouver comment ils ont fait ça en bidouillant. Les variables propres aux objets sont les variables d'instance (@var) mais inutilisables à l'extérieur. Il existe aussi certaines définitions de méthodes assez particulières, vues dans une des aides opérationnelles (la US) :
Quote
# method with no argument. end omitted below
def foo
end

# method with arguments
def foo(arg, arg2)

# method with default argument
def foo(arg = nil)

# with everything
def foo(arg, arg2, arg3 = nil, *rest)

# operator format
def ==(other)
def +(other)
def *(other)

# unary plus/minus
def +@
def -@

# element substitution
def foo=(value)             # obj.foo = value

# [] and []=
def [](key)                 # obj[key]
def []=(key, value)         # obj[key] = value
def []=(key, key2, value)   # obj[key, key2] = value

Vous notez que l'avant-dernier corespond plus ou moins à ce qui nous intéresse ? :mrgreen:

Donc mettons qu'on a une classe d'objet comme ceci
Code: [Select]
class Test
  def init(name)
    @name = name
  end
end
Je fais simple. L'objet aura pour seule propriété, donc pour seule variable d'instance, une chaîne protant son nom.
Code: [Select]
$obj = Test.new
$obj.init("Tchô !")
Voilà notre objet et on a initialisé son nom
Code: [Select]
p $obj.name
Quand on teste ça on a un joli message d'erreur, disant que la méthode name n'existe pas pour cette classe Test ^^

donc on va la créer. Elle doit juste rendre la variable d'instance corespondante

Code: [Select]
class Test
  def init(name)
    @name = name
  end
  def name
    return @name
  end
end
Maintenant, quand on fait le code juste avant ça marche. Mais une propriété est aussi modifiable de l'extérieur.

Code: [Select]
p $obj.name
$obj.name = "La frite ?"
p $obj.name

Avec ceci, si l'affichage de "Tchô !" se fait corectement, la ligne suivante génère une erreur. Il faut donc rajouter une nouvelle méthode, du même nom, mais avec une spécification de plus dans sa définition : la substitution !


Code: [Select]
class Test
  def init(name)
    @name = name
  end
  def name
    return @name
  end
  def name= (v)
    @name = v
  end
end
Attention : pas d'espace là où je n'en ai pas mis !

Avec ça, tout fonctionne au poil. Nous avons bien une propriété name liée à notre objet ^^
Journalisée


Pages: [1] Imprimer 
Forums Zelda Solarus  |  Jeux amateurs  |  Tutoriaux  |  Tutoriaux "Développement"  |  Topic: [RGSS] Propriétés d'objets (par Darth Killer)
Aller à:  

Propulsé par MySQL Propulsé par PHP Powered by SMF 2.0.15 | SMF © 2006, Simple Machines LLC XHTML 1.0 Transitionnel valide ! CSS valide !
Zelda Solarus 2009Skin par Eidarloy
www.zelda-solarus.com