Хората отговарят на въпроса ви на много ниско ниво. Понякога помага да се мисли за проблема на по-високо ниво.
Това, от което се нуждаете, е тип държавно управление. Фантастичният термин в компютърните науки за това е крайна машина. Но не си правете труда да търсите това точно сега. В началото е доста сухо и объркващо :)
Вашият герой в момента има едно състояние - "стоящ наоколо". Трябва да добавите и обработите състоянието „ходене до дестинацията“.
От това, което прочетох за друго въвеждане с мишката, мисля, че ще имам нужда от някакъв вид цикъл
Имате нужда от един цикъл, наречен цикъл на играта. Ако използвате XNA, вече имате такъв. Но си на прав път.
Всеки път, когато преминавате през цикъла на играта, трябва да обработвате текущото състояние и да проверявате за така наречените Преходи на състояния. Това е, когато промените нещо във вашия свят от едно състояние в друго състояние. Например, когато щракнете с мишката, искате човекът да започне да се движи.
В цикъла на вашата игра проверявате дали току-що се е случило щракване с мишката. Ако е така, задайте някои данни (накъде да се придвижите) и му кажете да започне да ходи, като зададете състоянието му на „ходене до дестинацията“. Следващата актуализация вместо това ще обработите това състояние.
Когато вашият герой е в състояние "ходене към дестинация", трябва да актуализирате позицията му въз основа на времето, изминало от последната актуализация на играта. В XNA това се изчислява за вас. Ако не използвате XNA, тогава ще трябва да проверите сами. Може да можете да използвате нещо като класа Stopwatch
и да проверите полето Elapsed
.
Ако героят е на местоназначението, трябва да го превключите обратно в състояние "стоящо наоколо".
Ако получите друго щракване с мишката, зависи от вас дали искате състоянието „ходене до дестинацията“ да му обърне внимание или не. Ако обърнете внимание на това, вие настройвате същия вид данни, както когато сте преминали от състояние "стоящо наоколо".
И така, ще ви трябват тези променливи:
- Таймер, за да разберете изминалото време от последния цикъл на играта (XNA ви го дава)
- Текущото състояние на играча (може би
enum
)
- Текущата позиция на играча (вектор)
- Скоростта на ходене на играча (вероятно плувка), измерена в единици за секунда (или милисекунда)
- Данни за състоянието "ходене до местоназначението" - целева позиция (друг вектор)
- Данни, свързани с въвеждането на потребителя (събития с мишката, настъпили след последната актуализация, позицията на тези кликвания и т.н.)
Специфичните данни за персонажа ще бъдат различни за всеки герой във вашата игра, така че искате ново копие от него за всеки. Вероятно ще искате да го поставите в клас. Останалата част от него е по-глобална, така че можете да го запазите отделно или да го направите част от вашата игра, цикъл на играта, класове за въвеждане и т.н. (както и да изберете да го организирате).
Няма да разглеждам векторната математика за това как всъщност да изчисля нещата с частичното движение, тъй като други хора са разгледали това. Няма смисъл да дублирам тези отговори. Основно се свежда до създаване на вектор между текущата ви позиция и целевата позиция и умножаването/разделянето му по скоростта на ходене (за да го нарежете до разстоянието, изминато в една актуализация).
person
Merlyn Morgan-Graham
schedule
17.02.2011