本篇文章给大家带来的内容是介绍如何实现一个简单的跑酷游戏?(代码详解)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。
采用的物理引擎是:Phaser.js
官网地址:http://phaser.io/
在这里对此引擎不做过多介绍(因为我也是小白,嘿嘿)
效果展示:
源码(详细源码图片资源访问:https://github.com/ProsperLee)
1.创建游戏舞台
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.载入资源
function 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.将资源创建到舞台上
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.在创建场景过程中写键盘监听事件
var 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.写碰撞函数(当玩家与敌人碰撞的结果)
var gameOver = false; // 游戏结束 function hitBomb(player, enemys) { this.physics.pause(); clearInterval(enemyTimer); clearInterval(distanceTimer); player.setTint(0xff0000); gameOver = true; alert('游戏结束,您跑了' + distance + 'm'); }
6.在update函数中写时间的执行(须注意的是此函数每一帧都在执行,1帧≠1秒)
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; } }
这里我给敌人上了颜色的,随机16进制颜色
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; }
整个源码奉上(建议去github上自己clone):
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; }
以上是如何实现一个简单的跑酷游戏?(代码详解)的详细内容。更多信息请关注PHP中文网其他相关文章!

H5带来了多项新功能和能力,极大提升了网页的互动性和开发效率。1.语义化标签如、增强了SEO。2.多媒体支持通过和标签简化了音视频播放。3.Canvas绘图提供了动态图形绘制工具。4.本地存储通过localStorage和sessionStorage简化了数据存储。5.地理位置API便于开发基于位置的服务。

HTML5带来了五个关键改进:1.语义化标签提升了代码清晰度和SEO效果;2.多媒体支持简化了视频和音频嵌入;3.表单增强简化了验证;4.离线与本地存储提高了用户体验;5.画布与图形功能增强了网页的可视化效果。

HTML5的核心特性包括语义化标签、多媒体支持、离线存储与本地存储、表单增强。1.语义化标签如、等,提升代码可读性和SEO效果。2.和标签简化多媒体嵌入。3.离线存储和本地存储如ApplicationCache和LocalStorage,支持无网络运行和数据存储。4.表单增强引入新输入类型和验证属性,简化处理和验证。

H5提供了多种新特性和功能,极大地增强了前端开发的能力。1.多媒体支持:通过和元素嵌入媒体,无需插件。2.画布(Canvas):使用元素动态渲染2D图形和动画。3.本地存储:通过localStorage和sessionStorage实现数据持久化存储,提升用户体验。

H5和HTML5是不同的概念:HTML5是HTML的一个版本,包含新元素和API;H5是基于HTML5的移动应用开发框架。HTML5通过浏览器解析和渲染代码,H5应用则需要容器运行并通过JavaScript与原生代码交互。

HTML5的关键元素包括、、、、、等,用于构建现代网页。1.定义头部内容,2.用于导航链接,3.表示独立文章内容,4.组织页面内容,5.展示侧边栏内容,6.定义页脚,这些元素增强了网页的结构和功能性。

HTML5和H5没有区别,H5是HTML5的简称。1.HTML5是HTML的第五个版本,增强了网页的多媒体和交互功能。2.H5常用于指代基于HTML5的移动网页或应用,适用于各种移动设备。

HTML5是超文本标记语言的最新版本,由W3C标准化。HTML5引入了新的语义化标签、多媒体支持和表单增强,提升了网页结构、用户体验和SEO效果。HTML5引入了新的语义化标签,如、、、等,使网页结构更清晰,SEO效果更好。HTML5支持多媒体元素和,无需第三方插件,提升了用户体验和加载速度。HTML5增强了表单功能,引入了新的输入类型如、等,提高了用户体验和表单验证效率。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能