采用的物理引擎是Phaser.js

在这里对此引擎不做过多介绍(因为我也是小白,嘿嘿)

效果展示:

源码(详细源码图片资源可点击文章下方或屏幕右上方的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;

}

总结

以上所述是小编给大家介绍的Phaser.js实现简单的跑酷游戏附源码下载,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

python跑酷游戏源码_Phaser.js实现简单的跑酷游戏附源码下载相关推荐

  1. JS sojson.vX在线解密工具-附源码

    前言 此文仅用于技术科普,教育与研究用途,请勿用于商业甚至非法用途,否则一切后果自负.若用户利用此文章而受到惩处,本人及本平台对其行为概不负责,亦不承担任何连带责任. 在线工具 Sojson.v4ht ...

  2. python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇

    python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)--增删改查篇 前言 一.主界面的样式 二.学生信息的增,删,改,查 1.增加学生信息 2.删除学生信息 3.更改学 ...

  3. JS实现简单农场小游戏

    JS实现简单农场小游戏 简介 效果展示 代码实现 在线预览 简介 最近抽空写了一个简单的农场小游戏,比较简陋,目的只是为了练习js开发能力. 游戏界面顶部包含昵称.经验值.等级和金币信息展示.经验的获 ...

  4. 游戏开发:js实现简单的板球游戏

    js实现简单的板球游戏 大家好,本次我们来使用js来实现一个简单的板球游戏.截图如下: 首先,设计页面代码,页面代码很简单,因为整个几乎是使用js编写的,页面几乎没有代码,如下: <!DOCTY ...

  5. 联网对战游戏开发实例之《斗兽棋》(附源码)

    本次,Matchvs为大家带来的是一款回合制休闲游戏的开源案例 .玩家双方在一个4X4的棋盘上,遵循食物链的规则玩法下进行翻牌与追逐,最终以场上存活的一方为获胜者. 体验地址:http://demo. ...

  6. 17 - python——简单的坦克大战(附源码)

    基于对面向对象编程的思想完成简单的坦克大战游戏.主要目的锻炼面相对象编程思想 同样的在使用python进行游戏编写时需要安装pygame模块 安装方法: pycharm安装方式:File --> ...

  7. Pygame实战:升级后的2048小游戏—解锁新花样,根本停不下来【附源码】

    导语 "嗨嗨嗨!别睡了,醒醒醒醒!该干活儿了~" by--顾木子吖! "刚睡醒,大佬你有什么事儿吖?" by--全体成员! 上期给大家分享的超详细--简易版本的 ...

  8. python抢购火车票源代码_Python动刷新抢12306火车票的代码(附源码)

    摘要:这篇Python开发技术栏目下的"Python动刷新抢12306火车票的代码(附源码)",介绍的技术点是"12306火车票.Python.12306.附源码.火车票 ...

  9. h5 数字变化_基于JS实现数字动态变化显示效果附源码

    先给大家展示下效果,感觉不错,可以参考实现代码,文末附有源码哦. 1.目标 以液晶电子表样式,动态变化的在指定元素内显示数字. 目标关键词:动态变化(定时器),指定元素(DOM元素ID),数字(num ...

最新文章

  1. AI在管理临床试验设计和执行中,人和机器还在学习曲线上?
  2. 编程笔试(解析及代码实现):国内各大银行(招商银行/浦发银行等)在线笔试常见题目(猴子吃桃/字符串逆序输出/一段话输出字的个数/单词大小转换等)及其代码实现(Java/Python/C#等)之详细攻略
  3. 开启MSDTC的方法
  4. 基于Nexys4DDR的UART实验
  5. 在IIS上部署你的ASP.NET Core项目
  6. JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。
  7. c语言topk函数并获取下标,C语言函数语法大全(一)
  8. 07_Redis事务
  9. 这款老不死的笔记本,让我涨见识了
  10. The New Villa
  11. Bash shell编程的语法知识点(1)
  12. 不入世的天才: 尼古拉·特斯拉
  13. Windows下的random_device
  14. 天空盒六面图片+左右眼3D全景图片
  15. 生物竞赛初赛报名已截止!各省往届真题超全汇总,建议收藏
  16. 美丽乡村建筑建设新农村规划设计农村改造调研报告城乡统筹规划(共2383份,15.50G)
  17. python文件查重并合并_用python对excel查重
  18. 用svg画一个微信订阅号的图标
  19. 查看手机包名方法介绍
  20. 箭离开靶心是为了下一次更美丽的重逢

热门文章

  1. C#中常用的几种读取XML文件的方法
  2. uni-app 微信小程序使用 web-view 预览PDF
  3. 如何去除bootstrap中按钮的黑线边框
  4. 计算机应用基础第2版在线作业1,计算机应用基础(第2版)在线作业(1)
  5. 数值范围_数值模拟在铸造业中的发展
  6. jeecgboot 弹出modal刷新主窗体_保利天汇|自然的温度,刷新园林美学天际/辽宁房产特刊...
  7. Android通过WebView在线打开PDF文件(文中提供源码下载)
  8. php thumbs.db,window_Win8系统删除thumbs.db文件的方法,  最近有Win8系统用户反映, - phpStudy...
  9. delimited mysql_在MySQL中存儲逗號分隔的數據
  10. IOS 6 之后 Required background modes