2016-06-11 1 views
1

Je suis en train de programmer un petit jeu basé sur le Fate RPG. Quand les dés sont lancés, je veux remplacer une chaîne par une autre chaîne en utilisant .replace. Je peux l'obtenir pour travailler dans un environnement isolé, mais quand j'essaie d'appeler la fonction depuis l'intérieur de mon programme; c'est comme si les chaussures l'ignoraient complètement.Pourquoi ne pas .replace travailler dans Ruby Shoes?

Voici un exemple simple de la façon dont la fonction est utilisée pour exécuter correctement:

Shoes.app { 
@push = button "Push me" 
@note = para "Nothing pushed so far" 
@push.click { @note.replace "Aha! Click!" } 
} 

Et voici le code correspondant de mon jeu:

$results = para "Roll results go here.", :align => "center", 
     :margin_bottom => 20, :margin_top => 8 
@roll_button.click { 
    current_roll = Die.new 
    current_roll.roll 
    current_roll.display_dice 
    current_roll.tally 
    current_roll.calc_total_roll(1) #param = skill level 
    $shift = current_roll.calc_total_shift(2) #param = opposition 
    $results.replace "Actual results"      
    } 

Le bloc $results est dans un autre position dans le code que le bloc @roll_button.click, mais j'ai essayé de déplacer le bloc de clic à de nombreux endroits différents dans le code, et cela n'a pas fait de différence, donc je ne pense pas que ce soit pertinent. Merci.

* edit: Suppression inutile « = » après $results.replace

+0

Bonjour, bienvenue à SO. Dans l'intérêt de la politesse, je vais voter pour clore la question, car il n'y a pas suffisamment d'information pour que quelqu'un d'autre puisse répondre à cette question. Mais je suis content que vous ayez votre code pour fonctionner - c'est génial! Merci également d'avoir ajouté une réponse. –

Répondre

1

Vous n'êtes pas appeler une méthode replace, vous appelez une méthode replace= qui n'existe probablement pas. Essayez-le sans le signe égal.

+0

Ah, oui. C'était l'une de mes tentatives de plus en plus désespérées pour trouver un moyen d'exécuter cette ligne de code. J'ai essayé toutes les syntaxes auxquelles je pouvais penser puisque la syntaxe officielle semblait ne pas fonctionner. –

+0

Ok, quel est exactement votre message d'erreur? Ajoutez cela à votre question. – SteveTurczyn

+0

Il n'y avait pas de message d'erreur, le code ne s'exécutait tout simplement pas. Mais j'ai trouvé la cause. Merci pour l'aide. –

2

J'ai finalement réussi à le faire fonctionner. Le problème était la fonction .display_dice exécutée juste avant .replace. Le code incriminé est ici:

if $result1 == 1 
     $die1.path = "dice_plus-1.png" 
    elsif $result1 == 0 
     $die1.path = "dice_nil-1.png" 
    elsif $result1 == -1 
     $die1.path = "dice_minus-1.png" 
    else 
     exit(1) 
    end 

je comptais le exit(1) pour me faire savoir si mes dés recevaient des valeurs qu'ils ne devraient pas, mais il a empêché en quelque sorte la prochaine ligne de code en cours d'exécution, même si l'écoulement du programme a évité ces lignes. Le code fixe est ici:

if $result1 == 1 
     $die1.path = "dice_plus-1.png" 
    elsif $result1 == 0 
     $die1.path = "dice_nil-1.png" 
    else $result1 == -1 
     $die1.path = "dice_minus-1.png" 
    end 
+1

Ok la prochaine fois, considérons 'raise' au lieu de' exit' pour vous donner une erreur que vous pouvez voir et éventuellement 'sauver'. S'amuser! – SteveTurczyn