How to implement a simple parkour game? (detailed code explanation)
The content of this article is to introduce how to implement a simple parkour game? (Detailed code explanation). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
The physics engine used is: Phaser.js
# #Official website address: http://phaser.io/
##I won’t introduce too much about this engine here ( Because I am also a novice, hehe)
Effect display:
Source code (detailed source code image resources visit: https://github.com/ProsperLee)
1. Create a game stage var config = {
type: Phaser.AUTO,
width: 800,
height: 400,
physics: {
default: 'arcade',
arcade: {
gravity: {
y: 300
},
debug: false
}
},
scene: {
preload: preload,
create: create,
update: update
}
};
var game = new Phaser.Game(config); // 创建游戏
2. Load resourcesfunction preload() {
this.load.image('sky', 'assets/sky.png');
this.load.image('ground', 'assets/platform.png');
5 6 this.load.spritesheet('dude', 'assets/dude.png', {
frameWidth: 32,
frameHeight: 48
});
}
3. Create resources on the stage var distanceText; // 路程文本
var distance = 0; // 路程
var platforms; // 地面
var player; // 玩家
var enemy; // 敌人
var enemys; // 敌人们
var enemyTimer; // 敌人计时器
var distanceTimer; // 路程计时器
function create() {
// 添加画布背景
this.add.image(400, 200, 'sky');
// 添加分数文本
distanceText = this.add.text(16, 16, 'Distance: 0m', {
fontSize: '20px',
fill: '#000'
});
// 添加地面
platforms = this.physics.add.staticGroup();
platforms.create(400, 400, 'ground').setScale(3).refreshBody();
// 添加玩家(精灵)
player = this.physics.add.sprite(100, 300, 'dude');
player.setBounce(0); // 设置阻力
player.setCollideWorldBounds(true); // 禁止玩家走出世界
// 敌人
enemys = this.physics.add.group();
enemys.children.iterate(function (child) {
child.setCollideWorldBounds(false);
});
// 动态创建敌人
enemyTimer = setInterval(function () {
enemy = enemys.create(1000, 300, 'dude');
enemy.setTint(getColor());
enemy.anims.play('left', true);
enemy.setVelocityX(Phaser.Math.Between(-300, -100));
}, Phaser.Math.Between(4000, 8000))
distanceTimer = setInterval(function () {
distance += 1;
distanceText.setText('Distance: ' + distance + 'm');
}, 1000)
this.physics.add.collider(player, platforms); //玩家在地面上
this.physics.add.collider(enemys, platforms); //敌人在地面上
this.physics.add.collider(player, enemys, hitBomb, null, this);
}
4. Write keyboard listening events during the creation of the scenevar cursors; // 按键
// 事件
this.anims.create({
key: 'left',
frames: this.anims.generateFrameNumbers('dude', {
start: 0,
end: 3
}),
frameRate: 10,
repeat: -1
});
this.anims.create({
key: 'right',
frames: this.anims.generateFrameNumbers('dude', {
start: 5,
end: 8
}),
frameRate: 10,
repeat: -1
});
this.anims.create({
key: 'turn',
frames: [{
key: 'dude',
frame: 4
}],
frameRate: 20
});
cursors = this.input.keyboard.createCursorKeys();
5. Write the collision function (the result when the player collides with the enemy)
var gameOver = false; // 游戏结束 function hitBomb(player, enemys) { this.physics.pause(); clearInterval(enemyTimer); clearInterval(distanceTimer); player.setTint(0xff0000); gameOver = true; alert('游戏结束,您跑了' + distance + 'm'); }
6. Execution of writing time in update function (It should be noted that this function is executed every frame, 1 frame ≠ 1 second) function update() {
if (cursors.up.isDown && player.body.touching.down) {
player.setVelocityY(-220);
} else {
player.anims.play('right', true);
}
if (gameOver) {
player.setVelocityX(0);
player.anims.play('turn');
return;
}
}
function getColor() {
var color = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"].sort(function(){
return Math.random() - 0.5
}).join("").substr(0,6);
return "0x" + color;
}
The entire source code is provided (it is recommended to clone it yourself on github): var config = {
type: Phaser.AUTO,
width: 800,
height: 400,
physics: {
default: 'arcade',
arcade: {
gravity: {
y: 300
},
debug: false
}
},
scene: {
preload: preload,
create: create,
update: update
}
};
var game = new Phaser.Game(config); // 创建游戏
var distanceText; // 路程文本
var distance = 0; // 路程
var platforms; // 地面
var player; // 玩家
var enemy; // 敌人
var enemys; // 敌人们
var gameOver = false; // 游戏结束
var enemyTimer; // 敌人计时器
var distanceTimer; // 路程计时器
var cursors; // 按键
// 载入资源
function preload() {
this.load.image('sky', 'assets/sky.png');
this.load.image('ground', 'assets/platform.png');
39 40 this.load.spritesheet('dude', 'assets/dude.png', {
frameWidth: 32,
frameHeight: 48
});
}
// 将资源展示到画布创建资源
function create() {
// 添加画布背景
this.add.image(400, 200, 'sky');
// 添加分数文本
distanceText = this.add.text(16, 16, 'Distance: 0m', {
fontSize: '20px',
fill: '#000'
});
// 添加地面
platforms = this.physics.add.staticGroup();
platforms.create(400, 400, 'ground').setScale(3).refreshBody();
// 添加玩家(精灵)
player = this.physics.add.sprite(100, 300, 'dude');
player.setBounce(0); // 设置阻力
player.setCollideWorldBounds(true); // 禁止玩家走出世界
// 敌人
enemys = this.physics.add.group();
enemys.children.iterate(function (child) {
child.setCollideWorldBounds(false);
});
// 事件
this.anims.create({
key: 'left',
frames: this.anims.generateFrameNumbers('dude', {
start: 0,
end: 3
}),
frameRate: 10,
repeat: -1
});
this.anims.create({
key: 'right',
frames: this.anims.generateFrameNumbers('dude', {
start: 5,
end: 8
}),
frameRate: 10,
repeat: -1
});
this.anims.create({
key: 'turn',
frames: [{
key: 'dude',
frame: 4
}],
frameRate: 20
});
cursors = this.input.keyboard.createCursorKeys();
// 动态创建敌人
enemyTimer = setInterval(function () {
enemy = enemys.create(1000, 300, 'dude');
enemy.setTint(getColor());
enemy.anims.play('left', true);
enemy.setVelocityX(Phaser.Math.Between(-300, -100));
}, Phaser.Math.Between(4000, 8000))
distanceTimer = setInterval(function () {
distance += 1;
distanceText.setText('Distance: ' + distance + 'm');
}, 1000)
this.physics.add.collider(player, platforms); //玩家在地面上
this.physics.add.collider(enemys, platforms);
this.physics.add.collider(player, enemys, hitBomb, null, this);
}
// 一直执行
function update() {
if (cursors.up.isDown && player.body.touching.down) {
player.setVelocityY(-220);
} else {
player.anims.play('right', true);
}
if (gameOver) {
player.setVelocityX(0);
player.anims.play('turn');
return;
}
}
function hitBomb(player, enemys) {
this.physics.pause();
clearInterval(enemyTimer);
clearInterval(distanceTimer);
player.setTint(0xff0000);
gameOver = true;
alert('游戏结束,您跑了' + distance + 'm');
}
function getColor() {
var color = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"].sort(function(){
return Math.random() - 0.5
}).join("").substr(0,6);
return "0x" + color;
}
The above is the detailed content of How to implement a simple parkour game? (detailed code explanation). For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

H5 refers to HTML5, the latest version of HTML. H5 is a powerful markup language that provides developers with more choices and creative space. Its emergence promotes the development of Web technology, making the interaction and effect of web pages more Excellent, as H5 technology gradually matures and becomes popular, I believe it will play an increasingly important role in the Internet world.

This article will help you quickly distinguish between H5, WEB front-end, large front-end, and WEB full stack. I hope it will be helpful to friends in need!

Implementation steps: 1. Monitor the scroll event of the page; 2. Determine whether the page has scrolled to the bottom; 3. Load the next page of data; 4. Update the page scroll position.

In H5, you can use the position attribute to control the positioning of elements through CSS: 1. Relative positioning, the syntax is "style="position: relative;"; 2. Absolute positioning, the syntax is "style="position: absolute;" "; 3. Fixed positioning, the syntax is "style="position: fixed;" and so on.

The rendering description is based on vue.js and does not rely on other plug-ins or libraries; the basic functions remain consistent with element-ui, and some adjustments have been made to the internal implementation for mobile terminal differences. The current construction platform is built using the uni-app official scaffolding. Because most mobile terminals currently have two types: h6 and WeChat mini-programs, it is very suitable for technology selection to run one set of code on multiple terminals. Implementation idea core api: use provide and inject, corresponding to and. In the component, a variable (array) is used internally to store all instances, and the data to be transferred is exposed through provide; the component uses inject internally to receive the data provided by the parent component, and finally combines its own attributes with method submission

H5referstoHTML5,apivotaltechnologyinwebdevelopment.1)HTML5introducesnewelementsandAPIsforrich,dynamicwebapplications.2)Itsupportsmultimediawithoutplugins,enhancinguserexperienceacrossdevices.3)SemanticelementsimprovecontentstructureandSEO.4)H5'srespo

"h5" and "HTML5" are the same in most cases, but they may have different meanings in certain specific scenarios. 1. "HTML5" is a W3C-defined standard that contains new tags and APIs. 2. "h5" is usually the abbreviation of HTML5, but in mobile development, it may refer to a framework based on HTML5. Understanding these differences helps to use these terms accurately in your project.

H5 improves web page accessibility and SEO effects through semantic elements and ARIA attributes. 1. Use, etc. to organize the content structure and improve SEO. 2. ARIA attributes such as aria-label enhance accessibility, and assistive technology users can use web pages smoothly.
