Форум Pawn.Wiki - Воплоти мечту в реальность!: Создать объект - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Создать объект куб Оценка: -----

#1
Пользователь онлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию
Если кому не лень или может есть уже.. Нужен объект - куб, как объект 19789, только с идеальным центром координат. Также важно, чтоб при вращении на 360 по каждой из оси, куб не ломался и не выворачивался как-то неправильно. Все эти проблемы есть у объекта 19789 :facepalm:

Хочу сделать мини игру (для форума), но нет подходящего объекта. Если кто возьмётся, можете прислать готовые txd и dff сюда или мне в личку Telegram

Сообщение отредактировал M I S T E V: 15 апреля 2025 - 17:36

0

#2
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
А чего не сделаешь сборный куб из других объектов через скрепление?
0

#3
Пользователь онлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (16 апреля 2025 - 18:51) писал:

А чего не сделаешь сборный куб из других объектов через скрепление?

Это касается той идеи, которую я тебе пару лет назад рассказывал, про кубик-***. Решил доделать, но из-за смещенной оси, по x и y неправильно вращается объект, как бы по окружности, а не на месте, как по z координате. Пробовал изначально развернуть куб на 90 по x или y, но тогда при следующем вращении, куб выворачивается по двум осям сразу :dash:

Я бы и сам сделал этот объект, но сейчас нет времени качать все программы и ещё всё тестировать :wpml_unsure:
0

#4
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
const Float:RUBIKS_CUBE_TILE_SIZE = 0.20; // Можно сделать, например, "0.201" или "0.202", чтоб сделать минимальный зазор между ячейками для их визуального отделения

CMD:rubik(playerid)
{
    new Float:x;
    new Float:y;
    new Float:z;
    GetPlayerPos(playerid, x, y, z);
    CreateRubikCube(x, y, z);
    return 1;
}



stock CreateRubikCube(Float:origin_x, Float:origin_y, Float:origin_z)
{
    // Передняя грань — белая
    const white = 0xFFFFFFFF;
    CreateRubikFace(white,
        origin_x, origin_y, origin_z,
        0.0, 0.0, 0.0,
        -RUBIKS_CUBE_TILE_SIZE, 0.0, 0.0);

    // Задняя грань — жёлтая
    const yellow = 0xFFFFFF00;
    CreateRubikFace(yellow,
        origin_x, origin_y, origin_z,
        0.0, 0.0, 0.0,
        RUBIKS_CUBE_TILE_SIZE, 0.0, 0.0);

    // Верхняя грань — зелёная
    const red = 0xFFFF0000;
    CreateRubikFace(green,
        origin_x, origin_y, origin_z,
        0.0, 90.0, 0.0,
        0.0, 0.0, -RUBIKS_CUBE_TILE_SIZE);

    // Нижняя грань — синяя
    const orange = 0xFFFF8000;
    CreateRubikFace(blue,
        origin_x, origin_y, origin_z,
        0.0, 90.0, 0.0,
        0.0, 0.0, RUBIKS_CUBE_TILE_SIZE);

    // Правая грань — красная
    const blue = 0xFF0000FF;
    CreateRubikFace(red,
        origin_x, origin_y, origin_z,
        0.0, 0.0, 90.0,
        0.0, -RUBIKS_CUBE_TILE_SIZE, 0.0);

    // Левая грань — оранжевая
    const green = 0xFF00FF00;
    CreateRubikFace(orange,
        origin_x, origin_y, origin_z,
        0.0, 0.0, 90.0,
        0.0, RUBIKS_CUBE_TILE_SIZE, 0.0); 
}

stock CreateRubikFace(const color, Float:origin_x, Float:origin_y, Float:origin_z,
                        Float:rot_x, Float:rot_y, Float:rot_z,
                        Float:offset_x, Float:offset_y, Float:offset_z)
{
    new Float:x;
    new Float:y;
    new Float:z;
    new object_id;

    for(new row, col; row < 3; row++)
    {
        for(col = 0; col < 3; col++)
        {
            if(offset_x != 0.0)
            {
                x = origin_x + offset_x*1.5;
                y = origin_y + (col - 1) * RUBIKS_CUBE_TILE_SIZE + offset_y;
                z = origin_z + (row - 1) * RUBIKS_CUBE_TILE_SIZE + offset_z;
            }
            else if(offset_y != 0.0)
            {
                x = origin_x + (col - 1) * RUBIKS_CUBE_TILE_SIZE + offset_x;
                y = origin_y + offset_y*1.5;
                z = origin_z + (row - 1) * RUBIKS_CUBE_TILE_SIZE + offset_z;
            }
            else if(offset_z != 0.0)
            {
                x = origin_x + (col - 1) * RUBIKS_CUBE_TILE_SIZE + offset_x;
                y = origin_y + (row - 1) * RUBIKS_CUBE_TILE_SIZE + offset_y;
                z = origin_z + offset_z*1.5; 
            }

            object_id = CreateDynamicObject(19478, x, y, z, rot_x, rot_y, rot_z, 0, 0);
            SetDynamicObjectMaterial(object_id, 0, 16150, "ufo_bar", "GEwhite1_64", color);
        }
    }
}


О том, как их удобнее всего поворачивать, чтоб визуально смотрелось норм, я писал тебе в личке, если не изменяет память.
Вкратце: берёшь в руки реальный кубик-рубика и смотришь какие грани связаны между собой. Далее нужно те же грани привязать к одному невидимому объекту внутри кубика. Ну и далее уже поворачивать нужные группы невидимых объектов, а не сами ячейки.
0

#5
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
А, ну и из игры это сейчас вот так выглядит при RUBIKS_CUBE_TILE_SIZE равном "0.202"

Изображение

Сообщение отредактировал DeimoS: 16 апреля 2025 - 21:36

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика