Я сейчас разрабатываю скрипт для карты в COD4.Я думаю, что язык настолько прост, что я помечаю его как независимый от языка, поскольку проблема заключается в алгоритме для этой ситуации.
Существует комната, ширина которой составляет 960 единиц.И внутри него есть объект посередине, который мы будем считать осью.Мяч должен перемещаться в случайную позицию при каждом ударе, но не должен проходить дальше стен.Вот диаграмма:
API игры позволяет, насколько я знаю, только перемещать объекты относительно их положения, поэтому вот код, который я придумал.Проблема в том, что после второго вызова head_move () начинает давать неожиданные результаты, и это разбивает мою голову.Может ли кто-нибудь помочь мне?
motionThink ():
while (1)
{
self waittill ("trigger", player); //Wait till player hits the object
head_origin thread head_move();
}
head_move()
{
/* level.prevx is a global variable which I use to store
the distance traveled in the previous shot. Defaults to 0 */
/*This works in the first and second hit, but then it begins to show
incorrect max and min values*/
x_min = (0-480) + level.prevx;
x_max = x_min + 960;
x_units = RandomIntRange( x_min, x_max ); //Create a random integrer
log2screen("MIN: " + x_min + " and MAX: " + x_max + " and MOVED " + x_units);
log2screen("Moved " + x_units);
//Movement function, first parameter is the distance to be traveled, and the second one is the speed
self movex (x_units , level.movespeed);
level.prevx = x_units;
}
РЕДАКТИРОВАТЬ: Просто чтобы уточнить.Когда пользователь стреляет мячом, его положение меняется на определенное значение.Теперь, если он нажмет его снова, минимальные и максимальные значения генератора случайных чисел должны измениться, чтобы предотвратить перемещение шара за пределы стен.Пример:
- Уровень начинается.Мяч в середине комнаты.Минимальный и максимальный диапазоны составляют -480 и 480 соответственно
- Пользователь ударяет по мячу и его перемещенным -200 единицам (200 единиц влево).
- Теперь минимальный и максимальный диапазон долженбыть -280 и 680.
Надеюсь, это достаточно ясно.
РЕДАКТИРОВАТЬ 2: Отредактировал знак в соответствии с предложением FlipScript.Вот вывод функций log2screen: что на самом деле происходит:
- MIN: -480 и MAX 480. MOVED 67
- MIN: -413 и MAX 547. MOVED 236
- MIN: -244 и MAX 716. MOVED 461
Просто пример кейса.Я считаю, что что-то задом наперед, это неправильные вычисления.