Mam system XP i mam procent tego, jak daleko ktoś jest do awansowania, i stworzyłem prostokąt. ale nie wiem, jak zmienić szerokość w zależności od procentu ... łatwo mam procent, ale potrzebuję sposobu, aby zakodować ten procent 0 = punkt początkowy 259, a 100 procent to 630
const rectX = 259;
const rectY = 182;
const rectWidth = 630;
const rectHeight = 38;
const cornerRadius = 20;
ctx.lineJoin = 'round';
ctx.lineWidth = cornerRadius;
ctx.strokeStyle = '#FF1700';
ctx.fillStyle = '#FF1700';
ctx.strokeRect(rectX + (cornerRadius / 2), rectY + (cornerRadius / 2), rectWidth - cornerRadius, rectHeight - cornerRadius);
ctx.fillRect(rectX + (cornerRadius / 2), rectY + (cornerRadius / 2), rectWidth - cornerRadius, rectHeight - cornerRadius);
2 odpowiedzi
Wystarczy pomnożyć szerokość prostokąta przez percentage / 100
. Oto, jak by to wyglądało w przypadku Twojego przykładowego kodu.
const rectX = 259;
const rectY = 182;
const rectWidth = 630;
const rectHeight = 38;
const cornerRadius = 20;
const scale = Math.min(1, Math.max(0, percentage / 100));
ctx.lineJoin = 'round';
ctx.lineWidth = cornerRadius;
ctx.strokeStyle = '#FF1700';
ctx.fillStyle = '#FF1700';
ctx.strokeRect(rectX + (cornerRadius / 2), rectY + (cornerRadius / 2), rectWidth - cornerRadius, rectHeight - cornerRadius);
ctx.fillRect(rectX + (cornerRadius / 2), rectY + (cornerRadius / 2), rectWidth * scale - cornerRadius , rectHeight - cornerRadius);
Gdy wartość procentowa wynosi 100%
, skala wyniesie 1
, a szerokość prostokąta da w wyniku 630
. Gdy wartość procentowa wynosi 50%
, skala wyniesie 0.5
, a szerokość 315
i tak dalej.
Więc z tego, co rozumiem, masz dwie liczby, zaczynające się na 259 i kończące na 630, a 50% oznaczałoby punkt środkowy między tymi dwoma liczbami, 100% oznaczałoby 630, a 0% oznaczałoby 259, czy to prawda?
Jeśli tak jest, potrzebujesz czegoś, co nazywa się LERP (interpolacja liniowa),
const lerp = (start: number, end: number, percentage: number): number => {
return (((end - start) * percentage) / 100) + start;
};
LUB jeśli chcesz javascript, po prostu usuń definicje typów,
Sposób, w jaki to działa, polega na normalizacji twojego startu do 0,
Teraz korzystanie z tego jest dość proste: console.log(lerp(259, 630, 50))
Która zwraca: 444.5
Podobne pytania
Nowe pytania
node.js
Node.js to oparte na zdarzeniach, nieblokujące, asynchroniczne środowisko wykonawcze we / wy, które korzysta z silnika JavaScript V8 firmy Google i biblioteki libuv. Służy do tworzenia aplikacji, które w dużym stopniu wykorzystują możliwość uruchamiania JavaScript zarówno po stronie klienta, jak i po stronie serwera, a zatem korzystają z możliwości ponownego wykorzystania kodu i braku przełączania kontekstów.