-
Notifications
You must be signed in to change notification settings - Fork 63
/
Copy pathApp.tsx
96 lines (79 loc) · 2.14 KB
/
App.tsx
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import React, { useEffect, useRef, useState } from 'react';
import './App.css';
function App() {
const [, updateState] = useState({});
const ballX = useRef(500);
const ballY = useRef(500);
const paddleVelocity = useRef(8);
const velocityX = useRef(2);
const velocityY = useRef(2);
const leftPaddleX = useRef(50);
const rightPaddleX = useRef(850);
const leftPaddleY = useRef(200);
const rightPaddleY = useRef(200);
const render = (timestamp: any) =>
{
ballX.current += velocityX.current;
ballY.current += velocityY.current;
if(ballY.current + 50 >= window.innerHeight || ballY.current <= 0)
{
velocityY.current *= -1;
}
if(ballX.current + 50 >= rightPaddleX.current)
{
if(ballY.current > rightPaddleY.current && ballY.current+50 < rightPaddleY.current+400)
{
velocityX.current = -3;
}
}
if(ballX.current <= leftPaddleX.current + 50)
{
if(ballY.current > leftPaddleY.current && ballY.current+50 < leftPaddleY.current+400)
{
velocityX.current = 3;
}
}
updateState({});
window.requestAnimationFrame(render);
}
const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) =>
{
if(event.key == "w")
{
leftPaddleY.current -= paddleVelocity.current;
}
if(event.key == 's')
{
leftPaddleY.current += paddleVelocity.current;
}
if(event.key == "ArrowUp")
{
rightPaddleY.current -= paddleVelocity.current;
}
if(event.key == "ArrowDown")
{
rightPaddleY.current += paddleVelocity.current;
}
}
useEffect(() => {
document.getElementById("App")?.focus();
window.requestAnimationFrame(render);
}, [])
return (
<div tabIndex={1} onKeyDown={handleKeyDown} id="App">
<div style={{
top: leftPaddleY.current,
left: leftPaddleX.current
}} className="Paddle"></div>
<div style={{
top: ballY.current,
left: ballX.current
}} className="Ball"></div>
<div style={{
top: rightPaddleY.current,
left: rightPaddleX.current
}} className="Paddle"></div>
</div>
);
}
export default App;