官网: Phaser.js
在终端中使用 npm 命令安装 Phaser.js:
npm install phaser
在 HTML 文件中创建一个 canvas 元素并设置其宽高。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Phaser Snake Gametitle>
<style>
canvas {
border: 2px solid #000;
}
style>
head>
<body>
<canvas id="game-canvas" width="480" height="320">canvas>
body>
html>
创建一个 JavaScript 文件,编写游戏代码。以下是基本的游戏结构:
// 设置游戏配置
var config = {
type: Phaser.AUTO,
width: 480,
height: 320,
physics: {
default: 'arcade',
arcade: {
gravity: { y: 0 },
debug: false
}
},
scene: {
preload: preload,
create: create,
update: update
}
};
var game = new Phaser.Game(config);
// 加载游戏资源
function preload() {
// 加载图片和声音资源
}
// 创建游戏元素
function create() {
// 创建贪吃蛇和食物
// 添加键盘监听事件
}
// 游戏更新循环
function update() {
// 更新贪吃蛇的位置
// 判断是否吃到食物
// 判断是否碰到边界或自己的身体
}
在 preload 函数中加载游戏资源,如图片和声音:
function preload() {
// 加载贪吃蛇头、身体、食物的图片资源
this.load.image('snake_head', 'assets/snake_head.png');
this.load.image('snake_body', 'assets/snake_body.png');
this.load.image('food', 'assets/food.png');
}
在 create 函数中创建贪吃蛇和食物,并添加键盘监听事件:
function create() {
// 创建贪吃蛇和食物
var snake = this.physics.add.group();
snake.create(240, 160, 'snake_head').setOrigin(0.5);
snake.create(224, 160, 'snake_body').setOrigin(0.5);
snake.create(208, 160, 'snake_body').setOrigin(0.5);
snake.create(192, 160, 'snake_body').setOrigin(0.5);
snake.create(176, 160, 'snake_body').setOrigin(0.5);
var food = this.physics.add.image(0, 0, 'food').setOrigin(0.5);
// 添加键盘监听事件
this.input.keyboard.on('keydown_UP', function () {
// 贪吃蛇向上移动
});
this.input.keyboard.on('keydown_DOWN', function () {
// 贪吃蛇向下移动
});
this.input.keyboard.on('keydown_LEFT', function () {
// 贪吃蛇向左移动
});
this.input.keyboard.on('keydown_RIGHT', function () {
// 贪吃蛇向右移动
});
}
在 update 函数中更新贪吃蛇的位置,判断是否吃到食物,以及是否碰到边界或自己的身体。以下是部分代码示例:
function update() {
// 更新贪吃蛇的位置
var lastBodyPart = snake.getChildren()[snake.getLength() - 1];
var newBodyPart = snake.create(lastBodyPart.x, lastBodyPart.y, 'snake_body').setOrigin(0.5);
snake.shiftPosition(newBodyPart, snake.getChildren()[0].x, snake.getChildren()[0].y, 1);
var head = snake.getChildren()[0];
// 判断是否吃到食物
if (Phaser.Geom.Rectangle.Contains(head.getBounds(), food.x, food.y)) {
// 贪吃蛇吃到食物后加分,并重新生成新的食物
}
// 判断是否碰到边界或自己的身体
if (head.x < 0 || head.x > config.width || head.y < 0 || head.y > config.height || this.physics.overlap(snake, snake)) {
// 游戏结束,显示得分等信息
}
}
在本地启动一个服务器,将 HTML 文件和 JavaScript 文件放在同一目录下,并打开浏览器,访问项目地址即可开始游戏。