Форум программистов, компьютерный форум, киберфорум
Игровые движки
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Mr_den
11 / 9 / 2
Регистрация: 06.09.2022
Сообщений: 390

Godot 4.2 Перемещение картинок по ячейкам кликом

15.01.2026, 11:45. Показов 418. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кликом должна ячейка с картинкой перемещаться из одной группы ячеек в другую.
В общем мне ИИ сделал какой то паршивый код, а в нём выводятся только массивы пустых ячеек
Где ИИ ошибся ? Не ввёл в массив ячейку с картинкой да ?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
extends Node2D
# Словарь для хранения текстур
var textures = {
    "empty": preload("res://IMG/m1.png"),
    "image1": preload("res://IMG/cat.png"),
    "image2": preload("res://IMG/dog.png")
}
 
# Массивы для групп ячеек
var group1 = []
var group2 = []
 
# Количество ячеек в каждой группе
var group_size = 5
 
func _ready():
    # Инициализация групп ячеек
    group1 = create_group("Group1", Vector2(100, 100))
    group2 = create_group("Group2", Vector2(400, 100))
 
func create_group(name, position):
    var group = []
    for i in range(group_size):
        var cell = Sprite2D.new()
        cell.name = name + "_Cell" + str(i)
        cell.texture = textures["empty"]
        cell.position = position + Vector2(i * 100, 0)
        cell.connect("input_event", _on_cell_input_event)
        add_child(cell)
        group.append(cell)
    return group
 
func _on_cell_input_event(viewport, event, shape_idx):
    if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
        var cell = viewport.get_node(event.node_path)
        # Проверяем, есть ли картинка в ячейке
        if cell.texture != textures["empty"]:
            # Определяем, в какой группе находится ячейка
            var source_group = group1 if cell in group1 else group2
            var target_group = group2 if source_group == group1 else group1
            # Перемещаем текстуру в первую пустую ячейку в другой группе
            for target_cell in target_group:
                if target_cell.texture == textures["empty"]:
                    target_cell.texture = cell.texture
                    cell.texture = textures["empty"]
                    break
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2026, 11:45
Ответы с готовыми решениями:

Godot - звуки перемещения
Доброго времени суток всем участникам форума! Хочу узнать ваше мнение. Во время разработки игры на...

GODOT 4.2 Движение по клику мыши в 3D
В общем есть проблема как безопасно это сделать При клике - машину разворачивает на скоко то...

Godot Engine | Build Error "установите пакет разработчика (пакет SDK или пакет нацеливания)"
Здравствуйте, :senor: У меня проблема когда я пытаюсь нажать на то мне выдает кто...

2
 Аватар для Mr_den
11 / 9 / 2
Регистрация: 06.09.2022
Сообщений: 390
21.01.2026, 08:13  [ТС]
В общем на 5 й раз всё получилось так как хотел БЕЗ использования CONTAINER

сам проект Click_move.zip

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
extends Node2D
 
# Словарь для текстур
var textures = {
    "m1": load("res://m1.png"),
    "dog": load("res://dog.png"),
    "cat": load("res://cat.png")
}
 
var group1_slots = []
var group2_slots = []
var group1_data = []
var group2_data = []
var slot_size = Vector2(50, 50)
var selected_slot: TextureButton = null
 
func _ready():
    # Создаем группы
    create_slot_group(group1_slots, group1_data, Vector2(50, 50))
    create_slot_group(group2_slots, group2_data, Vector2(50, 200))
 
    # Заполняем первую группу
    group1_slots[0].texture_normal = textures["dog"]
    group1_data[0] = textures["dog"]
    group1_slots[1].texture_normal = textures["cat"]
    group1_data[1] = textures["cat"]
 
func create_slot_group(slots_array, data_array, position):
    for i in range(5):
        var slot = TextureButton.new()
        slot.custom_minimum_size = slot_size
        slot.texture_normal = textures["m1"]
        slot.position = position + Vector2(i * 100, 0)
        slot.connect("pressed", Callable(_on_slot_pressed).bind(slot, slots_array, data_array))
        add_child(slot)
        slots_array.append(slot)
        data_array.append(textures["m1"])
 
func _on_slot_pressed(slot, slots, data):
    if selected_slot == null:
        # Выбираем слот с cat или dog
        if slot.texture_normal == textures["dog"] or slot.texture_normal == textures["cat"]:
            selected_slot = slot
            slot.modulate = Color(1.0, 0.0, 1.0)
    else:
        # Меняем местами текстуры слотов
        var selected_texture = selected_slot.texture_normal
 
        var temp_texture = slot.texture_normal
        slot.texture_normal = selected_texture
        selected_slot.texture_normal = temp_texture
        selected_slot.modulate = Color(1, 1, 1)
        selected_slot = null
0
 Аватар для Mr_den
11 / 9 / 2
Регистрация: 06.09.2022
Сообщений: 390
18.02.2026, 23:08  [ТС]
Короче я это всё переделал и нормально доделал вместо массивов использовал только словари. https://www.youtube.com/watch?v=7OEVrs40hE4
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2026, 23:08
Помогаю со студенческими работами здесь

Силует след за персонажем в GODOT
При перетаскивании с помощью мыши на сцене есть след Trail (Particles2D) силует за персонажем. А...

Правда ли, что Unreal - для профессионалов, Unity - для масс, а Godot - для самых отсталых?
Кто знает?

Использование мыши для прицела в 3д игре на GODOT
Как можно получить 3д координаты мыши? Или как ещё можно использовать мышь, для прицеливания в...

GODOT AudioStreamPlayer html5
Добрый день! Возникла проблема с проигрыванием звука в экспортированном экземпляре игры. Звук...

O3DE или Godot Engine?
Мне предстоит разрабатывать систему 3D-визуализации, отображающую мир (открытое пространство с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru