Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как обойти ограничение валюты в Godot

Данил Кокаровцев Ученик (100), открыт 1 неделю назад
Проблема в том, что я делаю игру и на 64 бит и 32 бит устройства, а у 32 бит максимальное число это 2^31-1 . Как мне сделать так чтобы у меня была валюта как в tycoon играх? Например: 32.439 к, 45,768 М, 76,678 Sx , и т. д. Чтобы при покупке чего либо деньги правильно вычитались , а при заработке прибавлялись. Godot engine 4.2.Я использую GDscript
2 ответа
Максим Искусственный Интеллект (202147) 1 неделю назад
Зачем в наше время 32битные устройства? На каком ведре ты играть собрался?
666 Профи (589) 1 неделю назад
Понимаю твою проблему! Ограничение 2^31-1 для чисел с плавающей запятой в 32-битных системах действительно может быть проблемой для игр с большими числами, как в tycoon играх.
Вот несколько способов обойти это ограничение в Godot 4.2 с использованием GDScript:
Использование строк:
Хранение: Храни валюту в виде строки (например, "32.439 к").
Преобразование: Преобразуй строку в число для вычислений, а затем обратно в строку для отображения.
    var currency_string = "32.439 к" 
var currency_value = parse_float(currency_string.replace(" к", ""))

# Вычисления
currency_value += 10000

# Преобразование обратно в строку
currency_string = str(currency_value) + " к"
Использование библиотек:
Big Integer: Используй библиотеку для работы с большими целыми числами, например, Big Integer из https://github.com/godotengine/godot-gdscript-bigint .
Преобразование: Преобразуй числа в Big Integer для вычислений, а затем обратно в обычные числа для отображения.
    # Используй библиотеку Big Integer 
var currency_value = Bigint.new(32439)
currency_value += Bigint.new(10000)

# Преобразование обратно в число
var currency_string = str(currency_value.to_int()) + " к"
Использование массивов:
Хранение: Раздели валюту на несколько чисел, которые хранятся в массиве. Например, [32, 439, 0].
Вычисления: Выполняй вычисления по разрядам.
    var currency_array = [32, 439, 0] 

# Прибавление
currency_array[1] += 10000
if currency_array[1] >= 1000:
currency_array[0] += 1
currency_array[1] -= 1000

# Преобразование в строку
var currency_string = str(currency_array[0]) + "." + str(currency_array[1]) + " к"
Выбор метода:
Строки: Простой и понятный способ, но может быть медленнее для больших чисел.
Библиотеки: Более эффективный способ, но требует установки дополнительных библиотек.
Массивы: Более сложный способ, но может быть более эффективным, чем строки.
Дополнительные советы:
Отображение: Используй функции форматирования для отображения больших чисел в удобном формате (например, "32.439 к", "45.768 М", "76.678 Sx").
Оптимизация: Оптимизируй код для работы с большими числами, чтобы избежать снижения производительности.
Важно:
Тестирование: Тщательно тестируй код, чтобы убедиться, что он работает правильно с большими числами.
Документация: Добавь комментарии в код, чтобы было понятно, как он работает.
Похожие вопросы