Я поднял этот вопрос в одном из своих других вопросов, но я работаю над текстовой приключенческой игрой, разработанной для IOS.
Одна из вещей, над которыми я работаю, — дать кнопке несколько различных функций при определенных обстоятельствах. Я читал в нескольких других сообщениях, что я могу добиться этого, используя быстрые операторы, и мне удалось несколько изменить действие, однако это не правильное действие.
Как показано ниже, большая часть моей истории, а также те варианты, которые даны игроку, хранятся в структуре и могут переключаться с помощью метода PickStory.
func mainStory()
{
Storys =
[Story(Story: "You are walking along a dirt path and come to a cross roads. You see a small shack just off the trail. What do you want to do?", Action: "Heal", North: true, South: true, East: false, West: false, storyProg: true, resultN: "You walk north and see a gate in the distance.", resultS: "Their is nothing to turn back for.", resultE: "", resultW: ""),
Story(Story: "You see a small gate at the end of the dirt path, and their is a gaurd standing infront of the gate.", Action: "Approach", North: true, South: true, East: true, West: true, storyProg: false, resultN: "", resultS: "", resultE: "", resultW: ""),
Story(Story: "You see a small well in the middle of town.", Action: "Attack", North: true, South: true, East: true, West: true, storyProg: false, resultN: "", resultS: "", resultE: "", resultW: "")]
PickStory()
}
func PickStory()
{
if Storys.count > 0
{
storyNum = 0
storyLabel.text = Storys[storyNum].Story
actionButton.setTitle(Storys[storyNum].Action, for: UIControl.State.normal)
adjustButtons(North: Storys[storyNum].North,
South: Storys[storyNum].South,
East: Storys[storyNum].East,
West: Storys[storyNum].West)
Storys.remove(at: storyNum)
}
else
{
NSLog("Done!")
}
}
Теперь, когда текст кнопки «Действие» устанавливается в методе PickStory, фактические действия изменяются в методе фактической кнопки, который следует через несколько строк после него (обратите внимание, что операторы печати являются лишь временными заполнителями для методов, которые будут размещены). потом).
@IBAction func actionButton(_ sender: Any)
{
switch Storys[storyNum].Action
{
case "Attack":
print("Attacking")
break
case "Heal":
print("Healing")
break
case "Approach":
print("Approaching")
break
default:
break
}
}
Подводя итог проблеме, текст изменится на правильное действие, но фактическое действие не изменится.
Мое первоначальное предположение заключалось в том, что, поскольку actionButton появляется немного позже, после метода PickStory, он будет читать следующую историю после удаления индекса. Однако я не могу добиться прогресса в истории, не удаляя индексы.
storyNum
объявлен глобально? Кроме того, вы удаляете историю по индексуstoryNum
, так что, возможно, проблема в том, что ее не существует, когда вы проверяете ее в операторе switch. - person Chris   schedule 28.04.2019adjustButtons()
. Одним из решений может быть создание подклассаUIButton
и добавление свойстваstoryAction
, к которому затем можно получить доступ в операторе switch с помощьюsender.storyAction
. - person Chris   schedule 28.04.2019