Определение ширины строки относительно размера экрана - PullRequest
0 голосов
/ 18 марта 2020

Я реализую игру под названием Typespeed, в которой слова плавают слева направо на экране, и задача игрока - набрать слова, прежде чем они столкнутся с правой стороной экрана.

Я «толкаю» слова вправо через второй массив, который содержит ряд значений в процентах, соответствующих тому, как далеко справа от экрана находится слово слева.

Например,

word = "car"
percentage = 35;

Слово "машина" будет отображаться на 35% с левой стороны экрана.

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

35 + percentage("car") === 100.

Как я могу реализовать такую ​​функцию процента?

Мой код:

import React, { useState } from 'react';
import styled from "styled-components";

const GameScreen = styled.div`
    height: 90vh;
    width: 99vw;
    position: relative;
    background-color: #000;
    display: flex;
    flex-direction: column;
`

const WordRow = styled.span`
    height: 5%;
    width: 100%;
    position: relative;
    color: #98FB98;
    display: flex;
`

const initialiseWords = (): string[] => Array.from(Array(20)).map(v => "word")

const initialisePercentages = (): number[] => Array.from(Array(20)).map(c => 35)

const Game: React.FC = () => {

    const [words, updateWords] = useState<string[]>(initialiseWords());
    const [percentages, updatePercentages] = useState<number[]>(initialisePercentages());

    const renderRow = (percentage: number, word: string) => {
        const style = {
            width: percentage.toString() + "%",
            height: "100%"
        }
        return (
            <WordRow>
                <div style = {style}/>
                {word} 
            </WordRow>
        )
    }

    return (
        <GameScreen>
            {words.map((word, i) => renderRow(percentages[i], word))}
        </GameScreen>
    )
}

export default Game;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...