2016-02-22 1 views
1

Я работаю над интересным проектом в Excel, создающим игру. Он отлично работает, за исключением того, что примерно через минуту времени выполнения это ошибки, потому что это из пространства стека. Я понял, что это потому, что технически я использую рекурсии в функции stepEvent, которая выглядит следующим образом:Из-за проблемы с пространством стека - могу ли я повторить суб, не перезаписывая его?

Private Sub stepEvent() 
    ' All the game code 
    start = Timer 
    Do While Timer < start + 0.15 
     DoEvents 
    Loop 
    stepEvent 
End Sub 

Ни в одном из случаев stepEvent никогда не решить до тех пор, как игрок не теряет, или он бежит из стека и ошибки. Мой вопрос в том, есть ли способ разрешить рекурсивные субмарины, но как-то сохранить контроль, или если есть альтернативный метод, чтобы повторить этот юг, не используя рекурсию.

+3

Ждите, у вас есть * весь код игры * в этой одной процедуре? –

+0

Пожалуйста, никогда не используйте 'DoEvents'. Это было действительно только для того, чтобы позволить приложениям VB6 обновляться. Это вызовет у вас больше горя от проблем с реорганизацией, чем это стоит. – Enigmativity

+0

Нет, он разделен, но я не думал, что это действительно имеет отношение к проблеме. Я пытался максимально упростить мой вопрос, ха-ха. Есть ли что-то еще, что я должен использовать вместо DoEvents, который позволит пользователю по-прежнему изменять выбор, а не «замораживать» во время его запуска? – Cameron

ответ

1

Попробуйте зацикливание

Sub asDoWhileLoop() 

    Do While True 
     Call stepEvent 
    Loop 

End Sub 

Sub stepEvent() 

    'Do game stuff and wait at end 

End Sub 

Но помните, чтобы очистить в конце вашего stepEvent(), то есть установить свои объекты в НИЧТО, близких, независимо от набора записей вы играете с. Вы можете отказаться от использования END вместо EXIT SUB. Но все зависит от вас, чтобы оно прекратилось.

+0

Работал отлично, спасибо огромное! – Cameron

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

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