Все мы знаем что в компьютере нет случайных чисел, поэтому, хорошая практика для начала расчета функцией случайных чисел, брать действительно случайное число, например координаты мышки на экране. Вопрос - есть ли что то подобное в Арме?
Случайное число
Best Answer TankiSD , 06 September 2015 - 15:01
Я не совсем понял вопрос, но когда-то давно, на АрмА2, я пилил миссию с командованием, где команды отдавались через кнопки и всё такое.
И вот так искался центр экрана\куда смотрит мышка, если мне не изменяет память.
Хотя скорее всего, скинул не то, что надо.
Надо ведь позицию мышки вычислить?
// // Упс, в начале надо подключить: // #define x(a) ((a) select 0) #define y(a) ((a) select 1) #define z(a) ((a) select 2) // // И еще, один момент выяснился, worldToScreen может возвращать пустой массив, если проекция невозможна. Так что добавил проверку: // funcGetSightOnLandscapePosition = { private ["_boneHeadName", "_headPosition", "_weaponDirection", "_screenPosition"]; _boneHeadName = getText (configFile >> "CfgVehicles" >> typeof player >> "boneHead"); _headPosition = player modelToWorld (player selectionPosition _boneHeadName); _weaponDirection = player weaponDirection "throw"; _screenPosition = worldToScreen [ x(_headPosition) + x(_weaponDirection) * 10000, y(_headPosition) + y(_weaponDirection) * 10000, z(_headPosition) + z(_weaponDirection) * 10000 ]; if (count _screenPosition == 2) then { screenToWorld _screenPosition } else { [1e+39, 1e+39] // 1e+39 дает в арме 1.#INF, то есть это позиция в бесконечность }; }; // // проверочная функа: я поставил в игре объект "Сфера 10 см", // обозовал его как eo__objTarget // funcSetObjToSight = { _this setpos (call funcGetSightOnLandscapePosition) }; waitUntil { eo__objTarget call funcSetObjToSight; false; };Go to the full post
#1 OFFLINE
Posted 06 September 2015 - 14:54
#2 OFFLINE
Posted 06 September 2015 - 15:01 Best Answer
Я не совсем понял вопрос, но когда-то давно, на АрмА2, я пилил миссию с командованием, где команды отдавались через кнопки и всё такое.
И вот так искался центр экрана\куда смотрит мышка, если мне не изменяет память.
Хотя скорее всего, скинул не то, что надо.
Надо ведь позицию мышки вычислить?
// // Упс, в начале надо подключить: // #define x(a) ((a) select 0) #define y(a) ((a) select 1) #define z(a) ((a) select 2) // // И еще, один момент выяснился, worldToScreen может возвращать пустой массив, если проекция невозможна. Так что добавил проверку: // funcGetSightOnLandscapePosition = { private ["_boneHeadName", "_headPosition", "_weaponDirection", "_screenPosition"]; _boneHeadName = getText (configFile >> "CfgVehicles" >> typeof player >> "boneHead"); _headPosition = player modelToWorld (player selectionPosition _boneHeadName); _weaponDirection = player weaponDirection "throw"; _screenPosition = worldToScreen [ x(_headPosition) + x(_weaponDirection) * 10000, y(_headPosition) + y(_weaponDirection) * 10000, z(_headPosition) + z(_weaponDirection) * 10000 ]; if (count _screenPosition == 2) then { screenToWorld _screenPosition } else { [1e+39, 1e+39] // 1e+39 дает в арме 1.#INF, то есть это позиция в бесконечность }; }; // // проверочная функа: я поставил в игре объект "Сфера 10 см", // обозовал его как eo__objTarget // funcSetObjToSight = { _this setpos (call funcGetSightOnLandscapePosition) }; waitUntil { eo__objTarget call funcSetObjToSight; false; };
#4 OFFLINE
Posted 06 September 2015 - 18:50
Так нужен то
и всё что ль?#5 OFFLINE
Posted 06 September 2015 - 18:55
#6 OFFLINE
Posted 06 September 2015 - 19:00
vlad333000, ну может он мазохист?!
а так да, нам ещё препод говорил, что рандома нет, что в зависимости от каких-то там параметров, система просто выбирает число.
Я так понимаю, ему число нужно от чего-то?
например от кол-ва патронов в магазине?
только тут всё касательно координат мышки.
#7 OFFLINE
Posted 06 September 2015 - 19:16
Edited by vlad333000, 06 September 2015 - 19:16.
#8 OFFLINE
Posted 06 September 2015 - 19:16
Как вариант построить отталкиваясь от такого примера
dayz_objectUID = { private["_position","_dir","_key","_object"]; _object = _this; _position = getPosATL _object; _dir = direction _object; _key = [_dir,_position] call dayz_objectUID2; _key }; dayz_objectUID2 = { private["_position","_dir","_key"]; _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } forEach _position; _key = _key + str(round(_dir)); _key };
на выходе даёт рандомный ID
Или как вариант попытать подобный подход
_rndSeed = (random 1) * (random 1) * (random 1); _rnd = 100 * _rndSeed;
Edited by SteelRat, 06 September 2015 - 19:17.
#9 OFFLINE
Posted 07 September 2015 - 03:00
Sledo, позицию мышки узнать в Арме нельзя (Только подключать расширения)
Но зачем вам потребовалось действительно случайное число в ИГРЕ?
Да ладно вам сразу штампы кидать, уполоться, игре и т.д. Я не привык делать что то на половину, я не привык делать что то лишь бы работало - я привык делать так, что бы это работало и всегда (по возможности конечно)). А вот тесты с показывают что этот рандом какой то довольно странный, и нет нет, но показывает одинаковые результаты, особенно на малой выборке, что ни есть хорошо. Что бы исключить подобное, как вы и верно выразились, мне нужно начальное число, от которого и будет вестись расчет рандома. Которое и будет по настоящему случайным. Что это - координаты мышки, частота процессора, время, положение звезд, скорость метеорита или температура солнца, мне все равно.
Как вариант построить отталкиваясь от такого примера
...
на выходе даёт рандомный ID
Или как вариант попытать подобный подход
Спс, первый вариант похож на правду, надо потестить, а вот второй сомнителен.
Я не совсем понял вопрос, но когда-то давно, на АрмА2, я пилил миссию с командованием, где команды отдавались через кнопки и всё такое.
И вот так искался центр экрана\куда смотрит мышка, если мне не изменяет память.
Хотя скорее всего, скинул не то, что надо.
Надо ведь позицию мышки вычислить?
- да, именно то что надо.
#10 OFFLINE
Posted 08 September 2015 - 18:21
SteelRat сказал(а) 06 Сен 2015 - 18:16:
Как вариант построить отталкиваясь от такого примера
...
на выходе даёт рандомный ID
Или как вариант попытать подобный подход
Спс, первый вариант похож на правду, надо потестить, а вот второй сомнителен.
_rndSeed = (random 1) * (random 1) * (random 1);
Какова вероятность получить одинаковое значение переменной
_rndSeed
?
ЗЫ
Даже стало интересно, на ночь заряжу скриптик на jave, интересно до утра удастся получить равной значение)?
#11 OFFLINE
Posted 08 September 2015 - 18:28
ЗЫ_2
Полный хардкор)
_iterations = 1000; _rnd = 1; for "_i" from 1 to _iterations do { _rnd = _rnd * (random 1); };