Лучший подход для игры с перетаскиванием — как рассчитать положение поля в выбранном ответе

#javascript #reactjs #typescript

Вопрос:

Если название двусмысленно, я объясню это лучше сейчас.

фото

Второй ряд изображений можно перетаскивать. Допустим, я перетащу эти изображения на их место — но как я могу знать, что это произошло?

Я использую react-перетаскиваемый для своих перетаскиваемых элементов.

Я думал получить координаты каждого из дивов «Drop here» и просто выполнить некоторые вычисления (например, если 75% ширины и 75% высоты изображения находятся над div, это выбранный ответ).

Это было бы нормально, я думаю, но возникнет еще одна проблема-что, если размер окна изменится?

Это моя составляющая игры:

 import React, { useEffect } from 'react';
import GameDetails from '../GameComponents/GameDetails';
import GameImage from '../GameComponents/GameImage';
import DraggableGameAnswers from './DraggableGameAnswers';

import './css/DraggableGameStart.css';
import DraggableGameSlots from './DraggableGameSlots';

function DraggableGameStart() {
    const draggableGame = React.createRef<HTMLDivElement>();
    
    useEffect(() => (
        console.log(draggableGame.current?.getBoundingClientRect())
    ));
    
    return (
        <div className="draggable-game-content">
            <div className="draggable-game">
                <GameDetails
                    info="test"
                    question="test"
                />
                <GameImage
                    images={[{ imgSrc: './Untitled.png', imgAlt: 'test' },
                    { imgSrc: './Untitled.png', imgAlt: 'test' },
                    { imgSrc: './Untitled.png', imgAlt: 'test' },
                    { imgSrc: './Untitled.png', imgAlt: 'test' }]}
                    className="draggable-game-image"
                />
                <div className="draggable-game-slots-and-answers">
                    <DraggableGameSlots
                        numberOfSlots={4}
                        className="draggable-game-slot-custom4"
                        passedRef={draggableGame}
                    />
                    <DraggableGameAnswers gameSlots={draggableGame}/>
                </div>
            </div>
        </div>
    );
}

export default DraggableGameStart;
 

Dragglegameanswers содержит второй ряд изображений, а DRAGGLEGAMESLOTS содержит первый ряд изображений и раздел «Падение сюда».

Моя идея состояла в том, чтобы взять ряд игровых слотов, используя эту ссылку на draggableGame, передать ее участникам DraggableGameAnswers, а затем у меня будет доступ к слотам.

Возьмите координаты слотов, произведите с ними некоторые вычисления и решите, какой ответ будет выбран с помощью этого изображения.

Проблема в том, что если размер окна изменится, игра сломается, потому что ссылка содержит старые координаты — так что это отбрасывает мою идею.

Теперь мой вопрос заключается в следующем:

действительно ли это лучший подход для создания этой игры с перетаскиванием? Мне это кажется довольно примитивным. Если да, то должен ли я реализовать пользовательский крюк, который отправляет новые координаты каждый раз, когда размер окна изменяется?

Спасибо.

Комментарии:

1. Когда размер окна будет изменен, вы повторно переместите элементы. таким образом, производится новый расчет