返回
用React,Redux和SVG开发游戏--3
前端
2024-01-15 08:04:40
本系列文章将会向您展示如何利用React和Redux控制一堆SVG元素来打造出一款游戏。其中的知识也能被运用到构建其他类型的动画当中,并不局限于游戏。该系列文章中所开发的最终代码可以在此GitHub代码仓库内找到:Ali…
设定场景
在该系列文章的第二部分中,我们已经创建了一个基本的React应用程序,并添加了一些SVG元素。在这一部分,我们将创建一个移动平台,并让它可以在屏幕上移动。
创建平台
首先,创建一个名为Platform.js的新文件。在该文件中,导入必要的库,包括React、ReactDOM、和styled-components。然后,创建一个名为Platform的组件,并将其导出。
import React, { useEffect, useRef } from "react";
import ReactDOM from "react-dom";
import styled from "styled-components";
const Platform = () => {
const platformRef = useRef();
useEffect(() => {
const platform = platformRef.current;
const movePlatform = (e) => {
if (e.key === "ArrowLeft") {
platform.style.left = `${parseInt(platform.style.left) - 10}px`;
} else if (e.key === "ArrowRight") {
platform.style.left = `${parseInt(platform.style.left) + 10}px`;
}
};
document.addEventListener("keydown", movePlatform);
return () => {
document.removeEventListener("keydown", movePlatform);
};
}, []);
return (
<PlatformWrapper ref={platformRef}>
<PlatformShape />
</PlatformWrapper>
);
};
const PlatformWrapper = styled.div`
position: absolute;
left: 50%;
bottom: 0;
transform: translate(-50%, -50%);
`;
const PlatformShape = styled.svg`
width: 100px;
height: 20px;
background-color: #000;
`;
export default Platform;
添加CSS动画
现在,让我们添加一些CSS动画和过渡来让平台移动起来。在项目中的style.css文件中,添加以下代码:
.platform {
animation: move-platform 1s infinite alternate;
}
@keyframes move-platform {
from {
transform: translate(-50%, -50%) scale(1);
}
to {
transform: translate(-50%, -50%) scale(1.1);
}
}
这将使平台在屏幕上左右移动,并同时放大和缩小。
添加键盘控制
接下来,让我们添加键盘控制来控制平台的移动。在Platform.js文件中,在useEffect()钩子中添加以下代码:
const movePlatform = (e) => {
if (e.key === "ArrowLeft") {
platform.style.left = `${parseInt(platform.style.left) - 10}px`;
} else if (e.key === "ArrowRight") {
platform.style.left = `${parseInt(platform.style.left) + 10}px`;
}
};
这将使平台在按下左右箭头键时左右移动。
运行应用程序
现在,您可以运行应用程序并查看平台在屏幕上移动。要运行应用程序,请在终端中运行以下命令:
npm start
一旦应用程序运行起来,您就可以使用左右箭头键来控制平台的移动。
结论
在这一部分中,您学习了如何使用React和Redux构建一个基于SVG元素的移动平台。您还了解了如何使用CSS动画和过渡来让平台移动起来,以及如何使用键盘来控制角色。在下一部分中,我们将继续完善这个游戏,并添加一些敌人和障碍物。