徘徊:在网格上行走

当我提出带有开放性项目的游戏时,尤其是角色扮演游戏,我倾向于着手制作游戏。 我的想法经常归结为在基于网格的世界中徘徊的经典头像。 我想在响应中重新创建它,并提出了一个基准引擎供我在以后的项目中使用和改进。

网格组件

创建网格时,网格所接收的唯一道具是宽度,用于确定正方形的大小。 可以将其更新为动态的,也可以影响板上的各个正方形的大小。

   

网格组件将执行的功能主要分为三组。

首先,事件监听器:

  componentDidMount =()=> { 
window.addEventListener(“ keydown”,this.handleKeyPress)
} componentWillUnmount =()=> {
window.removeEventListener(“ keydown”,this.handleKeyPress)
}

在安装组件时,我们要确保我们正在监听窗口中的所有按键。 这样,当板子在屏幕上时,用户将始终能够移动其角色。

比如说,当我们卸载组件时,如果我们去了一个聚会屏幕来检查我们的角色统计数据,我们要确保我们删除了事件监听器。 如果不这样做,那么这将是一个单页应用程序,我们将有两个事件侦听器,每按一次将移动两个空格。

接下来,我们的运动:

  handleKeyPress =(e)=> { 
切换(e。哪个){
案例87:
this.move(0,1);
打破;
案例68:
this.move(1,1);
打破;
案例83:
this.move(0,-1);
打破;
案例65:
this.move(1,-1);
打破;
}
}

switch语句-我选择影响运动的键是WASD。

 移动=(目录更改)=> { 
让坐标= this.state.selectedSquare
如果((coords [dir] + change)> -1 &&
(坐标[dir] +更改)<this.props.gridWidth){
坐标[dir] + =改变
}
this.setState({
selectedSquare:坐标
})
}

我们的移动功能沿一个方向(0表示上/下,1表示左/右)并沿该方向进行更改-增大或减小一个。 它检查以确保它没有突破板子的边缘,然后设置状态。

这将我们带到广场:

 状态= { 
selectedSquare:[0,0]
}

网格从原点开始将所选正方形保持在其状态。

  makeSquares =()=> { 
const tile = [“红色”,“蓝色”,“黄色”,“紫色”,“绿色”]
让arr = []
让密钥= 0
for(让i = 0; i <(this.props.gridWidth); i ++){
for(let j = 0; j <this.props.gridWidth; j ++){
arr.push(<平方
x = {j}
y = {i}
键= {键++}
tile = {tile [(Math.floor(Math.random()* tile.length))]}
selectedSquare = {this.state.selectedSquare} />)
}
}
返回arr
}

这是makeSquares函数。 我们将在render函数中将其称为创建正方形。

我们有一系列可能的图块-在这种情况下为不同的颜色-这将为每个图块提供一个类,从而导致不同的样式。 然后,我们遍历整个网格,并让每个正方形都知道它是哪个正方形以及哪个正方形处于活动状态。

我们在渲染函数中称其为:

  render(){ 
返回(
<div className =“网格框”
style = {{“ width”:this.props.gridWidth * 150,“ height”:this.props.gridWidth * 150}}>
{this.makeSquares()}


}

我们创建一个150像素正方形的框,其宽度和高度是在创建网格时指定的。 然后由在makeSquares函数中创建的正方形填充。

平方分量

我们的广场很简单:

 状态= { 
瓷砖:this.props.tile
} render(){
返回(
<div
className = {this.props.selectedSquare [0] === this.props.x &&
this.props.selectedSquare [1] === this.props.y吗?
`selected square $ {this.state.tile}`:`square $ {this.state.tile}`}>


}

看起来有点丑陋,但是非常简单。 首先,我们将原始图块名称存储为状态,因为我们的makeSquares函数每次都会提供一种新类型。

然后,我们根据selectedSquare道具进行检查,以查看是否选择了该特定正方形。 如果是这样,我们将更新其类以添加其他样式。

造型和包装

这就是javascript!

剩下的只是对正方形进行样式化。 该代码可以在GitHub存储库中找到

显然,这里有很多优化的机会-每当角色移动时,我们就会嵌套循环。 幸运的是,React通过仅更新变化的正方形为我们节省了一点,但这仍然是很多不必要的处理能力。

我期待着继续进行这个项目,并使其针对进行游戏的简单基准进行优化!

More Interesting

熨斗模块3的最终项目— Hanafuda

埃迪头| 铁娘子乐队Teremos uma HQ sobre o mascote吗?

探索填字游戏的整个新世界

垂死之光:Revisitando

车站F(巴黎)的Everdreamsoft的详细游戏设计

无聊的游戏!

《星际争霸2》新手指南!

地平线:零黎明

谈论英雄进化,如何传送到小黄人

阿修罗之怒– NOT_VIDEO –中

与Jogos对抗。

(NieR :)自动机时代的爱情

最终作品集–重温趣味

虚拟现实游戏。 开发经验

蓝鲸自杀游戏? 为什么对孩子们如此疯狂?