2016-06-11 11 views
1

Ich programmiere ein kleines Spiel basierend auf dem Fate RPG. Wenn die Würfel gerollt werden, möchte ich eine Zeichenfolge durch eine andere Zeichenfolge ersetzen, indem Sie .replace verwenden. Ich kann es in einer isolierten Umgebung arbeiten lassen, aber wenn ich versuche, die Funktion aus meinem Programm heraus aufzurufen; Es ist, als ob Shoes sich dessen gar nicht bewusst ist.Warum funktioniert .replace nicht in Ruby Shoes?

Hier ist ein einfaches Beispiel dafür, wie die Funktion arbeitet, dass richtig ausgeführt wird:

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

Und hier ist der entsprechende Code von meinem Spiel:

$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"      
    } 

Der $results Block ist in einem anderen Position im Code als der @roll_button.click Block, aber ich habe versucht, den Klick-Block zu vielen verschiedenen Stellen im Code zu bewegen, und es hat keinen Unterschied gemacht, so dass ich denke, es ist nicht relevant. Vielen Dank.

* edit: Entfernt unnötige ‚=‘ nach $results.replace

+0

Hallo, willkommen in SO. Im Interesse der Ordentlichkeit werde ich abstimmen, um die Frage zu schließen, weil sie nicht genug Informationen für andere als Sie in der Lage ist, sie zu beantworten. Aber ich bin froh, dass Sie Ihren Code zur Arbeit bekommen haben - das ist großartig! Danke, dass Sie eine Antwort hinzugefügt haben. –

Antwort

1

Sie sind nicht eine replace Methode aufrufen, werden Sie eine replace= Methode aufrufen, die wahrscheinlich nicht existiert. Versuchen Sie es ohne das Gleichheitszeichen.

+0

Ah, ja. Das war einer meiner zunehmend verzweifelten Versuche, irgendeinen Weg zu finden, diese Codezeile zum Laufen zu bringen. Ich habe jede Syntax ausprobiert, die mir einfiel, da die offizielle Syntax nicht zu funktionieren schien. –

+0

Ok, was ist Ihre genaue vollständige Fehlermeldung? Fügen Sie das zu Ihrer Frage hinzu. – SteveTurczyn

+0

Es gab keine Fehlermeldung, der Code wurde einfach nicht ausgeführt. Aber ich habe die Ursache gefunden. Danke für die Hilfe. –

2

Ich habe es endlich zur Arbeit gebracht. Das Problem war die .display_dice Funktion, die kurz vor .replace ausgeführt wird. Der Code säumige ist hier:

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 

ich die exit(1) soll mich wissen lassen, wenn meine Würfel Werte erhielten sie es nicht sollten, aber es verhindert irgendwie die nächste Codezeile aus ausgeführt wird, auch wenn der Fluss des Programm vermieden diese Zeilen. Der feste Code ist hier:

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 nächstes Mal erwägen 'raise' statt' exit', um Ihnen einen Fehler zu geben, den Sie sehen und möglicherweise 'retten' können. Habe Spaß! – SteveTurczyn