Game Maker - создание игр | HellRoom Games
Май 15, 2025, 02:49:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Неправильная работа кода  (Прочитано 1897 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ярик
Активный участник
*****

Репутация: 21
Offline Offline

Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Сообщений: 396



« : Октябрь 01, 2022, 21:33:18 »

Проблема на GM8

Вкратце: Мне нужно было переводить числа из 10-ричной в 16-ричную систему. Найти уже готового кода не смог, поэтому пришлось самому разбираться и в конечном счёте написать скрипт:

Скрипт работал правильно, пока я не попытался перевести 16711680(FF0000) в 16-ричную систему.
Заместо правильного вывода "FF0000" я получил "1F0000"

Заранее спасибо

p.s. - В принципе вообще любые буквы на самом первом месте отображаются единицей.
То есть, заместо получения FF0000 я получу 1F0000
EF2F20 = 1F2F20 и тд

P.S2 БЛИН - Ещё проверив, я выяснил, что код работает правильно, он просто первое число не переводит в 16-ричный формат.
То есть, заместо получения FF0000 я получаю 15F0000, хах
« Последнее редактирование: Октябрь 01, 2022, 22:17:44 от ярик » Записан

А че как 2 числа сравнить то это быстрее?
Вот так >? Вот так < ? Или лучше вот так sign(0)
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Offline Offline

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #1 : Октябрь 01, 2022, 22:21:07 »

Может ты цикл запустил не от 0, а от 1 или вроде того.
Записан
ярик
Активный участник
*****

Репутация: 21
Offline Offline

Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Сообщений: 396



« Ответ #2 : Октябрь 01, 2022, 23:17:23 »

Спустя миллионы и миллионы лет проверки каждой строчки кода и использования метода проб и ошибок, я понял, что цикл закрывался, когда значение переменной count доходило меньше 16 в "until (count <= 16)" и поэтому из-за закрытия цикла, код не успевал преобразовать "15" в "F" и поэтому заместо "F" к исходному шестнадцатиричному числу добавлялась число 15, и поэтому результатом было "15F0000" :/
Можно считать это в какой-то степени жизой под категорией "Запустил не с 0, а с 1"

Смешанные чувства того, что я обосрался, потратив кучу времени на исправления проблемы, и при этом исправил эту же самую проблему  errm

Если кому нужно, то вот код:

Код:
var count, str;

    count = argument0;
    str = "";
    
        do
        {
            str += string_copy("0123456789ABCDEF", count - (count div 16 * 16) + 1, 1);
            count = (count div 16);
        
        } until (count <= 1);

return str;
// Качество кода не гарантирую
« Последнее редактирование: Октябрь 02, 2022, 01:23:29 от Dmi7ry » Записан

А че как 2 числа сравнить то это быстрее?
Вот так >? Вот так < ? Или лучше вот так sign(0)
Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #3 : Октябрь 02, 2022, 01:23:56 »

Код:
/// convert_dec_to_hex(value, [digits])

/******************************************************************************
Examples:

convert_dec_to_hex(123456, 8)  -> "0001E240"
convert_dec_to_hex($ff00ff, 8) -> "00FF00FF"
******************************************************************************/

var str = "0123456789ABCDEF";

var dec = abs(argument[0]);
var hex = "";

do
{
    var n = dec & $f;
    hex = string_char_at(str, n + 1) + hex;
    dec = dec >> 4;
}
until (dec == 0);

if argument_count > 1
{
    while (string_length(hex) < argument[1])
    {
        hex = "0" + hex;
    }
}

return hex;
Записан

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.067 секунд. Запросов: 28.