2016-06-11 11 views
1

Я программирую небольшую игру, основанную на RPG Fate. Когда кубики скатываются, я хочу заменить строку другой строкой, используя .replace. Я могу заставить его работать в изолированной среде, но когда я пытаюсь вызвать функцию изнутри моей программы; это как если бы Обувь совершенно не осознавала этого.Почему не стоит работать в Ruby Shoes?

Вот простой пример того, как работает функция, которая корректно выполняет:

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

А вот соответствующий код из моей игры:

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

$results блок находится в другой позиции в коде, чем блок @roll_button.click, но я попытался переместить блок кликов во множество разных мест в коде, и это не повлияло, поэтому я не думаю, что он имеет значение. Благодарю.

* редактирование: Удалены ненужные «=» после $results.replace

+0

Здравствуйте, добро пожаловать в SO. В интересах аккуратности я собираюсь голосовать, чтобы закрыть вопрос, потому что у него недостаточно информации для кого-либо, кроме вас, чтобы иметь возможность ответить на него. Но я рад, что вы получили свой код для работы - это здорово! Кроме того, спасибо за добавление ответа. –

ответ

1

Вы не вызывая replace метод, вы звоните в replace= метод, который, вероятно, не существует. Попробуйте это без знака равенства.

+0

А, да. Это была одна из моих все более отчаянных попыток найти какой-либо способ заставить эту строку кода работать. Я пробовал каждый синтаксис, о котором я мог думать, поскольку официальный синтаксис, похоже, не сработал. –

+0

Хорошо, а как ваше полное сообщение об ошибке? Добавьте это к своему вопросу. – SteveTurczyn

+0

Не было сообщения об ошибке, код просто не выполнялся. Но я нашел причину. Спасибо за помощь. –

2

Я, наконец, получил его на работу. Проблема заключалась в том, что функция .display_dice работает как раз перед .replace. Код обижая здесь:

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 

Я предназначал exit(1), дай мне знать, если мои кости получали значения они не должны, но это как-то предотвратить следующую строку кода от бега, даже если протекание программа избегала этих строк. Фиксированный код находится здесь:

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

В следующий раз рассмотрите 'raise' вместо' exit', чтобы вы получили сообщение об ошибке, которое вы можете увидеть и, возможно, «спасти». Повеселись! – SteveTurczyn

 Смежные вопросы

  • Нет связанных вопросов^_^