采用的物理引擎是Phaser.js
官网地址:http://phaser.io/
在这里对此引擎不做过多介绍(因为我也是小白,嘿嘿)
效果展示:
源码(详细源码图片资源可点击文章下方或屏幕右上方的github链接进行clone)
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; }
GitHub:Fuck me on GitHub Fuck me on GitHub
总结
以上所述是小编给大家介绍的Phaser.js实现简单的跑酷游戏附源码下载,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月16日
2024年11月16日
- 张敬轩2005《我的梦想我的路》几何娱乐[WAV+CUE][1G]
- 群星《人到四十男儿情(SRS+WIZOR)》[原抓WAV+CUE]
- 马久越《上善若水HQCDII》[低速原抓WAV+CUE]
- 龚玥《女儿情思》6N纯银SQCD【WAV+CUE】
- 张惠妹《你在看我吗》大碟15 金牌大风[WAV+CUE][1G]
- 群星《左耳·听见爱情》星文唱片[WAV+CUE][1G]
- 群星《抖音嗨疯-DISCO英文版》[WAV+CUE][1G]
- 群星.1990-情义无价(TP版)【中唱】【WAV+CUE】
- 马兆骏.1990-心情·七月【滚石】【WAV+CUE】
- 方伊琪.1979-沙鸥(LP版)【星岛全音】【WAV+CUE】
- 蔡琴《醇厚嗓音》6N纯银SQCD【WAV+CUE】
- 陈曦《遇见HQCD》[WAV+CUE]
- 大提琴-刘欣欣《爱的问候》HDCD[WAV+CUE]
- 周耀辉/邓慧中《从什么时候开始》[320K/MP3][95.71MB]
- 周耀辉/邓慧中《从什么时候开始》[FLAC/分轨][361.29MB]