Sujet n°9064
Posté par Sakura31 le 30 Jan - 12:32 (2011)
Titre : Que sgnifie cette expression ?
Bonjour
j'ai commencé le RGSS, je me demandais ce que voulais dire ce code
Code:
attr_accessor

merci d'avance

Posté par Sphinx le 30 Jan - 13:01 (2011)
Tu t'attaques à la gestion des accès aux attributs d'une classe Imbécile heureux

Tu peux trouver 4 règles d'accès :
rien : L'attribut n'est pas visible depuis l'extérieur de la classe
attr_reader : L'attribut est accessible en lecture seule (il sera impossible de le modifier depuis l'extérieur de la classe)
attr_writer : L'attribut est accessible en écriture seule (il sera impossible de le lire depuis l'extérieur de la classe)
attr_accessor : L'attribut est accessible en lecture/écriture

Imbécile heureux Enjoy it

Posté par Sakura31 le 30 Jan - 13:24 (2011)
Sphinx a écrit:
Tu t'attaques à la gestion des accès aux attributs d'une classe Imbécile heureux

Tu peux trouver 4 règles d'accès :
rien : L'attribut n'est pas visible depuis l'extérieur de la classe
attr_reader : L'attribut est accessible en lecture seule (il sera impossible de le modifier depuis l'extérieur de la classe)
attr_writer : L'attribut est accessible en écriture seule (il sera impossible de le lire depuis l'extérieur de la classe)
attr_accessor : L'attribut est accessible en lecture/écriture

Imbécile heureux Enjoy it


merci beaucoup Sphinx

Posté par Sakura31 le 4 Fév - 17:28 (2011)
bonjour ca serait pour savoir quel est le code à utilisé pour activer une variable à partir d'un interrupteur.

Posté par Nuri Yuri le 6 Fév - 00:23 (2011)
J'ai pas trop compris ...
Je vais répondre ce que je pense avoir compris :
Code:
$variable=$game_switches[id] #si l'interrupteur est activé la variable le sera si c'est pas le cas la variable ne le sera pas.

Posté par Sakura31 le 6 Fév - 09:52 (2011)
Yuri-岼 a écrit:
J'ai pas trop compris ...
Je vais répondre ce que je pense avoir compris :
Code:
$variable=$game_switches[id] #si l'interrupteur est activé la variable le sera si c'est pas le cas la variable ne le sera pas.


merci beaucoup !

Posté par Sphinx le 10 Fév - 17:27 (2011)
Yuri-岼 a écrit:
Code:
#si l'interrupteur est activé la variable le sera si c'est pas le cas la variable ne le sera pas.

Ca signifie que $variable vaudra true, si l'interrupteur est actif (s'il vaut true) et que $variable vaudra false si l'interrupteur est inactif (s'il vaut false)

$game_switches[n°] est déjà une variable ^^" Donc à partir de là j'ai pas non plus bien compris

Posté par Slash le 10 Fév - 18:00 (2011)
 
Sakura31 a écrit:


bonjour ca serait pour savoir quel est le code à utilisé pour activer une variable à partir d'un interrupteur.

si j'ai bien compris ce que tu souhaite faire tu peut faire un truc de ce genre

Code:


if $game_switches[idi] # si l'interrupeur idi est actif
  $game_variables[idv] = X #la variable idv aura la valeur X (X etant la valeur voulu)
else # sinon
  $game_variables[idv] = 0 #la variable idv aura la valeur 0
end #fin de si


Voila j'espere que cela te sera utile

Posté par Sakura31 le 12 Fév - 21:50 (2011)
Slash a écrit:
 
Sakura31 a écrit:


bonjour ca serait pour savoir quel est le code à utilisé pour activer une variable à partir d'un interrupteur.

si j'ai bien compris ce que tu souhaite faire tu peut faire un truc de ce genre

Code:


if $game_switches[idi] # si l'interrupeur idi est actif
  $game_variables[idv] = X #la variable idv aura la valeur X (X etant la valeur voulu)
else # sinon
  $game_variables[idv] = 0 #la variable idv aura la valeur 0
end #fin de si


Voila j'espere que cela te sera utile


Bonjour Slash, ce que je voudrais faire c'est activer le mode course comme dans heartgold que quand on recoit les chaussures, j'ai pensé à prendre ce script qui permet de courir
Code:
class Game_Player < Game_Character
 
  SPEED_DASH = 5
 
# ??????????(??????Input: :( ???))
#(????????????????????????)
KEY_DASH = Input::A

# "_dash"??????????????????????( true:?? / false:??? )
NO_FILE_DASH = true

# ??????????????ID
# (????????????????????????????ON???????
# ??????????????)
NO_DASH_SWITCH = 999

end

#==============================================================================
# ¦ Game_Player
#==============================================================================

class Game_Player < Game_Character

#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias dash_update update
def update
# ?????????????????????
# ???????????????????????
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
if !($game_switches[NO_DASH_SWITCH])
# ????
if Input.press?(KEY_DASH)
if (dash_graphic_exist?($game_party.actors[0]) or NO_FILE_DASH)
# ??????????????
if @move_speed != SPEED_DASH
@move_speed = 5
@dash_on = true
$game_player.refresh
end
end
elsif @dash_on == nil or @dash_on
#Pour ne pas bugger le mode Vélo, voici des instructions modifiées par Luzert
  if @move_speed == 5 and @dash_on == nil
                     #Si vous courez mais
                     #que (voir plus haut) la touche de course n'est pas pressée
    @move_speed = 4 #Alors on remet la vitesse à 4.
  else #Très important ici! Si la vitesse est 4 sans l'appui de la
       #touche dash, alors on ne fait rien. L'ancien bug était
       #qu'en vélo, la vitesse 4 était appliquée sur le vélo!
       #Maintenant, le bug ne surviendra plus sauf si la touche MAJ
       #est pressée en vélo, je réflechis à une solution.
  end
@dash_on = nil
$game_player.refresh
end
end
end
dash_update
end
#--------------------------------------------------------------------------
# ? ??????????????????
#--------------------------------------------------------------------------
def dash_graphic_exist?(actor)
# ???????
begin
RPG::Cache.character(actor.character_name.to_s + "_dash", actor.character_hue)
rescue
return false
end
return true
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias dash_refresh refresh
def refresh
dash_refresh
# ??????? 0 ??????
if $game_party.actors.size != 0
actor = $game_party.actors[0]
# ??????????????????
if @dash_on and dash_graphic_exist?(actor)
fileplus = "_dash"
else
fileplus = ""
end
@character_name = actor.character_name + fileplus
@character_hue = actor.character_hue
end
end
end

et d'activer le tout avec un interrupteur (comme ca le héro ne peut pas courir tant qu'il n'a pas les chaussures de courses)
Donc j'ai essayé sa, mais il y a une erreur de syntaxe ligne 20... Pourquoi ?
Code:
if $game_switches[0010]
class Game_Player < Game_Character
 
  SPEED_DASH = 5
 
# ??????????(??????Input: :( ???))
#(????????????????????????)
KEY_DASH = Input::A

# "_dash"??????????????????????( true:?? / false:??? )
NO_FILE_DASH = true

# ??????????????ID
# (????????????????????????????ON???????
# ??????????????)
NO_DASH_SWITCH = 999

end
end
else
  $game_switches[0010] = false
end
#==============================================================================
# ¦ Game_Player
#==============================================================================
if $game_switches[0010]
class Game_Player < Game_Character

#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias dash_update update
def update
# ?????????????????????
# ???????????????????????
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
if !($game_switches[NO_DASH_SWITCH])
# ????
if Input.press?(KEY_DASH)
if (dash_graphic_exist?($game_party.actors[0]) or NO_FILE_DASH)
# ??????????????
if @move_speed != SPEED_DASH
@move_speed = 5
@dash_on = true
$game_player.refresh
end
end
elsif @dash_on == nil or @dash_on
#Pour ne pas bugger le mode Vélo, voici des instructions modifiées par Luzert
  if @move_speed == 5 and @dash_on == nil
                     #Si vous courez mais
                     #que (voir plus haut) la touche de course n'est pas pressée
    @move_speed = 4 #Alors on remet la vitesse à 4.
  else #Très important ici! Si la vitesse est 4 sans l'appui de la
       #touche dash, alors on ne fait rien. L'ancien bug était
       #qu'en vélo, la vitesse 4 était appliquée sur le vélo!
       #Maintenant, le bug ne surviendra plus sauf si la touche MAJ
       #est pressée en vélo, je réflechis à une solution.
  end
@dash_on = nil
$game_player.refresh
end
end
end
dash_update
end
#--------------------------------------------------------------------------
# ? ??????????????????
#--------------------------------------------------------------------------
def dash_graphic_exist?(actor)
# ???????
begin
RPG::Cache.character(actor.character_name.to_s + "_dash", actor.character_hue)
rescue
return false
end
return true
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias dash_refresh refresh
def refresh
dash_refresh
# ??????? 0 ??????
if $game_party.actors.size != 0
actor = $game_party.actors[0]
# ??????????????????
if @dash_on and dash_graphic_exist?(actor)
fileplus = "_dash"
else
fileplus = ""
end
@character_name = actor.character_name + fileplus
@character_hue = actor.character_hue
end
end
end
end
else
  $game_switches[0010] = false
end

Merci beaucoup en tous cas.

Posté par Slash le 12 Fév - 23:47 (2011)
c'est parfaitement logique tu demande une codition avant de créé ta classe

ds ton cas

if $game_switches[0010] 
class
 Game_Player < Game_Character 

cela ne pourra jamais marcher

par contre
essaye un truc comme ca avec ton script de base

Code:


class Game_Player < Game_Character  
  if $game_switches[0010]   
   SPEED_DASH = 5  
  else
   SPEED_DASH = 4
  end  

#... la suite du scripte de base



je sais pas si ca marchera mais c'est une proposition de  solution
si cela ne marche pas , cherche un def update ds cette meme classe  et copie les lignes de if a end ds cette definition

Posté par Sakura31 le 13 Fév - 09:24 (2011)
Slash a écrit:
c'est parfaitement logique tu demande une codition avant de créé ta classe

ds ton cas

if $game_switches[0010] 
class
 Game_Player < Game_Character 

cela ne pourra jamais marcher

par contre
essaye un truc comme ca avec ton script de base

Code:


class Game_Player < Game_Character  
  if $game_switches[0010]   
   SPEED_DASH = 5  
  else
   SPEED_DASH = 4
  end  

#... la suite du scripte de base



je sais pas si ca marchera mais c'est une proposition de  solution
si cela ne marche pas , cherche un def update ds cette meme classe  et copie les lignes de if a end ds cette definition


ca ne marche pas il y a une faute de syntaxe ligne 5 :
Code:
class Game_Player < Game_Character
  if $game_switches[0010]
  SPEED_DASH = 5
  end
  else
  SPEED_DASH = 4
  end
# ??????????(??????Input: :( ???))
#(????????????????????????)
KEY_DASH = Input::A

# "_dash"??????????????????????( true:?? / false:??? )
NO_FILE_DASH = true

# ??????????????ID
# (????????????????????????????ON???????
# ??????????????)
NO_DASH_SWITCH = 999

end
#==============================================================================
# ¦ Game_Player
#==============================================================================

class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias dash_update update
def update
# ?????????????????????
# ???????????????????????
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
if !($game_switches[NO_DASH_SWITCH])
# ????
if Input.press?(KEY_DASH)
if (dash_graphic_exist?($game_party.actors[0]) or NO_FILE_DASH)
# ??????????????
if @move_speed != SPEED_DASH
@move_speed = 5
@dash_on = true
$game_player.refresh
end
end
elsif @dash_on == nil or @dash_on
#Pour ne pas bugger le mode Vélo, voici des instructions modifiées par Luzert
  if @move_speed == 5 and @dash_on == nil
                     #Si vous courez mais
                     #que (voir plus haut) la touche de course n'est pas pressée
    @move_speed = 4 #Alors on remet la vitesse à 4.
  else #Très important ici! Si la vitesse est 4 sans l'appui de la
       #touche dash, alors on ne fait rien. L'ancien bug était
       #qu'en vélo, la vitesse 4 était appliquée sur le vélo!
       #Maintenant, le bug ne surviendra plus sauf si la touche MAJ
       #est pressée en vélo, je réflechis à une solution.
  end
@dash_on = nil
$game_player.refresh
end
end
end
dash_update
end
#--------------------------------------------------------------------------
# ? ??????????????????
#--------------------------------------------------------------------------
def dash_graphic_exist?(actor)
# ???????
begin
RPG::Cache.character(actor.character_name.to_s + "_dash", actor.character_hue)
rescue
return false
end
return true
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias dash_refresh refresh
def refresh
dash_refresh
# ??????? 0 ??????
if $game_party.actors.size != 0
actor = $game_party.actors[0]
# ??????????????????
if @dash_on and dash_graphic_exist?(actor)
fileplus = "_dash"
else
fileplus = ""
end
@character_name = actor.character_name + fileplus
@character_hue = actor.character_hue
end
end
end

Posté par Nuri Yuri le 13 Fév - 10:01 (2011)
Enlève le end avant le else ligne 5.

Posté par Sakura31 le 13 Fév - 10:10 (2011)
Code:
class Game_Player < Game_Character
    if $game_switches[0010]
      SPEED_DASH = 5
    else
      SPEED_DASH = 4
    end
# ??????????(??????Input: :( ???))
#(????????????????????????)
KEY_DASH = Input::A

# "_dash"??????????????????????( true:?? / false:??? )
NO_FILE_DASH = true

# ??????????????ID
# (????????????????????????????ON???????
# ??????????????)
NO_DASH_SWITCH = 999

end
#==============================================================================
# ¦ Game_Player
#==============================================================================

class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias dash_update update
def update
# ?????????????????????
# ???????????????????????
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
if !($game_switches[NO_DASH_SWITCH])
# ????
if Input.press?(KEY_DASH)
if (dash_graphic_exist?($game_party.actors[0]) or NO_FILE_DASH)
# ??????????????
if @move_speed != SPEED_DASH
@move_speed = 5
@dash_on = true
$game_player.refresh
end
end
elsif @dash_on == nil or @dash_on
#Pour ne pas bugger le mode Vélo, voici des instructions modifiées par Luzert
  if @move_speed == 5 and @dash_on == nil
                     #Si vous courez mais
                     #que (voir plus haut) la touche de course n'est pas pressée
    @move_speed = 4 #Alors on remet la vitesse à 4.
  else #Très important ici! Si la vitesse est 4 sans l'appui de la
       #touche dash, alors on ne fait rien. L'ancien bug était
       #qu'en vélo, la vitesse 4 était appliquée sur le vélo!
       #Maintenant, le bug ne surviendra plus sauf si la touche MAJ
       #est pressée en vélo, je réflechis à une solution.
  end
@dash_on = nil
$game_player.refresh
end
end
end
dash_update
end
#--------------------------------------------------------------------------
# ? ??????????????????
#--------------------------------------------------------------------------
def dash_graphic_exist?(actor)
# ???????
begin
RPG::Cache.character(actor.character_name.to_s + "_dash", actor.character_hue)
rescue
return false
end
return true
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias dash_refresh refresh
def refresh
dash_refresh
# ??????? 0 ??????
if $game_party.actors.size != 0
actor = $game_party.actors[0]
# ??????????????????
if @dash_on and dash_graphic_exist?(actor)
fileplus = "_dash"
else
fileplus = ""
end
@character_name = actor.character_name + fileplus
@character_hue = actor.character_hue
end
end
end

il a une erreur la derniere ligne, je ne comprend pas c'est pourtant facile, c'est une condition et sa devrait s'ecrire comme ça :
Code:
if
bla
end
else
bla
end

mais bon je ne suis pas bon en script. c'est la première fois...

Posté par Nuri Yuri le 13 Fév - 10:15 (2011)
Non.
Le end signifie que ton code conditionnelle est terminé donc tout else ou elsif sont impossible après.
Une bonne condition doit s'écrire comme ça :
Code:
if var==0
#code
elsif var=="j"
#code
else
#si aucune des conditions sont vraie.
end

if sert à créé une condition
elsif est une condition de secoure si la précédente est fausse. (optionel)
else est le cas ou aucune des conditions sont vraie. Il faut toujours le mettre en dernier.(optionel)

Posté par Sakura31 le 13 Fév - 10:37 (2011)
Le script bug toujours, cette fois à la dernière ligne ou il y a une erreur de syntaxe en elevant le end aux conditions.

Posté par Nuri Yuri le 13 Fév - 11:03 (2011)
si tu met pas de else ou elsif il faut quand même refermer la condition.

Posté par Sphinx le 13 Fév - 16:48 (2011)
Tu as plusieurs structures pour les conditions :

Code:
# 1° possibilité : if / end
if CONDITION
     # Sera réalisé si CONDITION vaut true (vrai)
end
# Rien ne sera fait si CONDITION vaut false (faux)

# 2° possibilité : if / else / end
if CONDITION
     # Sera réalisé si CONDITION vaut true (vrai)
else
     # Sera réalisé si CONDITION vaut false (faux)
end

# 3° possibilité : if / elsif / end
if CONDITION1
     # Sera réalisé si CONDITION1 vaut true (vrai)
elsif CONDITION2
     # Sera réalisé si CONDITION2 vaut true (vrai)
     # Tu peux rajouter autant de elsif que tu veux ^^ Mais faut le faire ici
end
# Rien ne sera fait si toutes les conditions précédentes valent false (faux)

# 4° possibilité : if / elsif / else / end
if CONDITION1
     # Sera réalisé si CONDITION1 vaut true (vrai)
elsif CONDITION2
     # Sera réalisé si CONDITION2 vaut true (vrai)
     # Tu peux rajouter autant de elsif que tu veux ^^ Mais faut le faire ici
else
     # Sera réalisé si toutes les conditions précédentes valent false (faux)
end

Posté par Sakura31 le 14 Fév - 15:35 (2011)
Sphinx a écrit:
Tu as plusieurs structures pour les conditions :

Code:
# 1° possibilité : if / end
if CONDITION
     # Sera réalisé si CONDITION vaut true (vrai)
end
# Rien ne sera fait si CONDITION vaut false (faux)

# 2° possibilité : if / else / end
if CONDITION
     # Sera réalisé si CONDITION vaut true (vrai)
else
     # Sera réalisé si CONDITION vaut false (faux)
end

# 3° possibilité : if / elsif / end
if CONDITION1
     # Sera réalisé si CONDITION1 vaut true (vrai)
elsif CONDITION2
     # Sera réalisé si CONDITION2 vaut true (vrai)
     # Tu peux rajouter autant de elsif que tu veux ^^ Mais faut le faire ici
end
# Rien ne sera fait si toutes les conditions précédentes valent false (faux)

# 4° possibilité : if / elsif / else / end
if CONDITION1
     # Sera réalisé si CONDITION1 vaut true (vrai)
elsif CONDITION2
     # Sera réalisé si CONDITION2 vaut true (vrai)
     # Tu peux rajouter autant de elsif que tu veux ^^ Mais faut le faire ici
else
     # Sera réalisé si toutes les conditions précédentes valent false (faux)
end


merci beaucoup pour la reponse, mon script marche enfin...
C'est quoi l'attribut d'une classe ?

Posté par Sphinx le 14 Fév - 16:56 (2011)
^^ L'attribut, c'est une variable qui appartient à un objet (une instance d'une classe)

La différence entre variables et attributs est un peu la même qu'entre fonctions et méthodes (les méthodes étant des fonctions appartenant à un objet) Imbécile heureux

Posté par IamTheAdic le 14 Fév - 23:13 (2011)
Ah oui Sakura, je te l'ai fait le script avec les chaussures de sports. Faut que je te l'envoie par MP un de ces jours.